var createReactClass = window.p5VendorJs.createReactClass; var h = window.p5VendorJs.React.createElement; var ReactDOM = window.p5VendorJs.ReactDOM; var AsyncTypeahead = window.p5VendorJs.AsyncTypeahead; var swal = window.swal; var DBG = DBG || false; function convertXlinkToObjects(items) { var _childCache = {}; // fieldName => { pk => child } items.forEach(function (item) { var refFields = Object.keys(item).filter(function (fieldName) { return (-1 !== fieldName.indexOf(':') && item[fieldName]); }); refFields.forEach(function (fieldName) { item[fieldName].forEach(function (child) { if (1 === Object.keys(child).length && 'xlink' in child) { // xlink } else if (Object.keys(child).length > 1) { if ('@primaryKey' in child) { if (!(fieldName in _childCache)) _childCache[fieldName] = {}; _childCache[fieldName][ child['@primaryKey'] ] = child; } } }) }) return item; }); DBG && console.log('DBG convertXlinkToObjects', { _childCache, items }); return items.map(function (item) { var refFields = Object.keys(item).filter(function (fieldName) { return (-1 !== fieldName.indexOf(':') && item[fieldName]); }); refFields.forEach(function (fieldName) { item[fieldName] = item[fieldName].map(function (child) { if (1 === Object.keys(child).length && 'xlink' in child) { var pk = child['xlink'].split('.').pop(); return _childCache[fieldName][pk]; } return child; }) }) return item; }) } function filterByHelper(option, text) { var label = option.label.toLowerCase(); var words = ( (text.indexOf(' ') > 0) ? text.split(' ') : [ text ] ).map(function (word) { return word.trim().replace(/^[0]+/g, '').toLowerCase(); }) .filter(function (word) { return word.length > 2; }); var foundWords = words.filter(function (word) { return (label.indexOf(word) > -1); }) return (foundWords.length === words.length); } // function (option, text) { // if (option.ID == 161323) return false; // console.log('TODO: filterBy...', {option, text}); // return true; // }, var P5UI_AddItemToReport_SelectKrsPerson = createReactClass({ // h(SelectKrsPerson, { krs: this.state.selected }) // this.props.krs: { // "@primaryKey": "161323", // "A_kod": "80-299", // "A_kraj": "POLSKA", // "A_miejscowosc": "GDAŃSK", // "A_nrDomu": "54C", // "A_nrLokalu": null, // "A_poczta": "GDAŃSK", // "A_ulica": "BARNIEWICKA", // "ID": "161323", // "S_kraj": "POLSKA", // "S_miejscowosc": "GDAŃSK", // "S_wojewodztwo": "POMORSKIE", // "krs": "0000223476", // "nazwa": "BIALL Sp. z o.o.", // "nip": "6040018535", // "regon": "193106935", // "default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person": [ // { // "@primaryKey": "747004", // "ID": "747004", // "imiona": "ADRIAN RYSZARD", // "nazwisko": "WIECZORKOWSKI", // "pesel": "75040301615" // }, // { // "@primaryKey": "747003", // "ID": "747003", // "imiona": "EWA", // "nazwisko": "WIECZORKOWSKA", // "pesel": "75090401549" // }, render: function () { var krsPresons = (this.props.krs && this.props.krs['default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person']) ? this.props.krs['default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person'] : []; var _selectPerson = this.props.selectPerson.bind(this) return (krsPresons.length > 0) ? h('ol', { style: { margin: '22px', textAlign: 'left' } }, krsPresons.map(function (person) { return h('li', {}, [ (person.imiona || '') + ' ' + (person.nazwisko || '') + ', ' + (person.pesel || ''), h('button', { className: "btn btn-primary", style: { marginLeft: "8px", padding: "4px 8px", fontSize: "small" }, onClick: function () { _selectPerson(person) } }, "Dodaj osobę") ]); })) : null; } }); var P5UI_AddItemToReport_SelectMSIGPerson = createReactClass({ render: function () { // BI_audit_MSIG_person var msigPresons = (this.props.msig && this.props.msig['default_db__x3A__BI_audit_MSIG_person:BI_audit_MSIG_person']) ? this.props.msig['default_db__x3A__BI_audit_MSIG_person:BI_audit_MSIG_person'] : []; var _selectPerson = this.props.selectPerson.bind(this) return (msigPresons.length > 0) ? h('ol', { style: { margin: '22px', textAlign: 'left' } }, msigPresons.map(function (person) { return h('li', {}, [ (person.imiona || '') + ' ' + (person.nazwisko || '') + ', ' + (person.pesel || ''), h('button', { className: "btn btn-primary", style: { marginLeft: "8px", padding: "4px 8px", fontSize: "small" }, onClick: function () { _selectPerson(person) } }, "Dodaj osobę") ]); })) : null; } }); var P5UI_AddItemToReport_BazaMenuItem = createReactClass({ // this.props: { key: option.ID, baza: selectedBaza, data: option } render: function () { return h('div', {}, this.props.data.label); } }); var P5UI_AddItemToReport = createReactClass({ getInitialState: function () { return { baza: null, newItemBaza: null, isSearching: false, selected: null, }; }, _handleSelectBaza: function (baza) { this.setState({ baza: baza, newItemBaza: null, selected: null, isSearching: false }); }, _handleSelectNewItem: function (baza) { this.setState({ baza: null, newItemBaza: baza, selected: null, isSearching: false }); }, _handleSelected: function (selected) { this.setState({ selected: (selected.length > 0) ? selected[0] : null }); }, _handleSearch: function (query) { this.setState({ isSearching: true }); var _setState = this.setState.bind(this); var baza = this.state.baza; var options= []; window.fetch(URL_FETCH_FROM_BAZA, { method: 'POST', header: { 'contentType': 'applications/json' }, credentials: 'same-origin', body: JSON.stringify({ baza: baza, query: query, }) }) .then(function(response) { return response.text(); }) .then(function(responseText) { try { return JSON.parse(responseText); } catch (e) { throw responseText; } }) .then(function(result) { if (result.type == 'success') { // p5UI__notifyAjaxCallback(result); if (result.body && result.body.items && result.body.items.length > 0) { return result.body.items; } else { p5UI__notifyAjaxCallback({ type: 'warning', msg: "Brak danych pasujących do kryteriów wyszukiwania" }); _setState({ isSearching: false, options: [] }); } } }) .then(function(items) { DBG && console.log('items fetched:', items); _setState({ isSearching: false, options: convertXlinkToObjects(items) }); }) .catch(function(error) { DBG && console.log('request failed', error); }) }, componentWillUnmount: function () { DBG && console.log("DBG: conponentDidUnmount..."); }, render: function () { var bazaBtns = []; bazaBtns.push({ baza: "default_db/BI_audit_KRS/BI_audit_KRS", title: "KRS - Firmy", label: "KRS" }); bazaBtns.push({ baza: "default_db/BI_audit_KRS_person/BI_audit_KRS_person", title: "KRS - Osoby", label: "KRS/p" }); bazaBtns.push({ baza: "default_db/BI_audit_MSIG/BI_audit_MSIG", title: "MSIG - Firmy", label: "MSIG" }); bazaBtns.push({ baza: "default_db/BI_audit_MSIG_person/BI_audit_MSIG_person", title: "MSIG - Osoby", label: "MSIG/p" }); //bazaBtns.push({ baza: "default_db/BI_audit_taxpayer/BI_audit_taxpayer", title: "VAT - Aktywni płatnicy", label: "VATp" }); bazaBtns.push({ baza: "default_db/BI_audit_CEIDG/BI_audit_CEIDG", title: "CEIDG", label: "CEIDG" }); var newItemBtns = []; newItemBtns.push({ baza: "default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY", title: "Nowa osoba", label: "Nowa osoba" }); newItemBtns.push({ baza: "default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI", title: "Nowy podmiot", label: "Nowy podmiot" }); function generateBazaBtn(btn, opts) { return h('button', { title: btn.title, className: "btn btn-success" + (opts.selected ? " active" : ""), style: { margin: "3px" }, onClick: function () { opts.onClick(btn.baza) }, }, btn.label) } function generateNewItemBtn(btn, opts) { return h('button', { title: btn.title, className: "btn btn-success" + (opts.selected ? " active" : ""), style: { margin: "3px" }, onClick: function () { opts.onClick(btn.baza) }, }, btn.label) } var handleSelectBaza = this._handleSelectBaza.bind(this); var handleSelectNewItem = this._handleSelectNewItem.bind(this); var selectedBaza = this.state.baza; var selectedNewItemBaza = this.state.newItemBaza; var selectedItem = this.state.selected; var selectedLabel = ''; if (selectedBaza) { var selBazaBtn = bazaBtns.filter(function (btn) { return btn.baza === selectedBaza; }) if (selBazaBtn) { selBazaBtn[0].title } } var handleSearch = this._handleSearch.bind(this); var handleSelected = this._handleSelected.bind(this); var _onSelect = this.props.onSelect; DBG && console.log('DBG: render this.state.options', this.state.options); return h('div', {}, [ h('p', { style: { textAlign: "center" } }, "Wybierz bazę"), h('div', { style: { marginBottom: '22px' } }, bazaBtns.map(function (btn) { return generateBazaBtn(btn, { onClick: handleSelectBaza, selected: (selectedBaza === btn.baza), }); }).concat( newItemBtns.map(function (btn) { return generateNewItemBtn(btn, { onClick: handleSelectNewItem, selected: (selectedNewItemBaza === btn.baza), }); }) ) ), ('default_db/BI_audit_KRS/BI_audit_KRS' === selectedBaza) && h(AsyncTypeahead, { isLoading: this.state.isSearching, allowNew: false, multiple: false, options: this.state.options, labelKey: "label", emptyLabel: "Brak danych pasujących do kryteriów wyszukiwania", searchText: "Wyszukiwanie...", // labelKey: function (option) { // return [ // option.nazwa.replace('"', ''), // option.nip, // option.krs, // option.regon, // option.S_miejscowosc, // ].join(' ') // }, minLength: 3, onSearch: handleSearch, placeholder: "Wyszukaj...", onChange: handleSelected, autoFocus: true, filterBy: filterByHelper, renderMenuItemChildren: function (option, props) { return h(P5UI_AddItemToReport_BazaMenuItem, { key: option.ID, baza: selectedBaza, data: option }); } }), ('default_db/BI_audit_KRS_person/BI_audit_KRS_person' === selectedBaza) && h(AsyncTypeahead, { isLoading: this.state.isSearching, allowNew: false, multiple: false, options: this.state.options, labelKey: "label", emptyLabel: "Brak danych pasujących do kryteriów wyszukiwania", searchText: "Wyszukiwanie...", // labelKey: function (option) { // return [ // option.nazwa.replace('"', ''), // option.nip, // option.krs, // option.regon, // option.S_miejscowosc, // ].join(' ') // }, minLength: 3, onSearch: handleSearch, placeholder: "Wyszukaj...", onChange: handleSelected, autoFocus: true, filterBy: filterByHelper, renderMenuItemChildren: function (option, props) { return h(P5UI_AddItemToReport_BazaMenuItem, { key: option.ID, baza: selectedBaza, data: option }); } }), ('default_db/BI_audit_MSIG/BI_audit_MSIG' === selectedBaza) && h(AsyncTypeahead, { isLoading: this.state.isSearching, allowNew: false, multiple: false, options: this.state.options, labelKey: "label", emptyLabel: "Brak danych pasujących do kryteriów wyszukiwania", searchText: "Wyszukiwanie...", // labelKey: function (option) { // return [ // option.nazwa.replace('"', ''), // option.nip, // option.krs, // option.regon, // option.S_miejscowosc, // ].join(' ') // }, minLength: 3, onSearch: handleSearch, placeholder: "Wyszukaj...", onChange: handleSelected, autoFocus: true, filterBy: filterByHelper, renderMenuItemChildren: function (option, props) { return h(P5UI_AddItemToReport_BazaMenuItem, { key: option.ID, baza: selectedBaza, data: option }); } }), ('default_db/BI_audit_MSIG_person/BI_audit_MSIG_person' === selectedBaza) && h(AsyncTypeahead, { isLoading: this.state.isSearching, allowNew: false, multiple: false, options: this.state.options, labelKey: "label", emptyLabel: "Brak danych pasujących do kryteriów wyszukiwania", searchText: "Wyszukiwanie...", // labelKey: function (option) { // return [ // option.nazwa.replace('"', ''), // option.nip, // option.krs, // option.regon, // option.S_miejscowosc, // ].join(' ') // }, minLength: 3, onSearch: handleSearch, placeholder: "Wyszukaj...", onChange: handleSelected, autoFocus: true, filterBy: filterByHelper, renderMenuItemChildren: function (option, props) { return h(P5UI_AddItemToReport_BazaMenuItem, { key: option.ID, baza: selectedBaza, data: option }); } }), ('default_db/BI_audit_CEIDG/BI_audit_CEIDG' === selectedBaza) && h(AsyncTypeahead, { isLoading: this.state.isSearching, allowNew: false, multiple: false, options: this.state.options, labelKey: "label", emptyLabel: "Brak danych pasujących do kryteriów wyszukiwania", searchText: "Wyszukiwanie...", // labelKey: function (option) { // return [ // option.nazwa.replace('"', ''), // option.nip, // option.krs, // option.regon, // option.S_miejscowosc, // ].join(' ') // }, minLength: 3, onSearch: handleSearch, placeholder: "Wyszukaj...", onChange: handleSelected, autoFocus: true, filterBy: filterByHelper, renderMenuItemChildren: function (option, props) { return h(P5UI_AddItemToReport_BazaMenuItem, { key: option.ID, baza: selectedBaza, data: option }); } }), (selectedNewItemBaza === "default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY") && h('div', { className: 'form-group' }, [ h('input',{ className:'form-control required', id:'personName', placeholder:'Imię' }), h('input',{ className:'form-control required', id:'personSurname', placeholder:'Nazwisko' }), h('input',{ className:'form-control required', id:'personPesel', placeholder:'Pesel' }), h('input',{ className:'form-control', id:'personNip', placeholder:'NIP' }), h('button', { className: "btn btn-primary", onClick: function () { _onSelect(selectedNewItemBaza, { personName: document.getElementById('personName').value, personSurname: document.getElementById('personSurname').value, personPesel: document.getElementById('personPesel').value, personNip: document.getElementById('personNip').value, }) swal.close(); }.bind(this) }, "Dodaj osobę") ]), (selectedNewItemBaza === "default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI") && h('div', { className: 'form-group' }, [ h('input',{ className:'form-control required', id:'companyName', placeholder:'Nazwa' }), h('input',{ className:'form-control required', id:'companyPesel', placeholder:'Pesel' }), h('input',{ className:'form-control required', id:'companyStreet', placeholder:'Ulica' }), h('input',{ className:'form-control required', id:'companyNumber', placeholder:'Numer budynku' }), h('input',{ className:'form-control required', id:'companyNumberLocal', placeholder:'Numer lokalu' }), h('input',{ className:'form-control required', id:'companyPostCode', placeholder:'Kod pocztowy' }), h('input',{ className:'form-control required', id:'companyCity', placeholder:'Miejscowosc' }), h('input',{ className:'form-control required', id:'companyNip', placeholder:'NIP' }), h('input',{ className:'form-control', id:'companyRegon', placeholder:'REGON' }), h('input',{ className:'form-control', id:'companyKrs', placeholder:'KRS' }), h('button', { className: "btn btn-primary", onClick: function () { _onSelect(selectedNewItemBaza, { companyName: document.getElementById('companyName').value, companyNip: document.getElementById('companyNip').value, companyRegon: document.getElementById('companyRegon').value, companyPesel: document.getElementById('companyPesel').value, companyStreet: document.getElementById('companyStreet').value, companyNumber: document.getElementById('companyNumber').value, companyNumberLocal: document.getElementById('companyNumberLocal').value, companyPostCode: document.getElementById('companyPostCode').value, companyCity: document.getElementById('companyCity').value, companyKrs: document.getElementById('companyKrs').value, }) swal.close(); }.bind(this) }, "Dodaj podmiot") ]), (selectedBaza && selectedItem) && h('div', { style: { margin: '22px' } }, [ h('button', { className: "btn btn-primary", onClick: function () { _onSelect(selectedBaza, selectedItem); // ReactDOM.unmountComponentAtNode(document.getElementById(FUNCTION_NAME + '__searchBaza')); // swal.close() } }, "Dodaj " + ( ( ('default_db/BI_audit_KRS_person/BI_audit_KRS_person' === selectedBaza) || ('default_db/BI_audit_MSIG_person/BI_audit_MSIG_person' === selectedBaza) ) ? "osobę" : "firmę" )) // TODO: |> KRS -> firmę, |> KRS Person -> osobę, .... ]), ('default_db/BI_audit_KRS/BI_audit_KRS' === selectedBaza && selectedItem) && h(P5UI_AddItemToReport_SelectKrsPerson, { krs: selectedItem, selectPerson: function (person) { _onSelect("default_db/BI_audit_KRS_person/BI_audit_KRS_person", person); // ReactDOM.unmountComponentAtNode(document.getElementById(FUNCTION_NAME + '__searchBaza')); // swal.close() } }), ('default_db/BI_audit_MSIG/BI_audit_MSIG' === selectedBaza && selectedItem) && h(P5UI_AddItemToReport_SelectMSIGPerson, { msig: selectedItem, selectPerson: function (person) { _onSelect("default_db/BI_audit_MSIG_person/BI_audit_MSIG_person", person); // ReactDOM.unmountComponentAtNode(document.getElementById(FUNCTION_NAME + '__searchBaza')); // swal.close() } }), (DBG && selectedItem) && h('pre', { style: { textAlign: 'left' } }, JSON.stringify(selectedItem, null, 2)), ]) } }); function getWindowWidth() { var w = window, d = document, e = d.documentElement, g = d.getElementsByTagName('body')[0]; return w.innerWidth || e.clientWidth || g.clientWidth; } function addItemToRaport(event) { // default_db/BI_audit_KRS/BI_audit_KRS // default_db/BI_audit_KRS_person/BI_audit_KRS_person // default_db/BI_audit_MSIG/BI_audit_MSIG // default_db/BI_audit_MSIG_person/BI_audit_MSIG_person // default_db/BI_audit_taxpayer/BI_audit_taxpayer // default_db/BI_audit_CEIDG/BI_audit_CEIDG // default_db/BI_audit_ENERGA_RUM_UMOWY/BI_audit_ENERGA_RUM_UMOWY // default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI // default_db/BI_audit_ENERGA_FAKTURY/BI_audit_ENERGA_FAKTURY var valueUrl = global.location.hash; swal({ title: "Dodaj osobę lub podmiot", width: (getWindowWidth() * 0.8), html: '
', animation: false, showConfirmButton: false, showCancelButton: false, showCloseButton: true, allowEnterKey: false, onOpen: function () { ReactDOM.render( h(P5UI_AddItemToReport, { onSelect: function (baza, selected) { DBG && console.log('TODO: selected ', { baza, selected }); global.fetch(URL_SAVE_TO_DB, { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ baza: baza, item: selected }) }).then(function(response) { return response.json(); }).then(function(result) { if(result.type === "success"){ if(valueUrl === '#PRACOWNICY'){ urlFetchPracownicy(1); }else{ urlFetchKontrahenci(1); } } p5UI__notifyAjaxCallback(result); }) } }), document.getElementById(FUNCTION_NAME + '__searchBaza') ) } }).catch(function (err) { DBG && console.log('err', err) }) } // global[FUNCTION_NAME] = addItemToRaport; module.exports[FUNCTION_NAME] = addItemToRaport; // module.exports = { // P5UI_AddItemToReport_BazaMenuItem, // P5UI_AddItemToReport, // createPracownikAjax // }