\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n {{ $t(\"Oops! it seems you are offline or you connection is really slow\")}}
\r\n
\r\n {{ $t('Attempting to re-connect...') }}\r\n \r\n \r\n \r\n\r\n
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=a04ad0ba&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import axios from 'axios'\r\nimport Vue from 'vue'\r\n\r\n\r\nexport default {\r\n namespaced: true,\r\n state: {\r\n //currentUser: getSavedState('auth.currentUser'),\r\n token: getSavedState('auth.token'),\r\n username: '',\r\n logoutFlag: false,\r\n employee: null\r\n },\r\n mutations:\r\n {\r\n SET_LOGOUT_FLAG(state, value) {\r\n state.logoutFlag = value;\r\n },\r\n SET_CURRENT_USER(state, newValue) {\r\n //if (newValue != null) {\r\n // state.tokens = {\r\n // token: newValue.token,\r\n // refreshToken: newValue.refreshToken\r\n // };\r\n // state.username = newValue.username;\r\n //}\r\n //state.currentUser = newValue;'\r\n if (newValue == null) {\r\n state.token = null;\r\n state.username = null;\r\n saveState('auth', null);\r\n state.employee = null;\r\n\r\n } else {\r\n state.token = newValue.token;\r\n state.username = newValue.username;\r\n saveState('auth', { token: newValue.token, user: newValue.username });\r\n console.log(newValue);\r\n state.employee = newValue.employee;\r\n //setDefaultAuthHeaders(state);\r\n }\r\n\r\n } \r\n },\r\n getters: {\r\n loggedIn(state) {\r\n //console.log(\"looooooooooooogedIn\");\r\n //let logged = !!state.token;\r\n //console.log(logged);\r\n //return logged;\r\n let isLogged = !!state.token;\r\n return isLogged;\r\n return true;\r\n }\r\n },\r\n actions: {\r\n\r\n init({ state, dispatch, getters }) {\r\n \r\n //dispatch(\"logOut\");\r\n // setDefaultAuthHeaders(state)\r\n //dispatch('validate')\r\n },\r\n setUser({ commit },data ) {\r\n commit('SET_CURRENT_USER', data);\r\n },\r\n setLogoutFlag({ commit }, data) {\r\n commint('SET_LOGOUT_FLAG', data);\r\n },\r\n // Logs in the current user.\r\n logIn({ commit, dispatch, getters }, { username, password, sessionId } = {}) {\r\n\r\n \r\n //if (getters.loggedIn) return dispatch('validate')\r\n\r\n return axios\r\n .post('/api/account/login', { Username: username, Password: password, SessionId:sessionId })\r\n .then((response) => {\r\n if (!response.data.failed) {\r\n\r\n //const data = {\r\n // username: response.data.user,\r\n // token: response.data.token,\r\n // refreshToken: response.data.refreshToken,\r\n // sessionId: response.data.sessionId\r\n //};\r\n \r\n commit('SET_CURRENT_USER', response.data.payload)\r\n //Vue.prototype.$pp.populate(response.data.permissions);\r\n //dispatch(\"users/setUserPermissions\", response.data.permissions);\r\n }\r\n return response;\r\n }).catch(err => {\r\n console.log(err);\r\n })\r\n },\r\n setPermissions({ }, permissions) {\r\n Vue.prototype.$pp.populate(permissions);\r\n },\r\n // Logs out the current user.\r\n logOut({ commit }) {\r\n commit('SET_CURRENT_USER', null);\r\n commit('SET_LOGOUT_FLAG');\r\n return axios.post('api/account/logout');\r\n },\r\n\r\n // register the user\r\n register({ commit, dispatch, getters }, { fullname, email, password } = {}) {\r\n if (getters.loggedIn) return dispatch('validate')\r\n\r\n return axios\r\n .post('/api/register', { fullname, email, password })\r\n .then((response) => {\r\n const user = response.data\r\n return user\r\n })\r\n },\r\n\r\n // register the user\r\n resetPassword({ commit, dispatch, getters }, { email } = {}) {\r\n if (getters.loggedIn) return dispatch('validate')\r\n\r\n return axios\r\n .post('/api/reset', { email })\r\n .then((response) => {\r\n const message = response.data\r\n return message\r\n })\r\n },\r\n\r\n\r\n refreshToken({ commit, state }) {\r\n\r\n let sessionData = getSavedState(\"auth.currentUser\");\r\n return axios\r\n .post('/api/account/refresh',\r\n { token: sessionData.token, refreshToken: sessionData.refreshToken })\r\n .then((response) => {\r\n if (response.data.status == 1) {\r\n const data = {\r\n username: sessionData.user,\r\n token: response.data.token,\r\n refreshToken: response.data.refreshToken,\r\n sessionId: sessionData.sessionId\r\n };\r\n commit('SET_CURRENT_USER', data)\r\n return true;\r\n\r\n } else {\r\n return false\r\n }\r\n }).catch(err => {\r\n console.log(err);\r\n return false\r\n })\r\n\r\n },\r\n isLogged({ commit, state }) {\r\n },\r\n // Validates the current user's token and refreshes it\r\n // with new data from the API.\r\n validate({ commit, state }) {\r\n //let sessionData = getSavedState(\"auth.token\");\r\n if (Vue.prototype.$pp != undefined && Vue.prototype.$pp.initiated) {\r\n return true;\r\n } else {\r\n\r\n return axios\r\n .post('/api/account/IsLogged')\r\n .then((response) => {\r\n\r\n if (response.data.status == 1) {\r\n //const user = response.data\r\n //commit('SET_CURRENT_USER', user)\r\n Vue.prototype.$pp.populate(response.data.permissions);\r\n return true;\r\n } else {\r\n commit('SET_CURRENT_USER', null)\r\n return false;\r\n }\r\n \r\n return user\r\n })\r\n .catch((error) => {\r\n if (error.response && error.response.status === 401) {\r\n commit('SET_CURRENT_USER', null)\r\n return false;\r\n }\r\n return null\r\n })\r\n }\r\n },\r\n }\r\n}\r\n// ===\r\n// Private helpers\r\n// ===\r\n\r\nfunction getSavedState(key) {\r\n return JSON.parse(window.sessionStorage.getItem(key))\r\n}\r\n\r\nfunction saveState(key, state) {\r\n window.sessionStorage.setItem(key, JSON.stringify(state))\r\n}\r\n\r\n\r\n\r\nfunction setDefaultAuthHeaders(state) {\r\n //console.log(state.currentUser);\r\n //console.log(\"SET AXIOS HEADER\");\r\n //axios.defaults.headers.common.Authorization = state.currentUser\r\n // ? \"Bearer \" + state.currentUser.token\r\n //: ''\r\n}\r\n","import Vue from 'vue'\nimport Vuex from 'vuex'\n\nVue.use(Vuex)\n\n// modules\nimport auth from './modules/auth'\n\n\nexport default new Vuex.Store({\n state: {\n },\n mutations: {\n },\n actions: {\n },\n modules: {\n auth\n }\n})\n","import Vue from 'vue'\r\nimport VueRouter from 'vue-router'\r\nimport store from '../store'\r\n\r\n\r\nVue.use(VueRouter)\r\n\r\nconst routes = [\r\n {\r\n path: '/login',\r\n name: 'login',\r\n component: () => import(/* webpackChunkName: \"login\" */ '../views/Login'),\r\n meta: {\r\n beforeResolve(routeTo, routeFrom, next) {\r\n if (store.getters['auth/loggedIn']) {\r\n next({ name: 'app' })\r\n } else {\r\n next()\r\n }\r\n },\r\n },\r\n },\r\n {\r\n path: '/',\r\n component: () => import('../views/MainLayout'),\r\n redirect: '/home',\r\n name: 'Home',\r\n meta: {\r\n authRequired: true,\r\n },\r\n children: [\r\n {\r\n path: '/home',\r\n name: 'dashboard',\r\n component: () => import(/* webpackChunkName: \"home\" */ '../views/Home.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/clients/add',\r\n name: 'AddClient',\r\n component: () => import(/* webpackChunkName: \"addClient\" */ '../views/clients/AddClient.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/clients/manage',\r\n name: 'Clients',\r\n component: () => import(/* webpackChunkName: \"clients\" */ '../views/clients/Clients.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/clients/groups',\r\n name: 'ClientsGroup',\r\n component: () => import(/* webpackChunkName: \"clientsGroup\" */ '../views/clients/ClientsGroups.vue'),\r\n meta: {\r\n authRequired: true\r\n }\r\n },\r\n {\r\n path: '/employees/manage',\r\n name: 'Employees',\r\n component: () => import(/* webpackChunkName: \"employees\" */ '../views/employees/Employees.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/taxes',\r\n name: 'Taxes',\r\n component: () => import(/* webpackChunkName: \"taxes\" */ '../views/taxes/Taxes.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/discounts',\r\n name: 'Discounts',\r\n component: () => import(/* webpackChunkName: \"taxes\" */ '../views/discounts/Discounts.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/services',\r\n name: 'Services',\r\n component: () => import(/* webpackChunkName: \"services\" */ '../views/services/Services.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/servicesGroups',\r\n name: 'ServicesGroups',\r\n component: () => import(/* webpackChunkName: \"servicesGroups\" */ '../views/services/ServicesGroups.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/readyvisits',\r\n name: 'ReadyVisits',\r\n component: () => import(/* webpackChunkName: \"readyvisits\" */ '../views/services/ReadyVisits.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/readysets',\r\n name: 'ReadySets',\r\n component: () => import(/* webpackChunkName: \"readySets\" */ '../views/services/ReadySets.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/serviceplaces',\r\n name: 'ServicePlaces',\r\n component: () => import(/* webpackChunkName: \"servicePlaces\" */ '../views/servicePlaces/ServicePlaces.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/products',\r\n name: 'Products',\r\n component: () => import(/* webpackChunkName: \"products\" */ '../views/products/Products.vue'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/expenses',\r\n name: 'Expenses',\r\n component: () => import(/* webpackChunkName: \"expenses\" */ '../views/expenses/Expenses'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/appointments/schedule',\r\n name: 'Schedule',\r\n component: () => import(/* webpackChunkName: \"schedule\" */ '../views/bookings/Schedule'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/appointments/myschedule?provider=true',\r\n name: 'MySchedule',\r\n props: true,\r\n component: () => import(/* webpackChunkName: \"schedule\" */ '../views/bookings/Schedule'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/invoices',\r\n name: 'Invoices',\r\n component: () => import(/* webpackChunkName: \"invoices\" */ '../views/invoices/Invoices'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/cashier',\r\n name: 'Cashier',\r\n component: () => import(/* webpackChunkName: \"cashier\" */ '../views/invoices/Cashier'),\r\n meta: {\r\n authRequired: true\r\n }\r\n },\r\n {\r\n path: '/creditnotes',\r\n name: 'CreditNotes',\r\n props: { type: 'ref' },\r\n component: () => import(/* webpackChunkName: \"creditNotes\" */ '../views/invoices/CreditNotes'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/adjustmentnotes',\r\n name: 'AdjustmentNotes',\r\n props: { type: 'adj' },\r\n component: () => import(/* webpackChunkName: \"creditNotes\" */ '../views/invoices/CreditNotes'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/invoices/nonbilled',\r\n name: 'NonbilledServices',\r\n component: () => import(/* webpackChunkName: \"nonbilledServices\" */ '../views/invoices/NonbilledServices'),\r\n meta: {\r\n authRequired: true\r\n }\r\n },\r\n {\r\n path: '/users',\r\n name: 'Users',\r\n component: () => import(/* webpackChunkName: \"users\" */ '../views/users/Users'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/visittypes',\r\n name: 'VisitTypes',\r\n component: () => import(/* webpackChunkName: \"visitTypes\" */ '../views/bookings/VisitTypes'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/pricelists',\r\n name: 'PricesLists',\r\n component: () => import(/* webpackChunkName: \"priceLists\" */ '../views/priceLists/PriceLists'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/pricelists/editor',\r\n props: true,\r\n name: 'PricesListEditor',\r\n component: () => import(/* webpackChunkName: \"pricesListEditor\" */ '../views/priceLists/PriceListEditor'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/reports/financialmovement',\r\n name: 'FinancialMovement',\r\n component: () => import(/* webpackChunkName: \"financialmovement\" */ '../views/reports/FinancialMovement'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/reports',\r\n name: 'Reports',\r\n component: () => import(/* webpackChunkName: \"reports\" */ '../views/reports/Reports'),\r\n meta: {\r\n authRequired: true,\r\n }\r\n },\r\n {\r\n path: '/sponsers',\r\n name: 'Sponsers',\r\n component: () => import(/* webpackChunkName: \"sponsers\" */ '../views/sponsers/Sponsers'),\r\n meta: {\r\n authRequired: true\r\n }\r\n },\r\n {\r\n path: '/insurance',\r\n name: 'Insurance',\r\n component: () => import(/* webpackChunkName: \"insurance\" */ '../views/insurance/Insurance'),\r\n meta: {\r\n authRequired: true\r\n }\r\n },\r\n {\r\n path: '/datamonitor',\r\n name: 'DataMonitor',\r\n component: () => import(/* webpackChunkName: \"datamonitor\" */ '../views/monitor/Monitor'),\r\n meta: {\r\n authRequired: true\r\n }\r\n }\r\n ]\r\n }\r\n]\r\n\r\nconst router = new VueRouter({\r\n routes\r\n})\r\n\r\n\r\n\r\nrouter.beforeEach((routeTo, routeFrom, next) => {\r\n // If this isn't an initial page load...\r\n if (routeFrom.name !== null) {\r\n // Start the route progress bar.\r\n //store.dispatch('ui/setIsBusy');\r\n }\r\n\r\n // Check if auth is required on this route\r\n // (including nested routes).\r\n const authRequired = routeTo.matched.some((route) => route.meta.authRequired)\r\n\r\n if (!authRequired) return next()\r\n\r\n if (store.getters['auth/loggedIn']) {\r\n //return next();\r\n // Validate the local user token...\r\n //return store.dispatch('auth/validate').then((validUser) => {\r\n // console.log(validUser);\r\n // Then continue if the token still represents a valid user,\r\n // otherwise redirect to login.\r\n // validUser ? next() : redirectToLogin()\r\n //})\r\n return next();\r\n } else {\r\n // If auth is required and the user is NOT currently logged in,\r\n // redirect to login.\r\n redirectToLogin()\r\n }\r\n\r\n\r\n function redirectToLogin() {\r\n // Pass the original route to the login component\r\n next({ name: 'login', query: { redirectFrom: routeTo.fullPath } })\r\n }\r\n})\r\n\r\n\r\n\r\n\r\n\r\nexport default router\r\n","import { BootstrapVue, BootstrapVueIcons } from 'bootstrap-vue'\r\nimport Vue from 'vue'\r\n\r\nVue.use(BootstrapVue, {\r\n BButton: {\r\n size: 'sm'\r\n },\r\n \"formControls\": {\r\n \"size\": \"md\"\r\n },\r\n});\r\n\r\nVue.use(BootstrapVueIcons);\r\n\r\n\r\nimport VueElementLoading from \"vue-element-loading\";\r\n\r\nVue.component(\"VueElementLoading\", VueElementLoading);","import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\n\nVue.use(VueI18n)\n\nfunction loadLocaleMessages () {\n const locales = require.context('../locales', true, /[A-Za-z0-9-_,\\s]+\\.json$/i)\n const messages = {}\n locales.keys().forEach(key => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (matched && matched.length > 1) {\n const locale = matched[1]\n messages[locale] = locales(key)\n }\n })\n return messages\n}\n\nexport default new VueI18n({\n locale: process.env.VUE_APP_I18N_LOCALE || 'ar',\n fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en',\n messages: loadLocaleMessages(),\n silentTranslationWarn: true\n})\n","import Vue from 'vue';\r\nimport Toasted from 'vue-toasted';\r\n\r\n//import 'vue-toasted/dist/vue-toasted.min.css';\r\nVue.use(Toasted, { position: 'bottom-center', duration: 4000 });\r\n\r\n\r\n\r\nVue.mixin({\r\n methods: {\r\n showConfirmation(options) {\r\n return this.$bvModal.msgBoxConfirm(options.message, {\r\n title: this.$t('Confirmation'),\r\n size: 'sm',\r\n buttonSize: 'sm',\r\n okVariant: 'info',\r\n okTitle: this.$t('Yes'),\r\n cancelTitle: this.$t('No'),\r\n footerClass: 'p-2',\r\n hideHeader: true,\r\n noFade: true,\r\n hideHeaderClose: false,\r\n centered: true\r\n }).then(result => {\r\n \r\n if (result == true && options.callback != undefined) {\r\n options.callback();\r\n }\r\n })\r\n },\r\n showConfirmationV2(options) {\r\n return this.$bvModal.msgBoxConfirm(options.message, {\r\n title: this.$t('Confirmation'),\r\n size: 'sm',\r\n buttonSize: 'sm',\r\n okVariant: 'info',\r\n okTitle: this.$t('Yes'),\r\n cancelTitle: this.$t('No'),\r\n footerClass: 'p-2',\r\n hideHeader: true,\r\n noFade: true,\r\n hideHeaderClose: false,\r\n centered: true\r\n }).then(result => {\r\n\r\n options.callback(result == null ? false : result);\r\n\r\n })\r\n },\r\n showInfoToast2(options) {\r\n this.$toasted.show(options.msg, {\r\n theme: \"toasted-primary\",\r\n position: \"bottom-left\",\r\n duration: 5000\r\n });\r\n },\r\n showInfoToast(options) {\r\n \r\n this.$toasted.info(options != undefined ? options.msg : this.$t('Saved successfully'))\r\n },\r\n showSuccessToast(options) {\r\n this.$toasted.success(options != undefined ? options.msg : this.$t('Saved successfully'))\r\n },\r\n showDeletionSuccessToast() {\r\n this.showSuccessToast({ msg: this.$t('Deleted successfully') })\r\n },\r\n showErrorToast(options) {\r\n this.$toasted.error(options != undefined ? options.msg : this.$t('Something went wrong!'));\r\n },\r\n showValidationErrorToast(options) {\r\n this.$toasted.error(options != undefined ? options.msg : this.$t('Data provided is invalid'));\r\n },\r\n showDeleteConfirmation(options,callback) {\r\n return this.$bvModal.msgBoxConfirm(this.$t('You are about to delete this item, continue?'), {\r\n title: this.$t('Confirmation'),\r\n size: 'sm',\r\n buttonSize: 'sm',\r\n okVariant: 'danger',\r\n okTitle: this.$t('Yes'),\r\n cancelTitle: this.$t('No'),\r\n footerClass: 'p-2',\r\n hideHeader: true,\r\n noFade: true,\r\n hideHeaderClose: false,\r\n centered: true\r\n }).then(result => {\r\n if (result) {\r\n callback();\r\n }\r\n })\r\n }\r\n }\r\n})\r\n","import Vue from 'vue';\r\n\r\n\r\nVue.mixin({\r\n\r\n data() {\r\n return {\r\n isBusy: false\r\n }\r\n }\r\n\r\n})\r\n","import Vue from 'vue';\r\nconst moment = require('moment')\r\n//require('moment/locale/ar-sa')\r\n\r\n\r\n//Vue.prototype.$dateFormats = {\r\n//hDDMMYYYY: 'iYYYY/iMM/iDD',\r\n//hFull: 'iYYYY/iMM/iDD hh:mm a'\r\n//}\r\n\r\nVue.use(require('vue-moment'), {\r\n moment\r\n})\r\n","import Vue from 'vue'\r\nimport DrawerLayout from 'vue-drawer-layout'\r\n\r\nVue.use(DrawerLayout)","import Vue from 'vue'\r\nimport VueEvents from 'vue-events'\r\n\r\n\r\nVue.use(VueEvents)","import Vue from 'vue';\r\nimport Axios from 'axios';\r\nimport VueAxios from 'vue-axios';\r\n\r\n\r\n\r\nVue.use(VueAxios, Axios);","import Vue from \"vue\";\r\nimport { extend, localize, ValidationProvider, ValidationObserver, setInteractionMode } from \"vee-validate\";\r\nimport { required, email, min,max, numeric, min_value, max_value, digits, double, between, confirmed } from \"vee-validate/dist/rules\";\r\nimport isAfter from 'validator/lib/isAfter';\r\nimport isBefore from 'validator/lib/isBefore';\r\nimport isDecimal from 'validator/lib/isDecimal';\r\nimport isAlpha from 'validator/lib/isAlpha';\r\n//import ar from \"vee-validate/dist/locale/ar.json\";\r\nimport en from \"vee-validate/dist/locale/en.json\";\r\n\r\nextend(\"required\", required);\r\nextend(\"email\", email);\r\nextend(\"min\", min);\r\nextend(\"max\", max);\r\nextend(\"min_value\", min_value);\r\nextend(\"max_value\", max_value);\r\nextend(\"numeric\", numeric);\r\nextend(\"digits\", digits);\r\nextend(\"double\", double);\r\nextend(\"between\", between);\r\nextend(\"confirmed\", confirmed);\r\nextend(\"double\", double);\r\n\r\nconst date_between = {\r\n validate: (value, { min, max }) => {\r\n //console.log(\"date_between\");\r\n //console.log(min);\r\n //if (isDate(max)) {\r\n // max = max.toString();\r\n // console.log(max);\r\n //}\r\n console.log(typeof min);\r\n console.log(typeof max);\r\n\r\n var result = isBefore(value + '', max + '') && isAfter(value + '', min + '');\r\n console.log(result);\r\n return result;\r\n },\r\n params: ['min', 'max']\r\n}\r\nextend(\"date_between\", date_between);\r\n\r\nconst decimal = {\r\n validate: (value, { force, digits }) => {\r\n return isDecimal(value + '', { force_decimal: force != undefined ? force : false, decimal_digits: digits != undefined ? digits : \"1,2\" })\r\n }\r\n}\r\nextend(\"decimal\", decimal);\r\n\r\nconst alpha = {\r\n validate: (value, { locale }) => {\r\n locale = locale != undefined ? locale : \"en-US\";\r\n return isAlpha(value, locale);\r\n },\r\n props: ['locale']\r\n}\r\nextend(\"alpha\", alpha);\r\n\r\nconst arrayRequired = {\r\n validate: (value) => {\r\n return value.length > 0\r\n }\r\n}\r\n\r\nextend(\"arrayRequired\", arrayRequired);\r\n\r\n\r\n\r\nconst fileExtension = {\r\n validate: (value, { extensions }) => {\r\n if (extensions.includes(value.name.split('.').pop().toLowerCase()))\r\n return true;\r\n\r\n return false;\r\n },\r\n params: ['extensions']\r\n}\r\n\r\nextend('fileExtension', fileExtension);\r\n\r\nconst uniqunessCheck = {\r\n validate: (value, { remoteId, api, property }) => {\r\n if (!value || (property && !value[property])) {\r\n return true;\r\n }\r\n let _remoteId = remoteId == 'undefined' ? 0 : remoteId;\r\n let v = property != undefined ? value[property] : value;\r\n return Vue.axios.get(api, { params: { value: v, remoteId: _remoteId } })\r\n .then(response => {\r\n if (response.data.status == 1 && response.data.valid) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n\r\n }).catch(err => {\r\n console.log(err);\r\n return false;\r\n })\r\n\r\n\r\n },\r\n params: ['remoteId', 'api', 'property']\r\n}\r\n\r\nextend('uniqueValue', uniqunessCheck);\r\n\r\n\r\n\r\nsetInteractionMode('onlyOnInput', (context) => {\r\n return {\r\n on: ['input']\r\n }\r\n});\r\n\r\nen.messages['uniqueValue'] = \"This value you entered is already registered in the database\";\r\nen.messages['decimal'] = \"This value is not valid, enter number in format x.x\";\r\n\r\nlocalize({\r\n en: {\r\n messages: en.messages,\r\n fields: {\r\n file: {\r\n fileSize: \"This file size exceeds the allowed limit\",\r\n fileExtension: \"This file extension is not allowed\",\r\n }\r\n }\r\n },\r\n ar: {\r\n messages: {\r\n \"alpha\": \"{_field_} يجب ان يحتوي على حروف فقط\",\r\n \"alpha_num\": \"{_field_} قد يحتوي فقط على حروف وارقام\",\r\n \"alpha_dash\": \"{_field_} قد يحتوي على حروف او الرموز - و _\",\r\n \"alpha_spaces\": \"{_field_} قد يحتوي فقط على حروف ومسافات\",\r\n \"between\": \"قيمة {_field_} يجب ان تكون ما بين {min} و {max}\",\r\n \"confirmed\": \"{_field_} لا يماثل التأكيد\",\r\n \"digits\": \"{_field_} يجب ان تحتوي فقط على ارقام والا يزيد عددها عن {length} رقم\",\r\n \"dimensions\": \"{_field_} يجب ان تكون بمقاس {width} بكسل في {height} بكسل\",\r\n \"email\": \"{_field_} يجب ان يكون بريدا اليكتروني صحيح\",\r\n \"excluded\": \"الحقل {_field_} غير صحيح\",\r\n \"ext\": \"نوع ملف {_field_} غير صحيح\",\r\n \"image\": \"{_field_} يجب ان تكون صورة\",\r\n \"integer\": \"الحقل {_field_} يجب ان يكون عدداً صحيحاً\",\r\n \"length\": \"حقل {_field_} يجب الا يزيد عن {length}\",\r\n \"max_value\": \"قيمة الحقل {_field_} يجب ان تكون اصغر من {min} او تساويها\",\r\n \"max\": \"الحقل {_field_} يجب ان يحتوي على {length} حروف على الأكثر\",\r\n \"mimes\": \"نوع ملف {_field_} غير صحيح\",\r\n \"min_value\": \"قيمة الحقل {_field_} يجب ان تكون اكبر من {min} او تساويها\",\r\n \"min\": \"الحقل {_field_} يجب ان يحتوي على {length} حروف على الأقل\",\r\n \"numeric\": \"{_field_} يمكن ان يحتوي فقط على ارقام\",\r\n \"oneOf\": \"الحقل {_field_} يجب ان يكون قيمة صحيحة\",\r\n \"regex\": \"الحقل {_field_} غير صحيح\",\r\n \"required\": \"هذه الخانة مطلوبة\",\r\n \"required_if\": \"حقل {_field_} مطلو]ب\",\r\n \"size\": \"{_field_} يجب ان يكون اقل من {size} كيلوبايت\",\r\n \"fileSize\": \"حجم الملف المحدد يتجاوز المسموح به\",\r\n \"fileExtension\": \"نوع هذا الملف غير مسموح به\",\r\n \"uniqueValue\": \"القيمة المدخلة مسجلة مسبقاً\"\r\n },\r\n names: {\r\n email: \"البريد الاليكتروني\",\r\n password: \"كلمة السر\"\r\n }\r\n }\r\n});\r\n\r\nlet LOCALE = \"en\";\r\n\r\nVue.component(\"ValidationProvider\", ValidationProvider);\r\nVue.component(\"ValidationObserver\", ValidationObserver);\r\nObject.defineProperty(Vue.prototype, \"locale\", {\r\n get() {\r\n return LOCALE;\r\n },\r\n set(val) {\r\n LOCALE = val;\r\n localize(val);\r\n }\r\n});\r\n","const commonListsPlugin = {\r\n\r\n install(Vue, options) {\r\n let commonListsPlugin = {\r\n lists: [],\r\n initiated: false,\r\n populate(lists) {\r\n this.lists = lists;\r\n this.initiated = true;\r\n },\r\n getList(name, loading, callback) {\r\n\r\n\r\n if (loading) loading(true);\r\n\r\n var listData = this.lists.find(i => i.name == name);\r\n\r\n if (listData != undefined) {\r\n\r\n if (listData.loaded == true) {\r\n //return listData.list;\r\n if (callback) callback(listData.list);\r\n } else {\r\n if (listData['loading'] != true) {\r\n listData['loading'] = true;\r\n Vue.axios.get(listData.api)\r\n .then(response => {\r\n if (response.data.failed == false) {\r\n listData.list = response.data.payload;\r\n listData['loaded'] = true;\r\n } else {\r\n listData.list = [];\r\n }\r\n if (callback) callback(listData.list);\r\n })\r\n .catch(err => {\r\n if (callback) callback([]);\r\n })\r\n .then(() => {\r\n if (loading) loading(false);\r\n listData.loading = false;\r\n return listData.list;\r\n });\r\n\r\n return listData.list;\r\n }\r\n }\r\n }\r\n\r\n return [];\r\n }\r\n };\r\n Vue.prototype.$commonLists = commonListsPlugin;\r\n }\r\n\r\n}\r\n\r\nexport default commonListsPlugin;","import Vue from 'vue';\r\nimport commonLists from './commonListsPlugin';\r\n\r\nVue.use(commonLists);\r\n\r\nVue.prototype.$commonLists.populate([\r\n { name: 'employees', list: [], api: 'api/employees/GetAllForList'},\r\n { name: 'serviceProviders', list: [], api: 'api/employees/GetServiceProviders' },\r\n { name: 'serviceLocations', list: [], api: 'api/ServicePlaces/GetAllForList' },\r\n { name: 'visitTypes', list: [], api: 'api/visittypes/getforlist' },\r\n { name: 'readyVisits', list: [], api: 'api/readyvisits/getforlist' },\r\n { name: 'clientsGroups', list: [], api: 'api/clients/getgroupsforlist' },\r\n { name: 'taxes', list: [], api: 'api/taxes/GetTaxes' },\r\n { name: 'sponsors', list: [], api: 'api/sponsors/getall' }\r\n])\r\n\r\n\r\n","const commonDataPlugin = {\r\n\r\n install(Vue, options) {\r\n let commonDataPlugin = {\r\n hubConnected: false,\r\n hubOnCloseSet: false,\r\n logged: false\r\n };\r\n Vue.prototype.$commonData = commonDataPlugin;\r\n }\r\n\r\n}\r\n\r\nexport default commonDataPlugin;","const permissionsPlugin = {\r\n\r\n install(Vue, options) {\r\n let permissionProvider = {\r\n initiated: false,\r\n permissions: [],\r\n populate(permissions) {\r\n this.permissions = permissions;\r\n this.initiated = true;\r\n },\r\n has(code) {\r\n if (this.permissions == undefined)\r\n return false;\r\n return this.permissions.includes(code);\r\n },\r\n can(domain, permission) {\r\n return this.permissions.find(x => x.domain.toUpperCase() == domain.toUpperCase() && x.name.toUpperCase() == permission.toUpperCase()) != undefined;\r\n },\r\n domain(domain) {\r\n return this.permissions.some(x => x.domain.toUpperCase() == domain.toUpperCase());\r\n },\r\n module(module) {\r\n return this.permissions.some(x => x.module.toUpperCase() == module.toUpperCase());\r\n }\r\n };\r\n Vue.prototype.$pp = permissionProvider;\r\n }\r\n\r\n}\r\n\r\nexport default permissionsPlugin;","import Vue from 'vue'\r\nimport App from './App.vue'\r\n//import './registerServiceWorker'\r\nimport router from './router'\r\nimport store from './store'\r\nimport './plugins/bootstrap-vue'\r\nimport i18n from './plugins/i18n'\r\nimport './plugins/toasted'\r\nimport './mixins/common'\r\nimport './plugins/moment'\r\nimport './plugins/drawerLayout'\r\nimport './plugins/vueEvents'\r\nimport './plugins/axios'\r\nimport './plugins/veevalidate'\r\nimport './plugins/commonLists'\r\n\r\n\r\nimport commonDataPlugin from './plugins/commonDataPlugin';\r\nVue.use(commonDataPlugin);\r\n\r\n// permissions plugin\r\nimport permissionsPlugin from './plugins/permissionsPlugin'\r\nVue.use(permissionsPlugin);\r\n\r\nimport { DatePickerPlugin, TimePickerPlugin, DateTimePickerPlugin } from '@syncfusion/ej2-vue-calendars';\r\nimport { ContextMenuPlugin } from '@syncfusion/ej2-vue-navigations';\r\n\r\n\r\n\r\n\r\n \r\n\r\nimport { L10n, setCulture, enableRtl, loadCldr } from '@syncfusion/ej2-base';\r\n\r\n\r\nsetCulture('ar');\r\n\r\n\r\nL10n.load({\r\n 'ar': {\r\n \"calendar\": {\r\n \"today\": \"اليوم\"\r\n },\r\n \"datepicker\": {\r\n \"today\": \"اليوم\",\r\n \"placeholder\": \"\"\r\n },\r\n \"timepicker\": {\r\n \"placeholder\": \"\"\r\n },\r\n \"datetimepicker\": {\r\n \"today\": \"اليوم\",\r\n \"placeholder\": \"\"\r\n },\r\n }\r\n});\r\n\r\n\r\n\r\n\r\n\r\n//import * as numberingSystems from 'cldr-data/supplemental/numberingSystems.json';\r\n//import * as gregorian from 'cldr-data/main/ar/ca-gregorian.json';\r\n//import * as ca_islamic from 'cldr-data/main/ar-SA/ca-islamic.json';\r\n//import * as numbers from 'cldr-data/main/ar/numbers.json';\r\n//import * as timeZoneNames from 'cldr-data/main/ar/timeZoneNames.json';\r\n//import * as weekData from \"cldr-data/supplemental/weekData.json\";\r\n\r\n//console.log(numbers);\r\n\r\n////loadCldr(numberingSystems, gregorian, numbers, timeZoneNames);\r\n//loadCldr(numberingSystems);\r\n//loadCldr(gregorian);\r\n////loadCldr(ca_islamic);\r\n//loadCldr(numbers);\r\n//loadCldr(timeZoneNames);\r\n//loadCldr(weekData);\r\n\r\nloadCldr(\r\n require('cldr-data/supplemental/numberingSystems.json'),\r\n require('cldr-data/main/ar/ca-gregorian.json'),\r\n require('cldr-data/main/ar/numbers.json'),\r\n require('cldr-data/main/ar/timeZoneNames.json'),\r\n require('cldr-data/supplemental/weekData.json') // To load the culture based first day of week\r\n);\r\n\r\n\r\nVue.use(DatePickerPlugin);\r\nVue.use(TimePickerPlugin);\r\nVue.use(DateTimePickerPlugin);\r\nVue.use(ContextMenuPlugin);\r\n\r\n\r\nimport { ChartPlugin } from '@syncfusion/ej2-vue-charts';\r\nVue.use(ChartPlugin);\r\n\r\nimport { CalendarPlugin } from \"@syncfusion/ej2-vue-calendars\";\r\nVue.use(CalendarPlugin);\r\n\r\nVue.config.productionTip = true;\r\n\r\n\r\n\r\nimport { HubConnectionBuilder, LogLevel } from '@aspnet/signalr';\r\n\r\n\r\nVue.prototype.$appsHub = new HubConnectionBuilder()\r\n .withUrl('/appshub')\r\n .configureLogging(LogLevel.Information)\r\n .build()\r\n\r\n\r\n\r\nVue.filter('abs', function (value) {\r\n if (!value) return ''\r\n return Math.abs(value);\r\n})\r\n\r\n\r\n\r\nnew Vue({\r\n router,\r\n store,\r\n i18n,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n"],"sourceRoot":""}