if ( typeof Vue !== 'undefined' ) { /** * search component mixin * this is a template for all search components */ const searchComponentMixin = { props: { id: { default: null }, // provided title: { default: '' }, // provided code: { default: '' }, entityTwoIdFieldName: { default: '' }, entityThreeIdFieldName: { default: '' }, entityFourIdFieldName: { default: '' }, labelText: { default: 'Search' }, maxResults: { default: 100 }, // provided required: { default: false }, disabled: { default: false }, readOnly: { default: false }, showLabel: { default: true }, classes: '', // provided showInputErrorOnZeroId: { default: false }, clearTextOnSelect: { default: false }, inputMode:{ default: 'text' } }, data: function() { return { cachedEntity: null, entityId: this.id, entityTwoId: null, entityThreeId: null, entityFourId: null, entityCode: this.code, list: { term: this.title, items: [], loading: false, selected: {}, opened: false, position: { top: 0, left: 0 } }, // object for holding request data request: { xhr: null } } }, watch: { id: function( val ) { this.entityId = val; }, code: function( val ) { this.entityCode = val; }, title: function( val ) { this.list.term = val; } }, methods: { getEmittedEventName: function() { return 'entity-select'; }, getSearchUrl: function() { }, getItemKey: function( item ) { return JSON.stringify( item ); }, getDisplayTitle: function( item ) { return this.getTitle( item ); }, getTitle: function( item ) { if ( typeof item.code !== 'undefined' ) { return `${item.title} (${item.code})`; } return item.title; }, getTitleHtml: function( item ) { let term = this.list.term; let reg = new RegExp( term, 'gi' ); return this.getDisplayTitle( item ).replace( reg, '$&' ); }, onKeyup: async function( $event ) { // if escape key, close the list if ( $event.keyCode === 27 ) { this.closeList(); } else { // else get and show suggestions await this.showSuggestions(); } }, getSearchResults: function() { let self = this; // abort previous request if ( null !== this.request.xhr ) { this.request.xhr.abort(); } // send new request this.request.xhr = $.get( this.getSearchUrl(), function( data ) { self.list.items.push( ...data.slice( 0, self.maxResults ) ); self.loading = false; }); }, showSuggestions: async function() { if ( this.list.term !== '' ) { this.loading = true; this.list.items = []; this.openList(); this.getSearchResults(); } else { this.entityId = null; this.entityCode = null; this.closeList(); this.$emit( this.getEmittedEventName() + '-cleared' ); } }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityCode = item.code; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); // if clear if ( this.clearTextOnSelect ) { this.list.term = ''; } }, positionList: function() { this.list.position.top = $( this.$el ).height() + 'px'; }, openList: function() { this.list.opened = true; }, closeList: function() { this.list.opened = false; this.list.items = []; }, handleNoResults: function() { this.entityId = null; this.closeList(); }, handleClearSearchData: function() { this.list.term = ''; this.entityId = null; this.entityCode = null; this.cachedEntity = null; }, getSortedItems: function() { const sortedList = [...this.list.items]; return sortedList.sort( ( a, b ) => { const $this = this; const aScore = window.ctp.utils.getSimilarityScore( $this.getDisplayTitle( a ), $this.list.term ); const bScore = window.ctp.utils.getSimilarityScore( $this.getDisplayTitle( b ), $this.list.term ); return bScore - aScore; }); }, getInputProgressionEventName: function (){ return 'input-in-progress' } }, template: `
`, mounted: function() { // set list position this.positionList(); // listen for clear data this.$parent.$on( 'clear-search-data', this.handleClearSearchData ); } }; /* * warehouse supplies item search * */ Vue.component( 'warehouse-supplies-item-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/warehouse-supplies/search-items?search=${encodeURIComponent( this.list.term )}` }, getEmittedEventName: function() { return 'item-select'; }, getTitle: function( item ) { return item.sku; } }, props: { labelText: { default: 'Search Item' }, titleFieldName: { default: 'sku' }, codeFieldName:{ default: 'sku' }, idFieldName:{ default: 'sku' } } }); /* * vehicle search * */ Vue.component( 'vehicle-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { let url = `/uind/rest/uic/vehicle-request/vehicle-search?term=${encodeURIComponent( this.list.term )}` if(this.formType===null && this.fleetType===null){ return url } else if(this.formType!==null && this.fleetType===null){ url+= `&formType=${this.formType}` return url } else if(this.fleetType!==null && this.formType===null){ url+= `&fleetType=${this.fleetType}` return url } else { url+= `&formType=${this.formType}&fleetType=${this.fleetType}` return url } }, getEmittedEventName: function() { return 'vehicle-select'; }, getTitle: function( vehicle ) { return vehicle.model + ' (' + vehicle.registrationNumber + ')'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityCode = item.registrationNumber; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); // if clear if ( this.clearTextOnSelect ) { this.list.term = ''; } } }, props: { labelText: { default: 'Search Vehicle' }, titleFieldName: { default: 'vehicleRegistrationNumber' }, idFieldName: { default: 'vehicleId' }, formType: { default: null }, fleetType: { default: null }, codeFieldName: { default: 'vehicleCode' }, } }); /* * vehicle search * */ Vue.component( 'physical-compensation-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/hrms/physical-compensations/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'vehicle-select'; }, getTitle: function( vehicle ) { return vehicle.model + ' (' + vehicle.registrationNumber + ')'; }, setEntity: function ( vehicle, event ) { event.preventDefault(); this.entityCode = vehicle.registrationNumber; this.list.term = this.getTitle( vehicle ); this.closeList(); } }, props: { labelText: { default: 'Search Vehicle' }, titleFieldName: { default: 'vehicleModel' }, codeFieldName: { default: 'vehicleRegistrationNumber' }, } }); /** * supplier search component */ Vue.component( 'employee-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { let url = `/uind/rest/hrms/employees/search?term=${encodeURIComponent( this.list.term )}`; if ( this.departmentIds != null && this.departmentIds.length > 0 ) { if( Array.isArray(this.departmentIds) ) { url += `&department-ids=${this.departmentIds.join( ',' )}`; } else if( typeof this.departmentIds === 'string' && !this.departmentIds.includes(',') ){ url += `&department-ids=${this.departmentIds.substring(1,this.departmentIds.length-1)}`; } } if ( this.functionIds != null && this.functionIds.length > 0 ) { url += `&function-ids=${this.functionIds.join( ',' )}`; } if ( this.ids != null && this.ids.length > 0 ) { url += `&employee-ids=${this.ids.join( ',' )}`; } if ( this.isActive != null ) { url += `&is-active=${this.isActive}`; } return url; }, getEmittedEventName: function() { return 'employee-select'; }, getTitle: function( item ) { if ( !! item.serialNumber ) { let title = `${item.fullName} (${item.serialNumber})`; if( this.isPositionVisible && !! item.positionTitle ){ title += ` (${item.positionTitle}) ` } if ( !! item.officialEmail ) { title += ` / ${item.officialEmail}` } return title; } return item.fullName; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityCode = item.username; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); // if clear if ( this.clearTextOnSelect ) { this.list.term = ''; } }, }, props: { // provided labelText: { default: 'Search Employee' }, // provided titleFieldName: { default: 'employeeTitle' }, idFieldName: { default: 'employeeId' }, // provided codeFieldName: { default: 'employeeCode' }, departmentIds: { default: null }, functionIds: { default: null }, ids: { default: null }, isActive: { default: null }, isPositionVisible : { default : false }, }, }); /** * financing purchase order search component */ Vue.component( 'financing-po-search-component', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/banking/financing/purchase-orders/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'financing-po-select'; }, getTitle: function( po ) { return po.code; } }, props: { labelText: { default: 'Search Financing PO' }, titleFieldName: { default: 'financingPoTitle' }, idFieldName: { default: 'financingPoId' }, codeFieldName: { default: 'financingPoCode' } } } ) /** * purchase order search component */ Vue.component( 'purchase-order-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/ctp/rest/purchase-orders/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'purchase-order-select'; }, getTitle: function( po ) { return po.code; } }, props: { labelText: { default: 'Search Purchase Order' }, titleFieldName: { default: 'purchaseOrderTitle' }, idFieldName: { default: 'purchaseOrderId' }, codeFieldName: { default: 'purchaseOrderCode' } } }); /** * approved purchase order search component */ Vue.component( 'approved-purchase-order-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/purchase-orders/search-approved?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'purchase-order-select'; }, getTitle: function( po ) { return po.code; } }, props: { labelText: { default: 'Search Approved Purchase Order' }, titleFieldName: { default: 'purchaseOrderTitle' }, idFieldName: { default: 'purchaseOrderId' }, codeFieldName: { default: 'purchaseOrderCode' } } }); Vue.component( 'import-clearing-bill-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function () { return `/uind/accounts-finance/support-queries/import-clearing-bill/search?term=${encodeURIComponent(this.list.term)}`; }, getEmittedEventName: function (){ return 'import-bill-select'; }, getTitle: function (bill){ return bill.code; } }, props: { labelText: { default: 'Search Bill code' }, titleFieldName: { default: 'billTitle' }, idFieldName: { default: 'billId' }, codeFieldName: { default: 'billCode' } } }) Vue.component( 'export-clearing-bill-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function () { return `/uind/accounts-finance/support-queries/export-clearing-bill/search?term=${encodeURIComponent(this.list.term)}`; }, getEmittedEventName: function (){ return 'export-bill-select'; }, getTitle: function (bill){ return bill.code; } }, props: { labelText: { default: 'Search Bill code' }, titleFieldName: { default: 'billTitle' }, idFieldName: { default: 'billId' }, codeFieldName: { default: 'billCode' } } }) Vue.component('grn-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function () { return `/uind/accounts-finance/support-queries/grn/search?term=${encodeURIComponent(this.list.term)}`; }, getEmittedEventName: function () { return 'grn-select'; }, getTitle: function (grn) { return grn.code; } }, props: { labelText: { default: 'Search Grn code' }, titleFieldName: { default: 'grnTitle' }, idFieldName: { default: 'grnId' }, codeFieldName: { default: 'grnCode' } } }) Vue.component( 'bill-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/accounts-finance/support-queries/bill/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'bill-select'; }, getTitle: function( bill ) { return bill.code; } }, props: { labelText: { default: 'Search Bill code' }, titleFieldName: { default: 'billTitle' }, idFieldName: { default: 'billId' }, codeFieldName: { default: 'billCode' } } }); Vue.component( 'voucher-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/accounts-finance/support-queries/voucher/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'voucher-select'; }, getTitle: function( voucher ) { return voucher.voucherCode; } }, props: { labelText: { default: 'Search Voucher code' }, titleFieldName: { default: 'voucherTitle' }, idFieldName: { default: 'voucherId' }, codeFieldName: { default: 'voucherCode' } } }); /** * bill of lading search component */ Vue.component( 'bill-of-lading-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/bol-customs/search?term=${encodeURIComponent( this.list.term )}&supplier-id=${encodeURIComponent( this.supplierId )}&invoice-date=${encodeURIComponent( this.invoiceDate )}`; }, getEmittedEventName: function() { return 'bill-of-lading-select'; }, getTitle: function( bol ) { return bol.billOfLadding; } }, props: { labelText: { default: 'Search BOL' }, titleFieldName: { default: 'billOfLadingTitle' }, idFieldName: { default: 'billOfLadingId' }, codeFieldName: { default: '' }, supplierId: { default: 0 }, invoiceDate: { default: '' } } }); /** * supplier search component */ Vue.component( 'supplier-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { let url = `/uind/rest/uic/suppliers/search?term=${encodeURIComponent( this.list.term )}`; if ( !! this.categoryId ) { url += `&category-id=${this.categoryId}`; } if( !! this.purchaseOrderType ){ url += `&purchase-order-type=${this.purchaseOrderType}`; } return url; }, getEmittedEventName: function() { return 'supplier-select'; }, getTitle: function (supplier) { return supplier.title; } }, props: { labelText: { default: 'Search Supplier' }, titleFieldName: { default: 'supplierTitle' }, idFieldName: { default: 'supplierId' }, codeFieldName: { default: 'supplierCode' }, categoryId: { default: null }, purchaseOrderType : { default : null } } }); /** * supplier title category search component */ Vue.component( 'supplier-title-category-search', { mixins: [searchComponentMixin], props: { labelText: { default: 'Search Supplier' }, titleFieldName: { default: 'supplierTitle' }, idFieldName: { default: 'supplierId' }, codeFieldName: { default: 'supplierCode' }, categoryId: { default: '' } }, methods: { getSearchUrl: function() { return `/uind/rest/uic/suppliers/search?term=${encodeURIComponent( this.list.term )}&category-id=${this.categoryId}`; }, getEmittedEventName: function() { return 'supplier-select'; }, getTitle: function( supplier ) { // item title only return supplier.title; } } }); /** * broker search component */ Vue.component( 'broker-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/brokers/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'broker-select'; }, getTitle: function (broker){ return broker.title; } }, props: { labelText: { default: 'Search Broker' }, titleFieldName: { default: 'brokerTitle' }, idFieldName: { default: 'brokerId' }, codeFieldName: { default: 'brokerCode' } } }); /** * sale-quote search component */ Vue.component( 'sale-quote-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/local-sale/sale-quote/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'sale-quote-select'; } }, props: { labelText: { default: 'Search Sale Quote' }, titleFieldName: { default: 'saleQuoteTitle' }, idFieldName: { default: 'saleQuoteId' }, codeFieldName: { default: '' } } }); /** * sale-order search component */ Vue.component( 'sale-order-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/sale-order/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'sale-order-select'; } }, props: { labelText: { default: 'Search Sale Order' }, titleFieldName: { default: 'saleOrderTitle' }, idFieldName: { default: 'saleOrderId' }, codeFieldName: { default: '' } } }); /** * customer search component */ Vue.component( 'customer-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/customers/search?term=${encodeURIComponent( this.list.term )}&categoryId=${encodeURIComponent(this.categoryId)}&ids=${encodeURIComponent(this.ids)}`; }, getEmittedEventName: function() { return 'customer-select'; } }, props: { labelText: { default: 'Search Customer' }, titleFieldName: { default: 'customerTitle' }, idFieldName: { default: 'customerId' }, codeFieldName: { default: 'customerCode' }, categoryId: { default: '' }, ids: { default: '' } } }); /** * location unit search component */ Vue.component( 'location-unit-search', { mixins: [ searchComponentMixin ], methods: { getSearchUrl: function() { let url = `/uind/rest/uic/locations/units/search?term=${encodeURIComponent( this.list.term )}` if ( !! this.siteId ) { url += `&siteId=${this.siteId}`; } return url; }, getEmittedEventName: function() { return 'location-unit-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityTwoId = item.siteId; this.entityId = item.id; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, }, props: { labelText: { default: 'Search Unit' }, titleFieldName: { default: 'unitTitle' }, idFieldName: { default: 'unitId' }, entityTwoIdFieldName :{ default: null }, codeFieldName: { default: '' }, siteId: { default: null }, } }); /** * sub meter search component */ Vue.component( 'sub-meter-search', { mixins: [ searchComponentMixin ], methods: { getSearchUrl: function() { let url = `/uind/rest/uic/utilities/sub-meters/search?term=${encodeURIComponent( this.list.term )}` return url; }, getEmittedEventName: function() { return 'sub-meter-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityTwoId = item.siteId; this.entityId = item.id; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, getTitle: function(item){ return `${item.location} ( ${item.meterNumber} )`; } }, props: { labelText: { default: 'Search Sub Meter' }, titleFieldName: { default: 'Sub Meter Title' }, idFieldName: { default: 'subMeterId' }, entityTwoIdFieldName :{ default: null }, codeFieldName: { default: '' }, siteId: { default: null }, } }); /** * location site search component */ Vue.component( 'location-site-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/ctp/rest/locations/sites/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'location-site-select'; } }, props: { labelText: { default: 'Search Site' }, titleFieldName: { default: 'siteTitle' }, idFieldName: { default: 'siteId' }, codeFieldName: { default: '' } } }); /** * Work Order Type search component */ Vue.component('wo-type-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function () { return `/uind/rest/uic/work-order/type/search?term=${encodeURIComponent(this.list.term)}`; }, getEmittedEventName: function () { return 'wo-type-select'; } }, props: { labelText: { default: 'Search type' }, titleFieldName: { default: 'typeTitle' }, idFieldName: { default: 'typeId' }, codeFieldName: { default: 'typeCode' } } }); /** * item search component */ Vue.component( 'item-search', { mixins: [searchComponentMixin], props: { labelText: { default: 'Search Item' }, titleFieldName: { default: 'itemTitle' }, idFieldName: { default: 'itemId' }, codeFieldName: { default: 'itemCode' }, poItemsOnly:{ default:false }, typeIds: { default: null }, showSkuOnly: { default: false }, }, methods: { getSearchUrl: function() { return `/ctp/rest/items/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'item-select'; }, getTitle: function( item ) { // if show sku only if ( this.showSkuOnly ) { return item.sku; } // else format item title with code if ( typeof item.code !== 'undefined' ) { return `${item.title} (${item.code})`; } // item title only return item.title; }, } }); /** * item search component For Service Items only */ Vue.component('item-search-indent', { mixins: [searchComponentMixin], props: { labelText: { default: 'Search Item' }, titleFieldName: { default: 'itemTitle' }, idFieldName: { default: 'itemId' }, codeFieldName: { default: 'itemCode' }, woItemsOnly: { default: false }, typeIds: { default: null }, showSkuOnly: { default: false }, indentType: { default: 'PURCHASE_ORDER' } }, methods: { getSearchUrl: function () { return `/uind/rest/uic/items/search-service-item?indent-type=${this.indentType}&term=${encodeURIComponent(this.list.term)}&po-items-only=${this.woItemsOnly}&type-ids=${!!this.typeIds ? this.typeIds.join(',') : ''}`; }, getEmittedEventName: function () { return 'item-select'; }, getTitle: function (item) { // if show sku only if (this.showSkuOnly) { return item.sku; } // else format item title with code if (typeof item.code !== 'undefined') { return `${item.title} (${item.code})`; } // item title only return item.title; }, } }); /** * item configuration search component */ Vue.component( 'item-configuration-search', { mixins: [searchComponentMixin], props: { labelText: { default: 'Search Item Config' }, titleFieldName: { default: 'configTitle' }, idFieldName: { default: 'itemConfigId' }, codeFieldName: { default: '' }, itemId: { default: '' }, itemLookupCode: { default: '' }, }, methods: { getSearchUrl: function() { let url = `/uind/rest/uic/items/configurations/search?term=${encodeURIComponent( this.list.term )}&`; if ( !! this.itemId ) { url += `item-id=${this.itemId}&`; } if ( !! this.itemLookupCode ) { url += `item-lookup-code=${this.itemLookupCode}&`; } return url; }, getEmittedEventName: function() { return 'item-configuration-select'; }, getTitle: function( item ) { return `${item.title} - ${item.itemLookupCode} (${item.configurationUom} of ${item.configurationUnits} ${item.childUom})`; }, mounted: async function() { console(this.itemId); }, } }); /** * item type search */ Vue.component( 'item-type-search' ,{ mixins : [ searchComponentMixin ], methods : { getSearchUrl: function() { return `/uind/rest/uic/items/types/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'item-type-select'; } }, props: { labelText: { default: 'Item Type Search' }, titleFieldName: { default: 'itemTypeTitle' }, idFieldName: { default: 'itemTypeId' }, codeFieldName: { default: 'itemTypeCode' } } }); /** * brand search component */ Vue.component( 'brand-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/admin/item-brands/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'brand-select'; } }, props: { labelText: { default: 'Search Brand' }, titleFieldName: { default: 'brandTitle' }, idFieldName: { default: 'brandId' }, codeFieldName: { default: 'brandCode' } } }); /** * gin search component (un-tagged by dc number) */ Vue.component( 'gin-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/gins/un-tagged/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'gin-select'; }, getTitle: function( item ) { return item.deliveryChallanNumber + ' (' + item.code + ') ' + ' (SUP-' + item.supplierId + ')'; }, }, props: { labelText: { default: 'Search GIN' }, titleFieldName: { default: 'ginTitle' }, idFieldName: { default: 'ginId' }, codeFieldName: { default: 'ginCode' } } }); /** * item unit search component */ Vue.component( 'item-unit-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/items/units/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'item-unit-select'; }, getTitle: function( item ) { return item.title; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); } }, props: { labelText: { default: 'Search UOM' }, titleFieldName: { default: 'unitTitle' }, idFieldName: { default: 'unitId' }, codeFieldName: { default: 'unitCode' } }, }); /** * cosmos sku expression search component */ Vue.component( 'cosmos-sku-expression-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { let url = `/uind/rest/uic/cosmos-product-sku-expression/search?term=${encodeURIComponent( this.list.term )}`; if ( !! this.marketplace ) { url += `&marketplace=${encodeURIComponent( this.marketplace )}`; } return url; }, getEmittedEventName: function() { return 'cosmos-sku-expression-select'; }, getTitle: function( item ) { let title = item.skuExpression; if ( !! item.description || item.size || item.pack ) { if ( !! item.description ) { title += ` / ${item.description}` } if ( !! item.size ) { title += ` / ${item.size}` } if ( !! item.pack ) { title += ` / ${item.pack}` } } return title; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, }, props: { labelText: { default: 'Search Expression' }, idFieldName: { default: 'expression' }, titleFieldName: { default: '' }, codeFieldName: { default: '' }, marketplace: { default: '' } }, }); /** * account search */ Vue.component( 'account-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { if(this.isAllAccountSearch) { return `/uind/rest/accounts-finance/accounts/search?term=${encodeURIComponent( this.list.term )}`; } // if cash and bank account only if ( this.cashAndBankAccountsOnly ) { return `/uind/rest/accounts-finance/accounts/cash-and-bank-accounts/search?term=${encodeURIComponent( this.list.term )}${this.getActiveParam()}`; } // if fund accounts only (bank accounts) if ( this.fundAccountsOnly ) { return `/uind/rest/accounts-finance/accounts/fund-accounts/search?term=${encodeURIComponent( this.list.term )}${this.getActiveParam()}`; } // build url let url = `/uind/rest/accounts-finance/accounts/search?term=${encodeURIComponent( this.list.term )}${this.getActiveParam()}`; if ( this.accountLevelFourIds.length > 0 ) { url += `&level-four-ids=${this.accountLevelFourIds.join( ',' )}`; } if ( this.accountLevelThreeIds.length > 0 ) { url += `&level-three-ids=${this.accountLevelThreeIds.join( ',' )}`; } if ( this.accountLevelTwoIds.length > 0 ) { url += `&level-two-ids=${this.accountLevelTwoIds.join( ',' )}`; } if ( !! this.parentEntityType ) { url += `&parent-entity-type=${this.parentEntityType}`; } if ( !! this.parentEntityId ) { url += `&parent-entity-id=${this.parentEntityId}`; } return url; }, getActiveParam: function() { if ( this.activeStatus != null ) { if ( this.activeStatus === 'ACTIVE' ) { return '&is-active=true'; } if ( this.activeStatus === 'INACTIVE' ) { return '&is-active=false'; } } return ''; }, getEmittedEventName: function() { return 'account-select'; }, getDisplayTitle: function( item ) { return this.isOnlyCode ? item.code :`${item.hierarchyString}`; }, getTitle: function( item ) { return this.isOnlyCode ? item.code : item.title; } }, props: { labelText: { default: 'Search Account' }, titleFieldName: { default: 'accountTitle' }, idFieldName: { default: 'accountId' }, codeFieldName: { default: 'accountCode' }, parentEntityType: { default: null }, parentEntityId: { default: null }, isAllAccountSearch: { default: false }, accountLevelTwoIds: { default() { return [] } }, accountLevelThreeIds: { default() { return [] } }, accountLevelFourIds: { default() { return [] } }, fundAccountsOnly: { default: false }, cashAndBankAccountsOnly: { default: false }, activeStatus: { default: null }, isOnlyCode: { default: false } }, mounted: function (){ console.log(this.isOnlyCode) } }); /** * account transaction search */ Vue.component( 'account-transaction-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { let paramPart = `term=${encodeURIComponent( this.list.term )}`; if ( !! this.accountId ) { paramPart += `&account-id=${this.accountId}`; } if ( !! this.instrumentId ) { paramPart += `&instrument-id=${this.instrumentId}`; } if ( !! this.instrumentNumber ) { paramPart += `&instrument-number=${this.instrumentNumber}`; } if ( this.bankStatementUntaggedOnly != null ) { paramPart += `&bank-statement-untagged-only=${this.bankStatementUntaggedOnly}`; } return `/uind/rest/accounts-finance/accounts/transactions/search?${paramPart}`; }, getEmittedEventName: function() { return 'account-transaction-select'; }, getTitle: function( item ) { return `${item.code} (${window.ctp.utils.formatCurrencyPKR( item.debitTotal )})`; }, }, props: { labelText: { default: 'Search Voucher' }, titleFieldName: { default: 'transactionTitle' }, idFieldName: { default: 'transactionId' }, codeFieldName: { default: 'transactionCode' }, accountId: { default: null }, instrumentId: { default: null }, instrumentNumber: { default: null }, instrumentNumber: { default: null }, bankStatementUntaggedOnly: { default: null } } }); /** * bank statement search */ Vue.component( 'bank-statement-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { let url = `/uind/rest/accounts-finance/banking/bank-statements/search?term=${encodeURIComponent( this.list.term )}`; if ( this.date != null ) { url += `&date=${this.date}` } return url; }, getEmittedEventName: function() { return 'bank-statement-select'; }, getTitle: function( statement ) { let title = `${statement.referenceNumber} / ${statement.fullBankAccountNumber}`; if ( statement.debitAmount > 0 ) { title += ` / DEBIT: ${window.ctp.utils.formatCurrencyPKR( statement.debitAmount )}`; } if ( statement.creditAmount > 0 ) { title += ` / CREDIT: ${window.ctp.utils.formatCurrencyPKR( statement.creditAmount )}`; } title += ` / ${window.ctp.utils.getFormattedDateStringFromDateString(statement.transactionDate)}`; return title; } }, props: { labelText: { default: 'Search Payment' }, titleFieldName: { default: 'payToTitle' }, idFieldName: { default: 'id' }, entityTwoIdFieldName: { default: '' }, codeFieldName: { default: '' }, date: { default: null } } }); /** * banking institution search */ Vue.component( 'banking-institution-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/admin/banking-institutions/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'banking-institution-select'; }, getTitle: function( item ) { return item.title; }, }, props: { labelText: { default: 'Search Bank' }, titleFieldName: { default: 'bankingInstitutionTitle' }, idFieldName: { default: 'bankingInstitutionId' }, codeFieldName: { default: 'bankingInstitutionCode' } } }); /** * payment-request-type-search */ Vue.component( 'payment-request-type-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/payment-request-types/search?term=${encodeURIComponent(this.list.term)}`; }, getEmittedEventName: function() { return 'payment-type-select'; }, getTitle: function( item ) { return item.code; } }, props: { labelText: { default: 'Search Payment Request Type' }, titleFieldName: { default: 'paymentRequestTypeCode' } } }); /** * financing liability search */ Vue.component( 'financing-liability-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/accounts/search/financing-liability-accounts?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'financing-liability-select'; }, getTitle: function( item ) { return item.title; }, }, props: { labelText: { default: 'Search Financing Liability' }, titleFieldName: { default: 'accountTitle' }, idFieldName: { default: 'accountId' }, codeFieldName: { default: 'accountCode' } } }); /** * expense search */ Vue.component( 'expense-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { // return `/uind/rest/accounts-finance/accounts/search/expense-accounts?term=${encodeURIComponent( this.list.term )}`; return `/uind/rest/accounts-finance/accounts/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'expense-select'; }, getTitle: function( item ) { return item.title; }, }, props: { labelText: { default: 'Search Expense' }, titleFieldName: { default: 'accountTitle' }, idFieldName: { default: 'accountId' }, codeFieldName: { default: 'accountCode' } } }); /** * security deposit search */ Vue.component( 'security-deposit-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/accounts/search/security-deposit-accounts?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'security-deposit-select'; }, getTitle: function( item ) { return item.title; }, }, props: { labelText: { default: 'Search Security Deposit' }, titleFieldName: { default: 'accountTitle' }, idFieldName: { default: 'accountId' }, codeFieldName: { default: 'accountCode' } } }); /** * financing facility search */ Vue.component( 'financing-facility-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/banking/financing-facilities/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'financing-facility-select'; }, getTitle: function( item ) { return item.title; }, }, props: { labelText: { default: 'Search Financing Facility' }, titleFieldName: { default: 'financingFacilityTitle' }, idFieldName: { default: 'financingFacilityId' }, codeFieldName: { default: '' } } }); /** * account level four search */ Vue.component( 'account-level-four-search', { mixins: [searchComponentMixin], props: { oneId: { default: null }, twoId: { default: null }, threeId: { default: null }, fourId: { default: null }, companyId: { default: null }, labelText: { default: 'Search Group of Accounts' }, titleFieldName: { default: 'hierarchyString' }, oneIdFieldName: { default: 'accountLevelOneId' }, twoIdFieldName: { default: 'accountLevelTwoId' }, threeIdFieldName: { default: 'accountLevelThreeId' }, fourIdFieldName: { default: 'accountLevelFourId' } }, methods: { getSearchUrl: function() { if( this.companyId ) { return `/uind/rest/accounts-finance/accounts/level-fours/search?term=${encodeURIComponent( this.list.term )}&company=${encodeURIComponent( this.companyId )}`; } else { return `/uind/rest/accounts-finance/accounts/level-fours/search?term=${encodeURIComponent( this.list.term )}`; } }, getEmittedEventName: function() { return 'account-level-four-select'; }, getTitle: function( item ) { return item.hierarchyString; }, setEntity: function( item, event ) { event.preventDefault(); this.oneId = item.accountLevelOneId; this.twoId = item.accountLevelTwoId; this.threeId = item.accountLevelThreeId; this.fourId = item.id; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); } }, template: ` ` }); /** * invoice search */ Vue.component( 'invoice-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/invoices/search?number=${encodeURIComponent( this.list.term )}&supplierId=${encodeURIComponent( this.supplierId )}`; }, getEmittedEventName: function() { return 'invoice-select'; }, getTitle: function( item ) { return `${item.number} (SUP-${item.supplierId})`; } }, props: { labelText: { default: 'Search Invoice' }, titleFieldName: { default: 'invoiceNumber' }, idFieldName: { default: 'invoiceId' }, supplierId: { default: 0 }, codeFieldName: { default: 'invoiceCode' } } }); /** * cosmos supplier invoice search */ Vue.component( 'cosmos-supplier-invoice-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/cosmos/inventory/supplier-invoices/search-by-hbl?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'cosmos-supplier-invoice-select'; }, getTitle: function( item ) { return item.hblNumber; }, }, props: { labelText: { default: 'Search HBL#' }, titleFieldName: { default: 'houseBillOfLading' }, idFieldName: { default: '' }, codeFieldName: { default: '' } } }); /** * employee and contractor search component */ Vue.component( 'employee-worker-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/hrms/employees/search/serial-number?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'employee-select'; }, getTitle: function( item ) { if ( !! item.serialNumber ) { return `${item.fullName} - ( ${item.serialNumber} ) - ( ${item.workerType} )`; } return item.fullName; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, }, props: { labelText: { default: 'Search Employee' }, titleFieldName: { default: 'employeeTitle' }, idFieldName: { default: 'employeeId' }, codeFieldName: { default: 'employeeCode' } }, }); /** * employee search component */ Vue.component( 'worker-employee-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/hrms/employees/search/worker-employee/serial-number?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'employee-select'; }, getTitle: function( item ) { if ( !! item.serialNumber ) { return `${item.fullName} - ( ${item.serialNumber} ) - ( ${item.workerType} )`; } return item.fullName; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, }, props: { labelText: { default: 'Search Employee' }, titleFieldName: { default: 'employeeGrantPermissionTitle' }, idFieldName: { default: 'permissionGrantedBy' }, codeFieldName: { default: 'employeeCode' } }, }); /** * employee and contractor search component */ Vue.component( 'room-search', { mixins: [searchComponentMixin], props : ['floors', 'sites', 'colonies'], methods: { getSearchUrl: function() { return `/uind/rest/hrms/workers-society/room/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'room-select'; }, getTitle: function( item ) { const site = this.sites.filter((e) => e.id == item.siteId); const colony = this.colonies.filter((e) => e.id == item.colonyId); const floor = this.floors.filter((e) => e.id == item.floorId); if ( !! item.roomCode ) { return `${site[0].title} > ${colony[0].title} > ${item.roomCode} - ( ${item.roomTitle} ) `; } return item.roomTitle; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, }, props: { labelText: { default: 'Search Room' }, titleFieldName: { default: 'RoomTitle' }, idFieldName: { default: 'roomId' }, codeFieldName: { default: 'roomCode' }, sites :{ default :[] }, floors :{ default : [] }, colonies :{ default :[] } }, }); /** * city area search component */ Vue.component( 'city-area-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/admin/city-areas/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'city-area-select'; }, getTitle: function( item ) { return item.title; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, }, props: { labelText: { default: 'Search City Area' }, titleFieldName: { default: 'cityAreaTitle' }, idFieldName: { default: 'cityAreaId' }, codeFieldName: { default: 'cityAreaCode' } }, }); /** * city area search component */ Vue.component( 'item-category-hs-code-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/admin/fbr-item-category-hs-codes/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'item-category-hs-code-select'; }, getTitle: function( item ) { return `${ item.title } (${ item.hsCode })`; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, }, props: { labelText: { default: 'Search Category' }, titleFieldName: { default: 'categoryHsCodeTitle' }, idFieldName: { default: 'categoryHsCodeId' }, codeFieldName: { default: 'categoryHsCode' } }, }); /** * visitor search component (by CNIC) */ Vue.component( 'visitor-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/vms/visitors/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'visitor-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.cnic; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = item.cnic; this.closeList(); }, getTitle: function( item ) { if ( typeof item.cnic !== 'undefined' ) { return `${item.cnic}`; } return item.title; }, onKeyup: async function( $event ) { this.$emit('cnic-updated', $event.target.value); // if escape key, close the list if ( $event.keyCode === 27 ) { this.closeList(); } else { // else get and show suggestions await this.showSuggestions(); } }, }, props: { labelText: { default: 'Visitor CNIC' }, titleFieldName: { default: 'visitorCNIC' }, idFieldName: { default: 'visitorId' }, codeFieldName: { default: 'visitorCode' } } }); /** * contractor search */ Vue.component( 'contractor-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/hrms/contractors/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'contractor-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = item.fullName; this.closeList(); }, getTitle: function( item ) { return item.fullName; } }, props: { labelText: { default: 'Search Contractor' }, titleFieldName: { default: 'contractorTitle' }, idFieldName: { default: 'contractorId' }, codeFieldName: { default: 'contractorCode' } } }); /** * company hierarchy search */ Vue.component( 'department-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/hrms/departments/search?term=${encodeURIComponent( this.list.term )}&functionId=${this.functionId}`; }, getEmittedEventName: function() { return 'department-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityTwoId = item.functionId; this.entityThreeId = item.companyId; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, getTitle: function( item ) { return item.title; } }, props: { labelText: { default: 'Search Department' }, titleFieldName: { default: 'departmentTitle' }, idFieldName: { default: 'departmentId' }, entityTwoIdFieldName: { default: 'functionId' }, entityThreeIdFieldName: { default: 'companyId' }, codeFieldName: { default: 'departmentCode' }, functionId: { default: '' } } }); /** * cost center search */ Vue.component( 'cost-center-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/uic/cost-centers/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'cost-center-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.costCenterOneId; this.entityTwoId = item.costCenterTwoId; this.entityThreeId = item.costCenterThreeId; this.entityFourId = item.costCenterFourId; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, getTitle: function( item ) { return `${item.hierarchyString} - (${item.code})`; } }, props: { labelText: { default: 'Search Cost Center' }, titleFieldName: { default: 'costCenterTitle' }, idFieldName: { default: 'costCenterOneId' }, entityTwoIdFieldName: { default: 'costCenterTwoId' }, entityThreeIdFieldName: { default: 'costCenterThreeId' }, entityFourIdFieldName: { default: 'costCenterFourId' }, codeFieldName: { default: '' } } }); /** * cost center search */ Vue.component( 'cost-center-one-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/cost-centers/search/one?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'cost-center-one-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, getTitle: function( item ) { return `${item.title} ( ${item.id} )` ; } }, props: { labelText: { default: 'Search Cost Center' }, titleFieldName: { default: 'costCenterTitle' }, idFieldName: { default: 'id' }, codeFieldName: { default: '' } } }); /** * cost center search */ Vue.component( 'cost-center-four-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/cost-centers/search/four?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'cost-center-one-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, getTitle: function( item ) { return `${item.title} ( ${item.id} )` ; } }, props: { labelText: { default: 'Search Cost Center' }, titleFieldName: { default: 'costCenterTitle' }, idFieldName: { default: 'id' }, codeFieldName: { default: '' } } }); /** * cost center search */ Vue.component( 'cost-center-hierarchy-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/cost-centers/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'cost-center-hierarchy-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityFourId = item.fourId; this.entityTwoId = item.twoId; this.entityThreeId = item.threeId; this.entityId = item.oneId; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, getTitle: function( item ) { return `${item.hierarchyString} - (${item.code})`; } }, props: { labelText: { default: 'Search Cost Center' }, titleFieldName: { default: 'costCenterTitle' }, idFieldName: { default: 'oneId' }, entityTwoIdFieldName: { default: 'twoId' }, entityThreeIdFieldName: { default: 'threeId' }, entityFourIdFieldName: { default: 'fourId' }, codeFieldName: { default: '' } } }); /** * function search */ Vue.component( 'function-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/hrms/functions/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'function-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityTwoId = item.companyId; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); if ( this.clearTextOnSelect ) { this.list.term = ''; } }, getTitle: function( item ) { return item.title; } }, props: { labelText: { default: 'Search Function' }, titleFieldName: { default: 'functionTitle' }, idFieldName: { default: 'functionId' }, entityTwoIdFieldName: { default: 'companyId' }, codeFieldName: { default: 'functionCode' } } }); /** * payment request search */ Vue.component( 'payment-request-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/payment-requests/find-by-ids?ids=${encodeURIComponent( this.list.term )}&type=${encodeURIComponent( this.type )}`; }, getEmittedEventName: function() { return 'payment-request-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityTwoId = 0; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, getTitle: function( item ) { return "PAY-REQ-"+item.id; } }, props: { labelText: { default: 'Search Payment Request' }, titleFieldName: { default: 'payToTitle' }, idFieldName: { default: 'id' }, entityTwoIdFieldName: { default: '' }, codeFieldName: { default: '' }, type: { default: 'all' } } }); /** * payment search */ Vue.component( 'payment-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/payments/find-by-ids?ids=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'pay-request-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityTwoId = 0; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, getTitle: function( item ) { return item.code; } }, props: { labelText: { default: 'Search Payment' }, titleFieldName: { default: 'payToTitle' }, idFieldName: { default: 'id' }, entityTwoIdFieldName: { default: '' }, codeFieldName: { default: '' } } }); /** * online payment collection search */ Vue.component( 'payment-collection-search', { mixins: [searchComponentMixin], methods: { getSearchUrl: function() { return `/uind/rest/accounts-finance/online-payment-collections/search?term=${encodeURIComponent( this.list.term )}`; }, getEmittedEventName: function() { return 'payment-collection-select'; }, setEntity: function( item, event ) { event.preventDefault(); this.entityId = item.id; this.entityTwoId = 0; this.entityCode = ''; this.cachedEntity = item; this.list.selected = item; this.list.term = this.getTitle( item ); this.closeList(); }, getTitle: function( item ) { return `${item.code}`; } }, props: { labelText: { default: 'Search Payment Collection' }, titleFieldName: { default: 'collectionTitle' }, idFieldName: { default: 'id' }, entityTwoIdFieldName: { default: '' }, codeFieldName: { default: '' }, type: { default: '' } } }); /** * loader component */ Vue.component( 'spinner', { props: { sizeClass: { default: '' }, paddingClass: { default: 'p-4' }, colorClass: { default: 'text-secondary' } }, template: `