├── .meteor ├── .gitignore ├── release ├── platforms ├── .id ├── .finished-upgraders ├── packages └── versions ├── client ├── common │ ├── scripts │ │ ├── loading.js │ │ ├── account_deactivated.js │ │ ├── forgot_password.js │ │ ├── reset_password.js │ │ ├── enroll_account.js │ │ └── sign_in.js │ └── templates │ │ ├── loading.html │ │ ├── account_deactivated.html │ │ ├── forgot_password.html │ │ ├── sign_in.html │ │ ├── reset_password.html │ │ └── enroll_account.html ├── partials │ ├── scripts │ │ ├── footer.js │ │ ├── side_bar.js │ │ └── nav_bar.js │ └── templates │ │ ├── footer.html │ │ ├── side_bar.html │ │ └── nav_bar.html ├── layouts │ ├── scripts │ │ ├── common_layout.js │ │ └── master_layout.js │ └── templates │ │ ├── common_layout.html │ │ └── master_layout.html ├── user_pharmacist │ ├── view_reports │ │ └── partials │ │ │ ├── main.js │ │ │ ├── templates │ │ │ ├── customer_bill_record.html │ │ │ ├── stock_bill_record.html │ │ │ ├── customer_bill_item_record.html │ │ │ ├── customer_bill.html │ │ │ └── stock_bill.html │ │ │ └── scripts │ │ │ ├── customer_bill_item_record.js │ │ │ ├── customer_bill_record.js │ │ │ ├── stock_bill_record.js │ │ │ ├── customer_bill.js │ │ │ └── stock_bill.js │ ├── customer_service │ │ └── partials │ │ │ ├── templates │ │ │ ├── bill_record.html │ │ │ ├── bill_medicine.html │ │ │ └── current_bill.html │ │ │ └── scripts │ │ │ ├── bill_record.js │ │ │ ├── bill_medicine.js │ │ │ ├── current_bill.js │ │ │ └── add_bill_record.js │ ├── partials │ │ ├── templates │ │ │ └── pharmacist_side_bar_links.html │ │ └── scripts │ │ │ └── pharmacist_side_bar_links.js │ └── update_stocks │ │ ├── partials │ │ ├── templates │ │ │ └── stock_medicine.html │ │ └── scripts │ │ │ └── stock_medicine.js │ │ └── templates │ │ └── update_stocks.html ├── main.js ├── user_admin │ ├── api_management │ │ ├── scripts │ │ │ └── api_management.js │ │ ├── partials │ │ │ ├── templates │ │ │ │ ├── api_user_record.html │ │ │ │ ├── create_api_user.html │ │ │ │ └── edit_api_user.html │ │ │ └── scripts │ │ │ │ ├── api_user_record.js │ │ │ │ ├── create_api_user.js │ │ │ │ └── edit_api_user.js │ │ └── templates │ │ │ └── api_management.html │ ├── user_management │ │ ├── scripts │ │ │ └── user_management.js │ │ ├── partials │ │ │ ├── templates │ │ │ │ ├── user_record.html │ │ │ │ └── create_user.html │ │ │ └── scripts │ │ │ │ ├── user_record.js │ │ │ │ └── create_user.js │ │ └── templates │ │ │ └── user_management.html │ └── partials │ │ ├── templates │ │ └── admin_side_bar_links.html │ │ └── scripts │ │ └── admin_side_bar_links.js └── main.html ├── .gitignore ├── public ├── dist │ ├── img │ │ ├── icons.png │ │ ├── boxed-bg.jpg │ │ ├── boxed-bg.png │ │ ├── credit │ │ │ ├── visa.png │ │ │ ├── cirrus.png │ │ │ ├── mestro.png │ │ │ ├── paypal.png │ │ │ ├── paypal2.png │ │ │ ├── mastercard.png │ │ │ └── american-express.png │ │ └── default-50x50.gif │ └── css │ │ └── skins │ │ ├── skin-red.min.css │ │ ├── skin-green.min.css │ │ ├── skin-purple.min.css │ │ ├── skin-yellow.min.css │ │ ├── skin-blue.min.css │ │ ├── skin-black.min.css │ │ ├── skin-red-light.min.css │ │ ├── skin-green-light.min.css │ │ ├── skin-purple-light.min.css │ │ ├── skin-yellow-light.min.css │ │ ├── skin-blue-light.min.css │ │ ├── skin-red.css │ │ ├── skin-black-light.min.css │ │ ├── skin-green.css │ │ ├── skin-purple.css │ │ └── skin-yellow.css ├── img │ ├── credit │ │ ├── visa.png │ │ ├── cirrus.png │ │ ├── mestro.png │ │ ├── paypal.png │ │ ├── paypal2.png │ │ ├── mastercard.png │ │ └── american-express.png │ ├── admin_user_image.png │ └── auth_background.jpeg └── plugins │ ├── numpad │ └── css │ │ └── jquery.numpad.css │ └── datepicker │ └── locales │ ├── bootstrap-datepicker.kr.js │ ├── bootstrap-datepicker.gl.js │ ├── bootstrap-datepicker.ja.js │ ├── bootstrap-datepicker.hr.js │ ├── bootstrap-datepicker.zh-CN.js │ ├── bootstrap-datepicker.az.js │ ├── bootstrap-datepicker.cy.js │ ├── bootstrap-datepicker.he.js │ ├── bootstrap-datepicker.ms.js │ ├── bootstrap-datepicker.no.js │ ├── bootstrap-datepicker.rs.js │ ├── bootstrap-datepicker.bg.js │ ├── bootstrap-datepicker.ca.js │ ├── bootstrap-datepicker.el.js │ ├── bootstrap-datepicker.sl.js │ ├── bootstrap-datepicker.th.js │ ├── bootstrap-datepicker.es.js │ ├── bootstrap-datepicker.nl.js │ ├── bootstrap-datepicker.rs-latin.js │ ├── bootstrap-datepicker.sq.js │ ├── bootstrap-datepicker.id.js │ ├── bootstrap-datepicker.nb.js │ ├── bootstrap-datepicker.ua.js │ ├── bootstrap-datepicker.kk.js │ ├── bootstrap-datepicker.pt-BR.js │ ├── bootstrap-datepicker.tr.js │ ├── bootstrap-datepicker.da.js │ ├── bootstrap-datepicker.ru.js │ ├── bootstrap-datepicker.is.js │ ├── bootstrap-datepicker.cs.js │ ├── bootstrap-datepicker.sk.js │ ├── bootstrap-datepicker.sv.js │ ├── bootstrap-datepicker.fa.js │ ├── bootstrap-datepicker.hu.js │ ├── bootstrap-datepicker.ro.js │ ├── bootstrap-datepicker.zh-TW.js │ ├── bootstrap-datepicker.de.js │ ├── bootstrap-datepicker.fr.js │ ├── bootstrap-datepicker.mk.js │ ├── bootstrap-datepicker.vi.js │ ├── bootstrap-datepicker.it.js │ ├── bootstrap-datepicker.pt.js │ ├── bootstrap-datepicker.ar.js │ ├── bootstrap-datepicker.fi.js │ ├── bootstrap-datepicker.lv.js │ ├── bootstrap-datepicker.nl-BE.js │ ├── bootstrap-datepicker.lt.js │ ├── bootstrap-datepicker.pl.js │ ├── bootstrap-datepicker.sw.js │ ├── bootstrap-datepicker.ka.js │ └── bootstrap-datepicker.et.js ├── settings.json.example ├── server ├── main.js ├── connections │ └── smtp.js ├── methods │ ├── configurations.js │ ├── api_management.js │ └── user_management.js ├── routes │ └── routes_config.js └── publish.js ├── package.json ├── .travis.yml ├── collections ├── medicines.js ├── customer_bill_records.js ├── daily_reports.js ├── api_users.js ├── customer_bills.js ├── stock_medicines.js └── stock_bill_records.js ├── LICENSE ├── client_tests └── api_managemnt.test.js ├── lib └── routes │ ├── routes_admin.js │ └── routes_pharmacist.js └── README.md /.meteor/.gitignore: -------------------------------------------------------------------------------- 1 | local 2 | -------------------------------------------------------------------------------- /client/common/scripts/loading.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/partials/scripts/footer.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.meteor/release: -------------------------------------------------------------------------------- 1 | METEOR@1.4.3.2 2 | -------------------------------------------------------------------------------- /.meteor/platforms: -------------------------------------------------------------------------------- 1 | server 2 | browser 3 | -------------------------------------------------------------------------------- /client/layouts/scripts/common_layout.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | settings.json 3 | -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/main.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/dist/img/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/icons.png -------------------------------------------------------------------------------- /public/img/credit/visa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/img/credit/visa.png -------------------------------------------------------------------------------- /public/dist/img/boxed-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/boxed-bg.jpg -------------------------------------------------------------------------------- /public/dist/img/boxed-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/boxed-bg.png -------------------------------------------------------------------------------- /public/img/credit/cirrus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/img/credit/cirrus.png -------------------------------------------------------------------------------- /public/img/credit/mestro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/img/credit/mestro.png -------------------------------------------------------------------------------- /public/img/credit/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/img/credit/paypal.png -------------------------------------------------------------------------------- /public/img/credit/paypal2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/img/credit/paypal2.png -------------------------------------------------------------------------------- /public/dist/img/credit/visa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/credit/visa.png -------------------------------------------------------------------------------- /public/img/admin_user_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/img/admin_user_image.png -------------------------------------------------------------------------------- /public/img/auth_background.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/img/auth_background.jpeg -------------------------------------------------------------------------------- /public/img/credit/mastercard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/img/credit/mastercard.png -------------------------------------------------------------------------------- /public/dist/img/credit/cirrus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/credit/cirrus.png -------------------------------------------------------------------------------- /public/dist/img/credit/mestro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/credit/mestro.png -------------------------------------------------------------------------------- /public/dist/img/credit/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/credit/paypal.png -------------------------------------------------------------------------------- /public/dist/img/credit/paypal2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/credit/paypal2.png -------------------------------------------------------------------------------- /public/dist/img/default-50x50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/default-50x50.gif -------------------------------------------------------------------------------- /public/dist/img/credit/mastercard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/credit/mastercard.png -------------------------------------------------------------------------------- /public/img/credit/american-express.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/img/credit/american-express.png -------------------------------------------------------------------------------- /public/dist/img/credit/american-express.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasgun/easypharma/HEAD/public/dist/img/credit/american-express.png -------------------------------------------------------------------------------- /client/layouts/templates/common_layout.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/partials/scripts/side_bar.js: -------------------------------------------------------------------------------- 1 | Template.side_bar.helpers({ 2 | user: () => { 3 | return Meteor.user(); 4 | }, 5 | isAdmin: () => { 6 | return Roles.userIsInRole(Meteor.userId(), 'admin'); 7 | } 8 | }); -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/templates/customer_bill_record.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/common/templates/loading.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/layouts/scripts/master_layout.js: -------------------------------------------------------------------------------- 1 | is_master_loaded = false; 2 | 3 | Template.master_layout.onRendered(function () { 4 | if (!is_master_loaded) { 5 | $.getScript(Meteor.absoluteUrl("dist/js/app.min.js")); 6 | is_master_loaded = true; 7 | } 8 | }); -------------------------------------------------------------------------------- /settings.json.example: -------------------------------------------------------------------------------- 1 | { 2 | "public": { 3 | }, 4 | "private": { 5 | //given are example values 6 | 7 | "username": "server@gmail.com", 8 | "password": "3eeP1gtizk5eziohfervU", 9 | "server": "smtp.gmail.com", 10 | "port": 587 11 | } 12 | } -------------------------------------------------------------------------------- /client/main.js: -------------------------------------------------------------------------------- 1 | Meteor.startup(() => { 2 | $.getScript(Meteor.absoluteUrl("plugins/numpad/js/jquery.numpad.js")); 3 | $.getScript(Meteor.absoluteUrl("plugins/chartjs/Chart.min.js")); 4 | $.getScript(Meteor.absoluteUrl("plugins/datepicker/bootstrap-datepicker.js")); 5 | }); -------------------------------------------------------------------------------- /client/user_pharmacist/customer_service/partials/templates/bill_record.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/templates/stock_bill_record.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/templates/customer_bill_item_record.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.meteor/.id: -------------------------------------------------------------------------------- 1 | # This file contains a token that is unique to your project. 2 | # Check it into your repository along with the rest of this directory. 3 | # It can be used for purposes such as: 4 | # - ensuring you don't accidentally deploy one app on top of another 5 | # - providing package authors with aggregated statistics 6 | 7 | a2is3icte0v1q2pey 8 | -------------------------------------------------------------------------------- /client/user_admin/api_management/scripts/api_management.js: -------------------------------------------------------------------------------- 1 | Template.api_management.onCreated(function () { 2 | const self = this; 3 | self.autorun(function () { 4 | self.subscribe('api_users'); 5 | }); 6 | }); 7 | 8 | Template.api_management.helpers({ 9 | api_users: () => { 10 | return APIUsers.find({}); 11 | } 12 | }); -------------------------------------------------------------------------------- /client/user_admin/user_management/scripts/user_management.js: -------------------------------------------------------------------------------- 1 | Template.user_management.onCreated(function () { 2 | const self = this; 3 | self.autorun(function () { 4 | self.subscribe('users'); 5 | }); 6 | }); 7 | 8 | Template.user_management.helpers({ 9 | users: () => { 10 | return Roles.getUsersInRole("pharmacist"); 11 | } 12 | }); -------------------------------------------------------------------------------- /server/main.js: -------------------------------------------------------------------------------- 1 | import {Meteor} from 'meteor/meteor'; 2 | 3 | Meteor.startup(() => { 4 | Accounts.urls.resetPassword = function (token) { 5 | return Meteor.absoluteUrl('reset-password?token=' + token); 6 | }; 7 | 8 | Accounts.urls.enrollAccount = function (token) { 9 | return Meteor.absoluteUrl('enroll-account?token=' + token); 10 | }; 11 | }); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "easy_pharma", 3 | "private": true, 4 | "scripts": { 5 | "start": "meteor run" 6 | }, 7 | "dependencies": { 8 | "babel-runtime": "6.18.0", 9 | "bcrypt": "^1.0.2", 10 | "datatables": "^1.10.13", 11 | "faker": "^4.1.0", 12 | "jquery": "2.2.4", 13 | "meteor-node-stubs": "^0.2.6", 14 | "moment": "^2.17.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /public/plugins/numpad/css/jquery.numpad.css: -------------------------------------------------------------------------------- 1 | .nmpd-wrapper { 2 | display: none; 3 | } 4 | 5 | .nmpd-grid { 6 | max-width: 220px; 7 | position: absolute; 8 | left: 50px; 9 | top: 50px; 10 | z-index: 5000; 11 | border-radius: 10px; 12 | padding: 10px; 13 | } 14 | 15 | .nmpd-overlay { 16 | z-index: 4999; 17 | } 18 | 19 | input.nmpd-display { 20 | text-align: right; 21 | } -------------------------------------------------------------------------------- /client/user_pharmacist/customer_service/partials/scripts/bill_record.js: -------------------------------------------------------------------------------- 1 | Template.bill_record.helpers({ 2 | medicine: () => { 3 | return Medicines.findOne({ 4 | _id: StockMedicines.findOne({ 5 | _id: Template.instance().data.stock_medicine_id, 6 | user_id: Meteor.userId() 7 | }, {fields: {medicine_id: 1}}).medicine_id 8 | }); 9 | } 10 | }); -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/scripts/customer_bill_item_record.js: -------------------------------------------------------------------------------- 1 | Template.customer_bill_item_record.helpers({ 2 | medicine: () => { 3 | return Medicines.findOne({ 4 | _id: StockMedicines.findOne({ 5 | _id: Template.instance().data.stock_medicine_id, 6 | user_id: Meteor.userId() 7 | }, {fields: {medicine_id: 1}}).medicine_id 8 | }); 9 | } 10 | }); -------------------------------------------------------------------------------- /client/partials/templates/footer.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/layouts/templates/master_layout.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "6" 4 | before_script: 5 | # Install meteor 6 | - curl https://install.meteor.com | /bin/sh 7 | # Add meteor to path (instead of asking for sudo in the Travis container) 8 | # We can then use the faster container infrastructure - http://docs.travis-ci.com/user/workers/container-based-infrastructure/ 9 | - export PATH=$HOME/.meteor:$PATH 10 | - npm install -g spacejam 11 | cache: 12 | directories: 13 | - node_modules -------------------------------------------------------------------------------- /server/connections/smtp.js: -------------------------------------------------------------------------------- 1 | Meteor.startup(function () { 2 | smtp = { 3 | username: Meteor.settings.private.username, 4 | password: Meteor.settings.private.password, 5 | server: Meteor.settings.private.server, 6 | port: Meteor.settings.private.port 7 | }; 8 | 9 | process.env.MAIL_URL = 'smtp://' + encodeURIComponent(smtp.username) + ':' + encodeURIComponent(smtp.password) + '@' + encodeURIComponent(smtp.server) + ':' + smtp.port; 10 | }); -------------------------------------------------------------------------------- /collections/medicines.js: -------------------------------------------------------------------------------- 1 | Medicines = new Mongo.Collection('medicines'); 2 | 3 | MedicinesSchema = new SimpleSchema({ 4 | general_name: { 5 | type: String, 6 | label: "general_name", 7 | max: 12 8 | }, 9 | scientific_name: { 10 | type: String, 11 | label: "scientific_name", 12 | max: 20 13 | }, 14 | unit_name: { 15 | type: String, 16 | label: "unit_name" 17 | } 18 | }); 19 | 20 | Medicines.attachSchema(MedicinesSchema); -------------------------------------------------------------------------------- /client/user_admin/api_management/partials/templates/api_user_record.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/common/scripts/account_deactivated.js: -------------------------------------------------------------------------------- 1 | Template.account_deactivated.events({ 2 | 'click #logout': function (event) { 3 | event.preventDefault(); 4 | 5 | $('#logout').attr("disabled", true); 6 | 7 | Meteor.logout(function (error) { 8 | if (error !== undefined) { 9 | $('#helper_text').html(error.reason); 10 | $('#logout').removeAttr("disabled"); 11 | } else { 12 | return Router.go('sign-in'); 13 | } 14 | }); 15 | } 16 | }); -------------------------------------------------------------------------------- /server/methods/configurations.js: -------------------------------------------------------------------------------- 1 | Meteor.methods({ 2 | create_admin: function (admin) { 3 | if (Roles.getUsersInRole('admin').count() < 1) { 4 | const user_id = Accounts.createUser({ 5 | 'email': admin.inputEmail, 6 | 7 | 'profile': { 8 | 'user_name': admin.inputAdminName, 9 | } 10 | }); 11 | 12 | Roles.addUsersToRoles(user_id, ['admin', 'active']); 13 | Accounts.sendEnrollmentEmail(user_id); 14 | } 15 | }, 16 | }); -------------------------------------------------------------------------------- /client/user_admin/user_management/partials/templates/user_record.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_admin/partials/templates/admin_side_bar_links.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.meteor/.finished-upgraders: -------------------------------------------------------------------------------- 1 | # This file contains information which helps Meteor properly upgrade your 2 | # app when you run 'meteor update'. You should check it into version control 3 | # with your project. 4 | 5 | notices-for-0.9.0 6 | notices-for-0.9.1 7 | 0.9.4-platform-file 8 | notices-for-facebook-graph-api-2 9 | 1.2.0-standard-minifiers-package 10 | 1.2.0-meteor-platform-split 11 | 1.2.0-cordova-changes 12 | 1.2.0-breaking-changes 13 | 1.3.0-split-minifiers-package 14 | 1.4.0-remove-old-dev-bundle-link 15 | 1.4.1-add-shell-server-package 16 | 1.4.3-split-account-service-packages 17 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.kr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Korean translation for bootstrap-datepicker 3 | * Gu Youn 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['kr'] = { 7 | days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], 8 | daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], 9 | daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], 10 | months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], 11 | monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"] 12 | }; 13 | }(jQuery)); 14 | -------------------------------------------------------------------------------- /server/routes/routes_config.js: -------------------------------------------------------------------------------- 1 | const Config = new Restivus({ 2 | useDefaultAuth: true, 3 | prettyJson: true 4 | }); 5 | 6 | Config.addRoute('config/create-admin/:email/:first_name/:last_name', {authRequired: false}, { 7 | get: function () { 8 | let admin = {}; 9 | admin.inputEmail = this.urlParams.email; 10 | admin.inputAdminName = this.urlParams.first_name + " " + this.urlParams.last_name; 11 | 12 | Meteor.call('create_admin', admin); 13 | 14 | return {status: 'Request Sent', message: 'Admin may or may not be created based on system state and configurations'}; 15 | } 16 | }); -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/scripts/customer_bill_record.js: -------------------------------------------------------------------------------- 1 | Template.customer_bill_record.events({ 2 | 'click #customer_bill_record': function (event, template) { 3 | event.preventDefault(); 4 | 5 | BlazeLayout.render('master_layout', { 6 | content: 'view_reports', 7 | side_bar_links: 'pharmacist_side_bar_links', 8 | page: { 9 | link: 'view-reports' 10 | }, 11 | bill_view: 'customer_bill', 12 | bill_data: { 13 | customer_bill_id: template.data._id 14 | } 15 | }); 16 | 17 | } 18 | }); -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.gl.js: -------------------------------------------------------------------------------- 1 | ;(function($){ 2 | $.fn.datepicker.dates['gl'] = { 3 | days: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado", "Domingo"], 4 | daysShort: ["Dom", "Lun", "Mar", "Mér", "Xov", "Ven", "Sáb", "Dom"], 5 | daysMin: ["Do", "Lu", "Ma", "Me", "Xo", "Ve", "Sa", "Do"], 6 | months: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"], 7 | monthsShort: ["Xan", "Feb", "Mar", "Abr", "Mai", "Xun", "Xul", "Ago", "Sep", "Out", "Nov", "Dec"], 8 | today: "Hoxe", 9 | clear: "Limpar" 10 | }; 11 | }(jQuery)); 12 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.ja.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Japanese translation for bootstrap-datepicker 3 | * Norio Suzuki 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ja'] = { 7 | days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"], 8 | daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"], 9 | daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"], 10 | months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], 11 | monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], 12 | today: "今日", 13 | format: "yyyy/mm/dd" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /collections/customer_bill_records.js: -------------------------------------------------------------------------------- 1 | CustomerBillRecords = new Mongo.Collection("customer_bill_records"); 2 | 3 | CustomerBillRecordsSchema = new SimpleSchema({ 4 | stock_medicine_id: { 5 | type: String, 6 | label: "stock_medicine_id" 7 | }, 8 | user_id: { 9 | type: String, 10 | label: "user_id" 11 | }, 12 | quantity: { 13 | type: Number, 14 | min: 0, 15 | label: "quantity" 16 | }, 17 | amount: { 18 | type: Number, 19 | decimal: true, 20 | min: 0, 21 | label: "amount" 22 | } 23 | }); 24 | 25 | CustomerBillRecords.attachSchema(CustomerBillRecordsSchema); -------------------------------------------------------------------------------- /collections/daily_reports.js: -------------------------------------------------------------------------------- 1 | DailyReports = new Mongo.Collection('daily_reports'); 2 | 3 | DailyReportsSchema = new SimpleSchema({ 4 | date: { 5 | type: Date, 6 | label: "date" 7 | }, 8 | user_id: { 9 | type: String, 10 | label: "user_id" 11 | }, 12 | total_amount_received: { 13 | type: Number, 14 | decimal: true, 15 | min: 0, 16 | label: "total_amount_received" 17 | }, 18 | total_amount_paid: { 19 | type: Number, 20 | decimal: true, 21 | min: 0, 22 | label: "total_amount_paid" 23 | } 24 | }); 25 | 26 | DailyReports.attachSchema(DailyReportsSchema); -------------------------------------------------------------------------------- /collections/api_users.js: -------------------------------------------------------------------------------- 1 | APIUsers = new Mongo.Collection('api_users'); 2 | 3 | APIUsersSchema = new SimpleSchema({ 4 | user_name: { 5 | type: String, 6 | label: "user_name", 7 | min: 10, 8 | max: 20 9 | }, 10 | api_key: { 11 | type: String, 12 | label: "api_key", 13 | min: 10, 14 | max: 10 15 | }, 16 | subscription: { 17 | type: String, 18 | label: "subscription" 19 | }, 20 | email: { 21 | type: String, 22 | label: "email" 23 | }, 24 | active: { 25 | type: Boolean, 26 | label: "active" 27 | } 28 | }); 29 | 30 | APIUsers.attachSchema(APIUsersSchema); -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.hr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Croatian localisation 3 | */ 4 | ;(function($){ 5 | $.fn.datepicker.dates['hr'] = { 6 | days: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota", "Nedjelja"], 7 | daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub", "Ned"], 8 | daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"], 9 | months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], 10 | monthsShort: ["Sij", "Velj", "Ožu", "Tra", "Svi", "Lip", "Srp", "Kol", "Ruj", "Lis", "Stu", "Pro"], 11 | today: "Danas" 12 | }; 13 | }(jQuery)); 14 | -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/scripts/stock_bill_record.js: -------------------------------------------------------------------------------- 1 | Template.stock_bill_record.events({ 2 | 'click #stock_bill_record': function (event, template) { 3 | event.preventDefault(); 4 | 5 | BlazeLayout.render('master_layout', { 6 | content: 'view_reports', 7 | side_bar_links: 'pharmacist_side_bar_links', 8 | page: { 9 | link: 'view-reports' 10 | }, 11 | bill_view: 'stock_bill', 12 | bill_data: { 13 | stock_bill_id: template.data._id, 14 | stock_medicine_id: template.data.stock_medicine_id 15 | } 16 | }); 17 | 18 | } 19 | }); -------------------------------------------------------------------------------- /client/user_admin/partials/scripts/admin_side_bar_links.js: -------------------------------------------------------------------------------- 1 | Template.admin_side_bar_links.helpers({ 2 | isUserManagement: function () { 3 | return (Template.instance().data.link == 'user-management'); 4 | }, 5 | 6 | isAPIManagement: function () { 7 | return (Template.instance().data.link == 'api-management'); 8 | } 9 | }); 10 | 11 | Template.admin_side_bar_links.events({ 12 | 'click #user_management_link': function (event) { 13 | event.preventDefault(); 14 | Router.go('user-management'); 15 | }, 16 | 17 | 'click #api_management_link': function (event) { 18 | event.preventDefault(); 19 | Router.go('api-management'); 20 | } 21 | }); -------------------------------------------------------------------------------- /collections/customer_bills.js: -------------------------------------------------------------------------------- 1 | CustomerBills = new Mongo.Collection('customer_bills'); 2 | 3 | CustomerBillsSchema = new SimpleSchema({ 4 | user_id: { 5 | type: String, 6 | label: "user_id" 7 | }, 8 | date: { 9 | type: Date, 10 | label: "date" 11 | }, 12 | total: { 13 | type: Number, 14 | decimal: true, 15 | min: 0, 16 | label: "total" 17 | }, 18 | completed: { 19 | type: Boolean, 20 | label: "completed" 21 | }, 22 | customer_bill_record_ids: { 23 | type: [String], 24 | label: "customer_bill_record_ids" 25 | } 26 | }); 27 | 28 | CustomerBills.attachSchema(CustomerBillsSchema); -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Simplified Chinese translation for bootstrap-datepicker 3 | * Yuan Cheung 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['zh-CN'] = { 7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], 9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | today: "今日", 13 | format: "yyyy年mm月dd日", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.az.js: -------------------------------------------------------------------------------- 1 | // Azerbaijani 2 | ;(function($){ 3 | $.fn.datepicker.dates['az'] = { 4 | days: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə", "Bazar"], 5 | daysShort: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş.", "B."], 6 | daysMin: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş.", "B."], 7 | months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"], 8 | monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"], 9 | today: "Bu gün", 10 | weekStart: 1 11 | }; 12 | }(jQuery)); 13 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.cy.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Welsh translation for bootstrap-datepicker 3 | * S. Morris 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['cy'] = { 7 | days: ["Sul", "Llun", "Mawrth", "Mercher", "Iau", "Gwener", "Sadwrn", "Sul"], 8 | daysShort: ["Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad", "Sul"], 9 | daysMin: ["Su", "Ll", "Ma", "Me", "Ia", "Gwe", "Sa", "Su"], 10 | months: ["Ionawr", "Chewfror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorfennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr"], 11 | monthsShort: ["Ion", "Chw", "Maw", "Ebr", "Mai", "Meh", "Gor", "Aws", "Med", "Hyd", "Tach", "Rha"], 12 | today: "Heddiw" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.he.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Hebrew translation for bootstrap-datepicker 3 | * Sagie Maoz 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['he'] = { 7 | days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"], 8 | daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], 9 | daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], 10 | months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], 11 | monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], 12 | today: "היום", 13 | rtl: true 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.ms.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Malay translation for bootstrap-datepicker 3 | * Ateman Faiz 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ms'] = { 7 | days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"], 8 | daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"], 9 | daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"], 10 | months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"], 12 | today: "Hari Ini" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.no.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Norwegian translation for bootstrap-datepicker 3 | **/ 4 | ;(function($){ 5 | $.fn.datepicker.dates['no'] = { 6 | days: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], 7 | daysShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], 8 | daysMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], 9 | months: ['Januar','Februar','Mars','April','Mai','Juni','Juli','August','September','Oktober','November','Desember'], 10 | monthsShort: ['Jan','Feb','Mar','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Des'], 11 | today: 'I dag', 12 | clear: 'Nullstill', 13 | weekStart: 1, 14 | format: 'dd.mm.yyyy' 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /client/partials/scripts/nav_bar.js: -------------------------------------------------------------------------------- 1 | Template.nav_bar.helpers({ 2 | user: () => { 3 | return Meteor.user(); 4 | }, 5 | isAdmin: () => { 6 | return Roles.userIsInRole(Meteor.userId(), 'admin'); 7 | } 8 | }); 9 | 10 | Template.nav_bar.events({ 11 | 'click #sign_out': function (event) { 12 | event.preventDefault(); 13 | 14 | Meteor.logout(function (error) { 15 | if (error !== undefined) { 16 | console.log(error); 17 | } else { 18 | Router.go('/'); 19 | } 20 | }); 21 | }, 22 | 23 | 'click #logo_image': function (event) { 24 | event.preventDefault(); 25 | 26 | Router.go('/'); 27 | } 28 | }); -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.rs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Serbian cyrillic translation for bootstrap-datepicker 3 | * Bojan Milosavlević 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['rs'] = { 7 | days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"], 8 | daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"], 9 | daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"], 10 | months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], 11 | monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], 12 | today: "Данас" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.bg.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bulgarian translation for bootstrap-datepicker 3 | * Apostol Apostolov 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['bg'] = { 7 | days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"], 8 | daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"], 9 | daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"], 10 | months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"], 11 | monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"], 12 | today: "днес" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.ca.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Catalan translation for bootstrap-datepicker 3 | * J. Garcia 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ca'] = { 7 | days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"], 8 | daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"], 9 | daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"], 10 | months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], 11 | monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], 12 | today: "Avui" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.el.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Greek translation for bootstrap-datepicker 3 | */ 4 | ;(function($){ 5 | $.fn.datepicker.dates['el'] = { 6 | days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"], 7 | daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"], 8 | daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"], 9 | months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], 10 | monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"], 11 | today: "Σήμερα" 12 | }; 13 | }(jQuery)); 14 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.sl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Slovene translation for bootstrap-datepicker 3 | * Gregor Rudolf 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['sl'] = { 7 | days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"], 8 | daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"], 9 | daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"], 10 | months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Danes" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.th.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Thai translation for bootstrap-datepicker 3 | * Suchau Jiraprapot 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['th'] = { 7 | days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"], 8 | daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], 9 | daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], 10 | months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"], 11 | monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."], 12 | today: "วันนี้" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.es.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Spanish translation for bootstrap-datepicker 3 | * Bruno Bonamin 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['es'] = { 7 | days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"], 8 | daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"], 9 | daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"], 10 | months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], 11 | monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], 12 | today: "Hoy" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.nl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Dutch translation for bootstrap-datepicker 3 | * Reinier Goltstein 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['nl'] = { 7 | days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], 8 | daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 9 | daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 10 | months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Vandaag" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.rs-latin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Serbian latin translation for bootstrap-datepicker 3 | * Bojan Milosavlević 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['rs-latin'] = { 7 | days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"], 8 | daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"], 9 | daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"], 10 | months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Danas" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.sq.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Albanian translation for bootstrap-datepicker 3 | * Tomor Pupovci 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['sq'] = { 7 | days: ["E Diel", "E Hënë", "E martē", "E mërkurë", "E Enjte", "E Premte", "E Shtunë", "E Diel"], 8 | daysShort: ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu", "Die"], 9 | daysMin: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sht", "Di"], 10 | months: ["Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"], 11 | monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gu", "Sht", "Tet", "Nën", "Dhjet"], 12 | today: "Sot" 13 | }; 14 | }(jQuery)); 15 | 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.id.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bahasa translation for bootstrap-datepicker 3 | * Azwar Akbar 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['id'] = { 7 | days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"], 8 | daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"], 9 | daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"], 10 | months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], 12 | today: "Hari Ini", 13 | clear: "Kosongkan" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.nb.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Norwegian (bokmål) translation for bootstrap-datepicker 3 | * Fredrik Sundmyhr 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['nb'] = { 7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], 8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], 9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], 10 | months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], 12 | today: "I Dag" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.ua.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Ukrainian translation for bootstrap-datepicker 3 | * Igor Polynets 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ua'] = { 7 | days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятница", "Субота", "Неділя"], 8 | daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], 9 | daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], 10 | months: ["Cічень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], 11 | monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], 12 | today: "Сьогодні", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /client/user_pharmacist/partials/templates/pharmacist_side_bar_links.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.kk.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Kazakh translation for bootstrap-datepicker 3 | * Yerzhan Tolekov 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['kk'] = { 7 | days: ["Жексенбі", "Дүйсенбі", "Сейсенбі", "Сәрсенбі", "Бейсенбі", "Жұма", "Сенбі", "Жексенбі"], 8 | daysShort: ["Жек", "Дүй", "Сей", "Сәр", "Бей", "Жұм", "Сен", "Жек"], 9 | daysMin: ["Жк", "Дс", "Сс", "Ср", "Бс", "Жм", "Сн", "Жк"], 10 | months: ["Қаңтар", "Ақпан", "Наурыз", "Сәуір", "Мамыр", "Маусым", "Шілде", "Тамыз", "Қыркүйек", "Қазан", "Қараша", "Желтоқсан"], 11 | monthsShort: ["Қаң", "Ақп", "Нау", "Сәу", "Мамыр", "Мау", "Шлд", "Тмз", "Қыр", "Қзн", "Қар", "Жел"], 12 | today: "Бүгін", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.pt-BR.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Brazilian translation for bootstrap-datepicker 3 | * Cauan Cabral 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['pt-BR'] = { 7 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], 8 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], 9 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], 10 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], 11 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], 12 | today: "Hoje", 13 | clear: "Limpar" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.tr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Turkish translation for bootstrap-datepicker 3 | * Serkan Algur 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['tr'] = { 7 | days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"], 8 | daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"], 9 | daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"], 10 | months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], 11 | monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], 12 | today: "Bugün", 13 | format: "dd.mm.yyyy" 14 | }; 15 | }(jQuery)); 16 | 17 | -------------------------------------------------------------------------------- /client/user_admin/user_management/partials/scripts/user_record.js: -------------------------------------------------------------------------------- 1 | Template.user_record.helpers({ 2 | isActive: function () { 3 | return Roles.userIsInRole(Template.instance().data._id, 'active'); 4 | } 5 | }); 6 | 7 | Template.user_record.events({ 8 | 'click #single_user_record': function (event) { 9 | event.preventDefault(); 10 | 11 | BlazeLayout.render('master_layout', { 12 | content: 'user_management', 13 | side_bar_links: 'admin_side_bar_links', 14 | user_form: 'edit_user', 15 | page: { 16 | link: 'user-management' 17 | }, 18 | user_data: { 19 | user_id: Template.instance().data._id, 20 | } 21 | }); 22 | } 23 | }); -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.da.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Danish translation for bootstrap-datepicker 3 | * Christian Pedersen 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['da'] = { 7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], 8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], 9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], 10 | months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "I Dag", 13 | clear: "Nulstil" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.ru.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Russian translation for bootstrap-datepicker 3 | * Victor Taranenko 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ru'] = { 7 | days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"], 8 | daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"], 9 | daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], 10 | months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], 11 | monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], 12 | today: "Сегодня", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.is.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Icelandic translation for bootstrap-datepicker 3 | * Hinrik Örn Sigurðsson 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['is'] = { 7 | days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"], 8 | daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"], 9 | daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"], 10 | months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"], 12 | today: "Í Dag" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.cs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Czech translation for bootstrap-datepicker 3 | * Matěj Koubík 4 | * Fixes by Michal Remiš 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['cs'] = { 8 | days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"], 9 | daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"], 10 | daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"], 11 | months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], 12 | monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"], 13 | today: "Dnes" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.sk.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Slovak translation for bootstrap-datepicker 3 | * Marek Lichtner 4 | * Fixes by Michal Remiš 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates["sk"] = { 8 | days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"], 9 | daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"], 10 | daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"], 11 | months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], 12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], 13 | today: "Dnes" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.sv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Swedish translation for bootstrap-datepicker 3 | * Patrik Ragnarsson 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['sv'] = { 7 | days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"], 8 | daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"], 9 | daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"], 10 | months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Idag", 13 | format: "yyyy-mm-dd", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /client/user_admin/api_management/partials/scripts/api_user_record.js: -------------------------------------------------------------------------------- 1 | Template.api_user_record.helpers({ 2 | isActive: function () { 3 | return APIUsers.findOne({_id: Template.instance().data._id}).active; 4 | } 5 | }); 6 | 7 | Template.api_user_record.events({ 8 | 'click #single_api_user_record': function (event) { 9 | event.preventDefault(); 10 | 11 | BlazeLayout.render('master_layout', { 12 | content: 'api_management', 13 | side_bar_links: 'admin_side_bar_links', 14 | user_form: 'edit_api_user', 15 | page: { 16 | link: 'api-management' 17 | }, 18 | user_data: { 19 | api_user_id: Template.instance().data._id, 20 | } 21 | }); 22 | } 23 | }); -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.fa.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Persian translation for bootstrap-datepicker 3 | * Mostafa Rokooie 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['fa'] = { 7 | days: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"], 8 | daysShort: ["یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه", "یک"], 9 | daysMin: ["ی", "د", "س", "چ", "پ", "ج", "ش", "ی"], 10 | months: ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"], 11 | monthsShort: ["ژان", "فور", "مار", "آور", "مه", "ژون", "ژوی", "اوت", "سپت", "اکت", "نوا", "دسا"], 12 | today: "امروز", 13 | clear: "پاک کن", 14 | weekStart: 1, 15 | format: "yyyy/mm/dd" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.hu.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Hungarian translation for bootstrap-datepicker 3 | * Sotus László 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['hu'] = { 7 | days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"], 8 | daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"], 9 | daysMin: ["Va", "Hé", "Ke", "Sz", "Cs", "Pé", "Sz", "Va"], 10 | months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"], 12 | today: "Ma", 13 | weekStart: 1, 14 | format: "yyyy.mm.dd" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.ro.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Romanian translation for bootstrap-datepicker 3 | * Cristian Vasile 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ro'] = { 7 | days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"], 8 | daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"], 9 | daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"], 10 | months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], 11 | monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], 12 | today: "Astăzi", 13 | clear: "Șterge", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /client/common/templates/account_deactivated.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.zh-TW.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Traditional Chinese translation for bootstrap-datepicker 3 | * Rung-Sheng Jang 4 | * FrankWu Fix more appropriate use of Traditional Chinese habit 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['zh-TW'] = { 8 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 9 | daysShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六", "週日"], 10 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 11 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 13 | today: "今天", 14 | format: "yyyy年mm月dd日", 15 | weekStart: 1 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.de.js: -------------------------------------------------------------------------------- 1 | /** 2 | * German translation for bootstrap-datepicker 3 | * Sam Zurcher 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['de'] = { 7 | days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"], 8 | daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"], 9 | daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"], 10 | months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], 11 | monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], 12 | today: "Heute", 13 | clear: "Löschen", 14 | weekStart: 1, 15 | format: "dd.mm.yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.fr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * French translation for bootstrap-datepicker 3 | * Nico Mollet 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['fr'] = { 7 | days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"], 8 | daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"], 9 | daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"], 10 | months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], 11 | monthsShort: ["Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Déc"], 12 | today: "Aujourd'hui", 13 | clear: "Effacer", 14 | weekStart: 1, 15 | format: "dd/mm/yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.mk.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Macedonian translation for bootstrap-datepicker 3 | * Marko Aleksic 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['mk'] = { 7 | days: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота", "Недела"], 8 | daysShort: ["Нед", "Пон", "Вто", "Сре", "Чет", "Пет", "Саб", "Нед"], 9 | daysMin: ["Не", "По", "Вт", "Ср", "Че", "Пе", "Са", "Не"], 10 | months: ["Јануари", "Февруари", "Март", "Април", "Мај", "Јуни", "Јули", "Август", "Септември", "Октомври", "Ноември", "Декември"], 11 | monthsShort: ["Јан", "Фев", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Ное", "Дек"], 12 | today: "Денес", 13 | format: "dd.mm.yyyy" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.vi.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Vietnamese translation for bootstrap-datepicker 3 | * An Vo 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['vi'] = { 7 | days: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy", "Chủ nhật"], 8 | daysShort: ["CN", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7", "CN"], 9 | daysMin: ["CN", "T2", "T3", "T4", "T5", "T6", "T7", "CN"], 10 | months: ["Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"], 11 | monthsShort: ["Th1", "Th2", "Th3", "Th4", "Th5", "Th6", "Th7", "Th8", "Th9", "Th10", "Th11", "Th12"], 12 | today: "Hôm nay", 13 | clear: "Xóa", 14 | format: "dd/mm/yyyy" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /server/publish.js: -------------------------------------------------------------------------------- 1 | Meteor.publish('users', function () { 2 | return Meteor.users.find({}); 3 | }); 4 | 5 | Meteor.publish('medicines', function () { 6 | return Medicines.find({}); 7 | }); 8 | 9 | Meteor.publish('stock_medicines', function () { 10 | return StockMedicines.find({}); 11 | }); 12 | 13 | Meteor.publish('customer_bill_records', function () { 14 | return CustomerBillRecords.find({}); 15 | }); 16 | 17 | Meteor.publish('customer_bills', function () { 18 | return CustomerBills.find({}); 19 | }); 20 | 21 | Meteor.publish('stock_bill_records', function () { 22 | return StockBillRecords.find({}); 23 | }); 24 | 25 | Meteor.publish('daily_reports', function () { 26 | return DailyReports.find({}); 27 | }); 28 | 29 | Meteor.publish('api_users', function () { 30 | return APIUsers.find({}); 31 | }); -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.it.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Italian translation for bootstrap-datepicker 3 | * Enrico Rubboli 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['it'] = { 7 | days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"], 8 | daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], 9 | daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"], 10 | months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], 11 | monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], 12 | today: "Oggi", 13 | clear: "Cancella", 14 | weekStart: 1, 15 | format: "dd/mm/yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.pt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Portuguese translation for bootstrap-datepicker 3 | * Original code: Cauan Cabral 4 | * Tiago Melo 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['pt'] = { 8 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], 9 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], 10 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], 11 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], 12 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], 13 | today: "Hoje", 14 | clear: "Limpar" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /client/user_pharmacist/customer_service/partials/templates/bill_medicine.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.ar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Arabic translation for bootstrap-datepicker 3 | * Mohammed Alshehri 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ar'] = { 7 | days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"], 8 | daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"], 9 | daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"], 10 | months: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], 11 | monthsShort: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], 12 | today: "هذا اليوم", 13 | rtl: true 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.fi.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Finnish translation for bootstrap-datepicker 3 | * Jaakko Salonen 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['fi'] = { 7 | days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"], 8 | daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"], 9 | daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"], 10 | months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], 11 | monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"], 12 | today: "tänään", 13 | weekStart: 1, 14 | format: "d.m.yyyy" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.lv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Latvian translation for bootstrap-datepicker 3 | * Artis Avotins 4 | */ 5 | 6 | ;(function($){ 7 | $.fn.datepicker.dates['lv'] = { 8 | days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"], 9 | daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"], 10 | daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se", "Sv"], 11 | months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], 12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec"], 13 | today: "Šodien", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.nl-BE.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Belgium-Dutch translation for bootstrap-datepicker 3 | * Julien Poulin 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['nl-BE'] = { 7 | days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], 8 | daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 9 | daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 10 | months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Vandaag", 13 | clear: "Leegmaken", 14 | weekStart: 1, 15 | format: "dd/mm/yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.lt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Lithuanian translation for bootstrap-datepicker 3 | * Šarūnas Gliebus 4 | */ 5 | 6 | ;(function($){ 7 | $.fn.datepicker.dates['lt'] = { 8 | days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"], 9 | daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"], 10 | daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"], 11 | months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"], 12 | monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"], 13 | today: "Šiandien", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.pl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Polish translation for bootstrap-datepicker 3 | * Robert 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['pl'] = { 7 | days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], 8 | daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"], 9 | daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"], 10 | months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], 11 | monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"], 12 | today: "Dzisiaj", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.sw.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Swahili translation for bootstrap-datepicker 3 | * Edwin Mugendi 4 | * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['sw'] = { 8 | days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"], 9 | daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"], 10 | daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"], 11 | months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], 12 | monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], 13 | today: "Leo" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.ka.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Georgian translation for bootstrap-datepicker 3 | * Levan Melikishvili 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ka'] = { 7 | days: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი", "კვირა"], 8 | daysShort: ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ", "კვი"], 9 | daysMin: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა", "კვ"], 10 | months: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომები", "ნოემბერი", "დეკემბერი"], 11 | monthsShort: ["იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ"], 12 | today: "დღეს", 13 | clear: "გასუფთავება", 14 | weekStart: 1, 15 | format: "dd.mm.yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /collections/stock_medicines.js: -------------------------------------------------------------------------------- 1 | StockMedicines = new Mongo.Collection('stock_medicines'); 2 | 3 | StockMedicinesSchema = new SimpleSchema({ 4 | medicine_id: { 5 | type: String, 6 | label: "medicine_id" 7 | }, 8 | user_id: { 9 | type: String, 10 | label: "user_id" 11 | }, 12 | active: { 13 | type: Boolean, 14 | label: "active" 15 | }, 16 | color: { 17 | type: String, 18 | label: "color" 19 | }, 20 | selling_price: { 21 | type: Number, 22 | decimal: true, 23 | min: 0, 24 | label: "unit_price" 25 | }, 26 | alert_level: { 27 | type: Number, 28 | min: 0, 29 | label: "alert_level" 30 | }, 31 | quantity: { 32 | type: Number, 33 | min: 0, 34 | label: "quantity" 35 | } 36 | }); 37 | 38 | StockMedicines.attachSchema(StockMedicinesSchema); -------------------------------------------------------------------------------- /client/user_pharmacist/update_stocks/partials/templates/stock_medicine.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/plugins/datepicker/locales/bootstrap-datepicker.et.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Estonian translation for bootstrap-datepicker 3 | * Ando Roots 4 | * Fixes by Illimar Tambek < 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['et'] = { 8 | days: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev", "Pühapäev"], 9 | daysShort: ["Pühap", "Esmasp", "Teisip", "Kolmap", "Neljap", "Reede", "Laup", "Pühap"], 10 | daysMin: ["P", "E", "T", "K", "N", "R", "L", "P"], 11 | months: ["Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"], 12 | monthsShort: ["Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni", "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets"], 13 | today: "Täna", 14 | clear: "Tühjenda", 15 | weekStart: 1, 16 | format: "dd.mm.yyyy" 17 | }; 18 | }(jQuery)); 19 | -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/scripts/customer_bill.js: -------------------------------------------------------------------------------- 1 | Template.customer_bill.helpers({ 2 | bill: () => { 3 | return CustomerBills.findOne({_id: Template.instance().data.customer_bill_id}); 4 | }, 5 | 6 | bill_records: () => { 7 | return CustomerBillRecords.find({ 8 | _id: { 9 | $in: CustomerBills.findOne({_id: Template.instance().data.customer_bill_id}, {fields: {'customer_bill_record_ids': 1}}).customer_bill_record_ids 10 | } 11 | }) 12 | } 13 | }); 14 | 15 | Template.customer_bill.events({ 16 | 'click #close_button': function (event) { 17 | event.preventDefault(); 18 | 19 | BlazeLayout.render('master_layout', { 20 | content: 'view_reports', 21 | side_bar_links: 'pharmacist_side_bar_links', 22 | page: { 23 | link: 'view-reports' 24 | } 25 | }); 26 | } 27 | }); -------------------------------------------------------------------------------- /client/user_pharmacist/partials/scripts/pharmacist_side_bar_links.js: -------------------------------------------------------------------------------- 1 | Template.pharmacist_side_bar_links.helpers({ 2 | isCustomerService: function () { 3 | return (Template.instance().data.link == 'customer-service'); 4 | }, 5 | 6 | isViewReports: function () { 7 | return (Template.instance().data.link == 'view-reports'); 8 | }, 9 | 10 | isUpdateStocks: function () { 11 | return (Template.instance().data.link == 'update-stocks'); 12 | } 13 | }); 14 | 15 | Template.pharmacist_side_bar_links.events({ 16 | 'click #customer_service_link': function (event) { 17 | event.preventDefault(); 18 | Router.go('customer-service'); 19 | }, 20 | 21 | 'click #view_reports_link': function (event) { 22 | event.preventDefault(); 23 | Router.go('view-reports'); 24 | }, 25 | 'click #update_stocks_link': function (event) { 26 | event.preventDefault(); 27 | Router.go('update-stocks'); 28 | } 29 | }); -------------------------------------------------------------------------------- /collections/stock_bill_records.js: -------------------------------------------------------------------------------- 1 | StockBillRecords = new Mongo.Collection("stock_bill_records"); 2 | 3 | StockBillRecordsSchema = new SimpleSchema({ 4 | stock_medicine_id: { 5 | type: String, 6 | label: "stock_medicine_id" 7 | }, 8 | user_id: { 9 | type: String, 10 | label: "user_id" 11 | }, 12 | date: { 13 | type: Date, 14 | label: "date" 15 | }, 16 | quantity_in: { 17 | type: Number, 18 | min: 0, 19 | label: "quantity_in" 20 | }, 21 | quantity_out: { 22 | type: Number, 23 | min: 0, 24 | label: "quantity_out" 25 | }, 26 | amount_paid: { 27 | type: Number, 28 | decimal: true, 29 | min: 0, 30 | label: "amount_paid" 31 | }, 32 | amount_received: { 33 | type: Number, 34 | decimal: true, 35 | min: 0, 36 | label: "amount_received" 37 | } 38 | }); 39 | 40 | StockBillRecords.attachSchema(StockBillRecordsSchema); -------------------------------------------------------------------------------- /client/common/scripts/forgot_password.js: -------------------------------------------------------------------------------- 1 | Template.forgot_password.events({ 2 | 'submit form': function (event) { 3 | event.preventDefault(); 4 | 5 | $('#submit').attr("disabled", true); 6 | 7 | const emailVar = event.target.signInEmail.value; 8 | 9 | Accounts.forgotPassword({email: emailVar}, function (error) { 10 | $('#submit').attr("disabled", false); 11 | 12 | if (error !== undefined) { 13 | 14 | $('#email_div').addClass('has-error'); 15 | $('#helper_text').html(error.reason + '. Enter email again!'); 16 | 17 | event.target.signInEmail.value = ""; 18 | 19 | $('#signInEmail').focus(); 20 | 21 | } else { 22 | 23 | return Router.go('sign-in'); 24 | 25 | } 26 | 27 | }); 28 | }, 29 | 30 | 'click #back_to_sign_in': function (event) { 31 | event.preventDefault(); 32 | 33 | return Router.go('sign-in'); 34 | } 35 | }); -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 easyweb.lk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /server/methods/api_management.js: -------------------------------------------------------------------------------- 1 | Meteor.methods({ 2 | create_api_user: function (api_user) { 3 | 4 | APIUsers.insert({ 5 | 'user_name': api_user.inputAPIUserName, 6 | 'api_key': api_user.inputAPIKey, 7 | 'subscription': api_user.inputAPISubscription, 8 | 'email': api_user.inputEmail, 9 | 'active': true 10 | }); 11 | }, 12 | 13 | edit_api_user: function (api_user) { 14 | 15 | APIUsers.update({_id: api_user.inputUserId}, { 16 | $set: { 17 | 'user_name': api_user.inputAPIUserName, 18 | 'api_key': api_user.inputAPIKey, 19 | 'subscription': api_user.inputAPISubscription, 20 | 'email': api_user.inputEmail 21 | } 22 | }); 23 | }, 24 | 25 | enable_api_user: function (userId) { 26 | APIUsers.update({_id: userId}, { 27 | $set: { 28 | 'active': true 29 | } 30 | }); 31 | }, 32 | 33 | disable_api_user: function (userId) { 34 | APIUsers.update({_id: userId}, { 35 | $set: { 36 | 'active': false 37 | } 38 | }); 39 | }, 40 | }); -------------------------------------------------------------------------------- /client/user_admin/api_management/partials/scripts/create_api_user.js: -------------------------------------------------------------------------------- 1 | Template.create_api_user.events({ 2 | 'submit form': function (event) { 3 | event.preventDefault(); 4 | 5 | $('#submit').attr("disabled", true); 6 | 7 | let api_user = {}; 8 | 9 | api_user.inputAPIUserName = event.target.inputAPIUserName.value; 10 | 11 | api_user.inputAPIKey = event.target.inputAPIKey.value; 12 | api_user.inputAPISubscription = event.target.inputAPISubscription.value; 13 | api_user.inputEmail = event.target.inputEmail.value; 14 | 15 | 16 | Meteor.call('create_api_user', 17 | api_user, 18 | function (error) { 19 | $('#submit').attr("disabled", false); 20 | if (error !== undefined) { 21 | alert(error.reason); 22 | console.log("error in create api user"); 23 | console.log(error); 24 | } else { 25 | event.target.inputAPIUserName.value = ""; 26 | event.target.inputAPIKey.value = ""; 27 | event.target.inputAPISubscription.value = ""; 28 | event.target.inputEmail.value = ""; 29 | } 30 | } 31 | ); 32 | 33 | } 34 | }); -------------------------------------------------------------------------------- /client/partials/templates/side_bar.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client_tests/api_managemnt.test.js: -------------------------------------------------------------------------------- 1 | import {resetDatabase} from 'meteor/xolvio:cleaner'; 2 | 3 | if (Meteor.isClient) { 4 | let api_user_id; 5 | 6 | describe('api management', function () { 7 | it('method creates an api user', function () { 8 | beforeEach(function () { 9 | resetDatabase(); 10 | }); 11 | 12 | let api_user = {}; 13 | 14 | api_user.inputAPIUserName = "Example Name"; 15 | 16 | api_user.inputAPIKey = "1234567890"; 17 | api_user.inputAPISubscription = "free_subscription"; 18 | api_user.inputEmail = "example@example.com"; 19 | 20 | api_user_id = pharmacist_id = Meteor.call('create_api_user', api_user); 21 | 22 | }); 23 | }); 24 | 25 | describe('api management', function () { 26 | it('method edits an api user', function () { 27 | beforeEach(function () { 28 | resetDatabase(); 29 | }); 30 | 31 | let api_user = {}; 32 | 33 | api_user.inputAPIUserName = "Example Name"; 34 | 35 | api_user.inputAPIKey = "1234567890"; 36 | api_user.inputAPISubscription = "free_subscription"; 37 | api_user.inputEmail = "example@example.com"; 38 | api_user.inputUserId = api_user_id; 39 | 40 | Meteor.call('edit_api_user', api_user); 41 | 42 | }); 43 | }); 44 | } -------------------------------------------------------------------------------- /client/common/templates/forgot_password.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.meteor/packages: -------------------------------------------------------------------------------- 1 | # Meteor packages used by this project, one per line. 2 | # Check this file (and the other files in this directory) into your repository. 3 | # 4 | # 'meteor add' and 'meteor remove' will edit this file for you, 5 | # but you can also edit it by hand. 6 | 7 | meteor-base@1.0.4 # Packages every Meteor app needs to have 8 | mobile-experience@1.0.4 # Packages for a great mobile UX 9 | mongo@1.1.16 # The database Meteor supports right now 10 | blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views 11 | reactive-var@1.0.11 # Reactive variable for tracker 12 | tracker@1.1.2 # Meteor's client-side reactive programming library 13 | 14 | standard-minifier-css@1.3.4 # CSS minifier run for production mode 15 | standard-minifier-js@1.2.3 # JS minifier run for production mode 16 | es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. 17 | ecmascript@0.6.3 # Enable ECMAScript2015+ syntax in app code 18 | shell-server@0.2.3 # Server-side component of the `meteor shell` command 19 | 20 | accounts-password@1.3.4 21 | alanning:roles 22 | twbs:bootstrap 23 | 24 | kadira:blaze-layout 25 | iron:router 26 | aldeed:simple-schema 27 | aldeed:collection2 28 | ostrio:files 29 | 30 | meteortoys:allthings 31 | practicalmeteor:mocha 32 | dburles:factory 33 | xolvio:cleaner 34 | reactive-dict 35 | babrahams:transactions 36 | momentjs:moment 37 | nimble:restivus 38 | -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/scripts/stock_bill.js: -------------------------------------------------------------------------------- 1 | Template.stock_bill.helpers({ 2 | bill_record: () => { 3 | return StockBillRecords.findOne({_id: Template.instance().data.stock_bill_id}); 4 | }, 5 | 6 | medicine: () => { 7 | return Medicines.findOne({_id: StockMedicines.findOne({_id: Template.instance().data.stock_medicine_id}, {fields: {medicine_id: 1}}).medicine_id}); 8 | }, 9 | 10 | stock_medicine: () => { 11 | return StockMedicines.findOne({_id: Template.instance().data.stock_medicine_id}); 12 | }, 13 | 14 | medicine_green: () => { 15 | return StockMedicines.findOne({_id: Template.instance().data.stock_medicine_id}, {fields: {'color': 1}}).color == "green"; 16 | }, 17 | 18 | medicine_yellow: () => { 19 | return StockMedicines.findOne({_id: Template.instance().data.stock_medicine_id}, {fields: {'color': 1}}).color == "yellow"; 20 | }, 21 | 22 | medicine_blue: () => { 23 | return StockMedicines.findOne({_id: Template.instance().data.stock_medicine_id}, {fields: {'color': 1}}).color == "blue"; 24 | }, 25 | }); 26 | 27 | Template.stock_bill.events({ 28 | 'click #close_button': function (event) { 29 | event.preventDefault(); 30 | 31 | BlazeLayout.render('master_layout', { 32 | content: 'view_reports', 33 | side_bar_links: 'pharmacist_side_bar_links', 34 | page: { 35 | link: 'view-reports' 36 | } 37 | }); 38 | } 39 | }); -------------------------------------------------------------------------------- /client/user_pharmacist/customer_service/partials/scripts/bill_medicine.js: -------------------------------------------------------------------------------- 1 | Template.bill_medicine.helpers({ 2 | medicine: () => { 3 | return Medicines.findOne({_id: Template.instance().data._id}); 4 | }, 5 | 6 | stock_medicine: () => { 7 | return StockMedicines.findOne({ 8 | medicine_id: Template.instance().data._id, user_id: Meteor.userId() 9 | }); 10 | }, 11 | }); 12 | 13 | Template.bill_medicine.events({ 14 | 'click #medicine_record': function (event, template) { 15 | event.preventDefault(); 16 | 17 | let medicine_id = null; 18 | let stock_medicine_id = null; 19 | 20 | if (template.data.medicine_id) { 21 | medicine_id = template.data.medicine_id; 22 | stock_medicine_id = template.data._id; 23 | } else { 24 | medicine_id = template.data._id; 25 | const stock_medicine = StockMedicines.findOne({medicine_id: template.data._id, user_id: Meteor.userId()}); 26 | if (stock_medicine) { 27 | stock_medicine_id = stock_medicine._id; 28 | } 29 | } 30 | 31 | BlazeLayout.render('master_layout', { 32 | content: 'customer_service', 33 | side_bar_links: 'pharmacist_side_bar_links', 34 | page: { 35 | link: 'customer-service' 36 | }, 37 | bill_form: 'add_bill_record', 38 | bill_data: { 39 | medicine_id: medicine_id, 40 | stock_medicine_id: stock_medicine_id 41 | } 42 | }); 43 | } 44 | }); -------------------------------------------------------------------------------- /client/common/scripts/reset_password.js: -------------------------------------------------------------------------------- 1 | Template.reset_password.events({ 2 | 'submit form': function (event) { 3 | event.preventDefault(); 4 | 5 | $('#submit').attr("disabled", true); 6 | 7 | const passwordVar = event.target.newPassword.value; 8 | const confirmVar = event.target.confirmPassword.value; 9 | 10 | if (passwordVar === confirmVar) { 11 | Accounts.resetPassword(Router.current().params.query.token, passwordVar, function (error) { 12 | $('#submit').attr("disabled", false); 13 | if (error !== undefined) { 14 | 15 | $('#password_div1').addClass('has-error'); 16 | $('#password_div2').addClass('has-error'); 17 | $('#helper_text').html(error.reason + '. Try again!'); 18 | 19 | event.target.newPassword.value = ""; 20 | event.target.confirmPassword.value = ""; 21 | 22 | $('#newPassword').focus(); 23 | 24 | } else { 25 | 26 | return Router.go('sign-in'); 27 | 28 | } 29 | 30 | }); 31 | } else { 32 | $('#helper_text').html('Entered passwords are not matching!'); 33 | 34 | event.target.newPassword.value = ""; 35 | event.target.confirmPassword.value = ""; 36 | 37 | $('#submit').removeAttr("disabled"); 38 | } 39 | }, 40 | 41 | 'click #back_to_sign_in': function (event) { 42 | event.preventDefault(); 43 | 44 | return Router.go('sign-in'); 45 | } 46 | }); -------------------------------------------------------------------------------- /client/common/scripts/enroll_account.js: -------------------------------------------------------------------------------- 1 | Template.enroll_account.events({ 2 | 'submit form': function (event) { 3 | event.preventDefault(); 4 | 5 | $('#submit').attr("disabled", true); 6 | 7 | const passwordVar = event.target.newPassword.value; 8 | const confirmVar = event.target.confirmPassword.value; 9 | 10 | if (passwordVar === confirmVar) { 11 | Accounts.resetPassword(Router.current().params.query.token, passwordVar, function (error) { 12 | $('#submit').attr("disabled", false); 13 | 14 | if (error !== undefined) { 15 | 16 | $('#password_div1').addClass('has-error'); 17 | $('#password_div2').addClass('has-error'); 18 | $('#helper_text').html(error.reason + '. Try again!'); 19 | 20 | event.target.newPassword.value = ""; 21 | event.target.confirmPassword.value = ""; 22 | 23 | $('#newPassword').focus(); 24 | 25 | } else { 26 | 27 | return Router.go('sign-in'); 28 | 29 | } 30 | 31 | }); 32 | } else { 33 | $('#helper_text').html('Entered passwords are not matching!'); 34 | 35 | event.target.newPassword.value = ""; 36 | event.target.confirmPassword.value = ""; 37 | 38 | $('#submit').removeAttr("disabled"); 39 | } 40 | }, 41 | 42 | 'click #back_to_sign_in': function (event) { 43 | event.preventDefault(); 44 | 45 | return Router.go('sign-in'); 46 | } 47 | }); -------------------------------------------------------------------------------- /client/common/templates/sign_in.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/common/scripts/sign_in.js: -------------------------------------------------------------------------------- 1 | Template.sign_in.events({ 2 | 'submit form': function (event) { 3 | event.preventDefault(); 4 | 5 | $('#submit').attr("disabled", true); 6 | 7 | const emailVar = event.target.signInEmail.value; 8 | const passwordVar = event.target.signInPassword.value; 9 | 10 | Meteor.loginWithPassword(emailVar, passwordVar, function (err) { 11 | $('#submit').attr("disabled", false); 12 | if (err !== undefined) { 13 | 14 | $('#email_div').addClass('has-error'); 15 | $('#password_div').addClass('has-error'); 16 | $('#helper_text').html(error.reason + '. Sign in again!'); 17 | 18 | event.target.signInEmail.value = ""; 19 | event.target.signInPassword.value = ""; 20 | 21 | $('#signInEmail').focus(); 22 | 23 | } else { 24 | 25 | if (!Roles.userIsInRole(Meteor.userId(), 'active')) { 26 | return Router.go('account-deactivated'); 27 | } 28 | if (Roles.userIsInRole(Meteor.userId(), 'pharmacist')) { 29 | return Router.go('customer-service'); 30 | // window.location.href = Meteor.absoluteUrl("customer-service"); 31 | } 32 | if (Roles.userIsInRole(Meteor.userId(), 'admin')) { 33 | return Router.go('user-management'); 34 | // window.location.href = Meteor.absoluteUrl("user-management"); 35 | } 36 | 37 | } 38 | 39 | }); 40 | }, 41 | 42 | 'click #forgot_password': function (event) { 43 | event.preventDefault(); 44 | 45 | return Router.go('forgot-password'); 46 | } 47 | }); -------------------------------------------------------------------------------- /client/common/templates/reset_password.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/common/templates/enroll_account.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/templates/customer_bill.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_pharmacist/update_stocks/partials/scripts/stock_medicine.js: -------------------------------------------------------------------------------- 1 | Template.stock_medicine.helpers({ 2 | medicine: () => { 3 | return Medicines.findOne({_id: Template.instance().data._id}); 4 | }, 5 | 6 | stock_medicine: () => { 7 | return StockMedicines.findOne({ 8 | medicine_id: Template.instance().data._id, user_id: Meteor.userId() 9 | }); 10 | }, 11 | 12 | is_alerted: () => { 13 | const stock_medicine = StockMedicines.findOne({ 14 | medicine_id: Template.instance().data._id, user_id: Meteor.userId() 15 | }); 16 | return (stock_medicine.quantity <= stock_medicine.alert_level); 17 | }, 18 | }); 19 | 20 | Template.stock_medicine.events({ 21 | 'click #medicine_record': function (event, template) { 22 | event.preventDefault(); 23 | 24 | let medicine_id = null; 25 | let stock_medicine_id = null; 26 | 27 | if (template.data.medicine_id) { 28 | medicine_id = template.data.medicine_id; 29 | stock_medicine_id = template.data._id; 30 | } else { 31 | medicine_id = template.data._id; 32 | const stock_medicine = StockMedicines.findOne({medicine_id: template.data._id}); 33 | if (stock_medicine) { 34 | stock_medicine_id = stock_medicine._id; 35 | } 36 | } 37 | 38 | BlazeLayout.render('master_layout', { 39 | content: 'update_stocks', 40 | side_bar_links: 'pharmacist_side_bar_links', 41 | page: { 42 | link: 'update-stocks' 43 | }, 44 | medicine_form: 'update_medicine', 45 | medicine_data: { 46 | medicine_id: medicine_id, 47 | stock_medicine_id: stock_medicine_id, 48 | } 49 | }); 50 | } 51 | }); -------------------------------------------------------------------------------- /lib/routes/routes_admin.js: -------------------------------------------------------------------------------- 1 | Router.route('/user-management', { 2 | onBeforeAction: function () { 3 | $('body').addClass('hold-transition skin-green sidebar-mini'); 4 | this.next(); 5 | }, 6 | 7 | onStop: function () { 8 | $('body').removeClass('hold-transition skin-green sidebar-mini'); 9 | }, 10 | 11 | action: function () { 12 | if (Roles.subscription.ready()) { 13 | if (!Roles.userIsInRole(Meteor.userId(), 'active') || !Roles.userIsInRole(Meteor.userId(), 'admin')) { 14 | return Router.go('/'); 15 | } 16 | 17 | BlazeLayout.render('master_layout', { 18 | content: 'user_management', 19 | side_bar_links: 'admin_side_bar_links', 20 | user_form: 'create_user', 21 | page: { 22 | link: 'user-management' 23 | } 24 | }); 25 | } else { 26 | BlazeLayout.render('loading'); 27 | } 28 | } 29 | }); 30 | 31 | Router.route('/api-management', { 32 | onBeforeAction: function () { 33 | $('body').addClass('hold-transition skin-green sidebar-mini'); 34 | this.next(); 35 | }, 36 | 37 | onStop: function () { 38 | $('body').removeClass('hold-transition skin-green sidebar-mini'); 39 | }, 40 | 41 | action: function () { 42 | if (Roles.subscription.ready()) { 43 | if (!Roles.userIsInRole(Meteor.userId(), 'active') || !Roles.userIsInRole(Meteor.userId(), 'admin')) { 44 | return Router.go('/'); 45 | } 46 | 47 | BlazeLayout.render('master_layout', { 48 | content: 'api_management', 49 | side_bar_links: 'admin_side_bar_links', 50 | user_form: 'create_api_user', 51 | page: { 52 | link: 'api-management' 53 | } 54 | }); 55 | } else { 56 | BlazeLayout.render('loading'); 57 | } 58 | } 59 | }); -------------------------------------------------------------------------------- /server/methods/user_management.js: -------------------------------------------------------------------------------- 1 | Meteor.methods({ 2 | create_pharmacist: function (pharmacist) { 3 | const user_id = Accounts.createUser({ 4 | 'email': pharmacist.emailVar, 5 | 6 | 'profile': { 7 | 'pharmacist_name': pharmacist.inputPharmacistNameVar, 8 | 'pharmacy_name': pharmacist.inputPharmacyNameVar, 9 | 'contact_no': pharmacist.inputContactNoVar, 10 | 'image': pharmacist.inputImageVar 11 | } 12 | }); 13 | 14 | Roles.addUsersToRoles(user_id, ['pharmacist', 'active']); 15 | Accounts.sendEnrollmentEmail(user_id); 16 | }, 17 | 18 | edit_pharmacist: function (pharmacist) { 19 | if (pharmacist.inputImageVar) { 20 | Meteor.users.update(pharmacist.userId, { 21 | $set: { 22 | 'emails.0.address': pharmacist.emailVar, 23 | 'emails.0.verified': false, 24 | 'profile.pharmacist_name': pharmacist.inputPharmacistNameVar, 25 | 'profile.pharmacy_name': pharmacist.inputPharmacyNameVar, 26 | 'profile.contact_no': pharmacist.inputContactNoVar, 27 | 'profile.image': pharmacist.inputImageVar 28 | } 29 | }); 30 | } else { 31 | Meteor.users.update(pharmacist.userId, { 32 | $set: { 33 | 'emails.0.address': pharmacist.emailVar, 34 | 'emails.0.verified': false, 35 | 'profile.pharmacist_name': pharmacist.inputPharmacistNameVar, 36 | 'profile.pharmacy_name': pharmacist.inputPharmacyNameVar, 37 | 'profile.contact_no': pharmacist.inputContactNoVar 38 | } 39 | }); 40 | } 41 | 42 | Accounts.sendVerificationEmail(pharmacist.userId); 43 | }, 44 | 45 | enable_pharmacist: function (userId) { 46 | Roles.addUsersToRoles(userId, 'active'); 47 | }, 48 | 49 | disable_pharmacist: function (userId) { 50 | Roles.removeUsersFromRoles(userId, 'active'); 51 | }, 52 | }); -------------------------------------------------------------------------------- /client/user_pharmacist/customer_service/partials/scripts/current_bill.js: -------------------------------------------------------------------------------- 1 | Template.current_bill.helpers({ 2 | bill: () => { 3 | return CustomerBills.findOne({user_id: Meteor.userId(), completed: false}); 4 | }, 5 | 6 | bill_records: () => { 7 | const current_bill = CustomerBills.findOne({user_id: Meteor.userId(), completed: false}); 8 | 9 | if (current_bill) { 10 | return CustomerBillRecords.find({ 11 | _id: { 12 | $in: current_bill.customer_bill_record_ids 13 | }, user_id: Meteor.userId() 14 | }); 15 | } 16 | } 17 | }); 18 | 19 | Template.current_bill.events({ 20 | 'click #submit': function (event) { 21 | event.preventDefault(); 22 | 23 | $('#submit').attr("disabled", true); 24 | 25 | Meteor.call('checkout_bill', function (error) { 26 | $('#submit').attr("disabled", false); 27 | 28 | if (error !== undefined) { 29 | alert(error.reason); 30 | console.log("error in checkout_bill"); 31 | console.log(error); 32 | } else { 33 | BlazeLayout.render('master_layout', { 34 | content: 'customer_service', 35 | side_bar_links: 'pharmacist_side_bar_links', 36 | page: { 37 | link: 'customer-service' 38 | } 39 | }); 40 | } 41 | }); 42 | }, 43 | 44 | 'click #discard_btn': function (event) { 45 | event.preventDefault(); 46 | 47 | Meteor.call('discard_bill', function (error) { 48 | $('#submit').attr("disabled", false); 49 | 50 | if (error !== undefined) { 51 | alert(error.reason); 52 | console.log("error in discard_bill"); 53 | console.log(error); 54 | } else { 55 | BlazeLayout.render('master_layout', { 56 | content: 'customer_service', 57 | side_bar_links: 'pharmacist_side_bar_links', 58 | page: { 59 | link: 'customer-service' 60 | } 61 | }); 62 | } 63 | }); 64 | } 65 | }); -------------------------------------------------------------------------------- /client/user_admin/api_management/partials/templates/create_api_user.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_pharmacist/customer_service/partials/scripts/add_bill_record.js: -------------------------------------------------------------------------------- 1 | Template.add_bill_record.helpers({ 2 | medicine: () => { 3 | return Medicines.findOne({_id: Template.instance().data.medicine_id}); 4 | }, 5 | 6 | stock_medicine: () => { 7 | return StockMedicines.findOne({_id: Template.instance().data.stock_medicine_id, user_id: Meteor.userId()}); 8 | }, 9 | 10 | medicine_green: () => { 11 | return StockMedicines.findOne({_id: Template.instance().data.stock_medicine_id}, {fields: {'color': 1}}).color == "green"; 12 | }, 13 | 14 | medicine_yellow: () => { 15 | return StockMedicines.findOne({_id: Template.instance().data.stock_medicine_id}, {fields: {'color': 1}}).color == "yellow"; 16 | }, 17 | 18 | medicine_blue: () => { 19 | return StockMedicines.findOne({_id: Template.instance().data.stock_medicine_id}, {fields: {'color': 1}}).color == "blue"; 20 | } 21 | 22 | }); 23 | 24 | Template.add_bill_record.events({ 25 | 'submit form': function (event, template) { 26 | event.preventDefault(); 27 | 28 | $('#submit').attr("disabled", true); 29 | 30 | let bill_record = {}; 31 | 32 | bill_record.inputStockMedicineId = template.data.stock_medicine_id; 33 | bill_record.inputQuantity = event.target.inputQuantity.value; 34 | 35 | Meteor.call('add_bill_record', bill_record, function (error) { 36 | $('#submit').attr("disabled", false); 37 | 38 | if (error !== undefined) { 39 | alert(error.reason); 40 | console.log('error in add_bill_record'); 41 | console.log(error); 42 | } else { 43 | BlazeLayout.render('master_layout', { 44 | content: 'customer_service', 45 | side_bar_links: 'pharmacist_side_bar_links', 46 | page: { 47 | link: 'customer-service' 48 | } 49 | }); 50 | } 51 | }); 52 | }, 53 | 'click #cancel_btn': function (event) { 54 | event.preventDefault(); 55 | 56 | BlazeLayout.render('master_layout', { 57 | content: 'customer_service', 58 | side_bar_links: 'pharmacist_side_bar_links', 59 | page: { 60 | link: 'customer-service' 61 | } 62 | }); 63 | } 64 | }); -------------------------------------------------------------------------------- /client/user_pharmacist/customer_service/partials/templates/current_bill.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EasyPharma Pharmacy Management System 2 | [![Build Status](https://travis-ci.org/yasgun/easypharma.svg?branch=master)](https://travis-ci.org/yasgun/easypharma) 3 | 4 | EasyPharma is a web-based inventory and purchase management system focusing on giving pharmacies a free customizable point of sales system (POS). 5 | 6 | The mission of EasyPharma is to improve the quality of pharmacies by coordinating a global community that creates a robust, scalable, user-driven, open source point of sales system. 7 | 8 | #### Table of Contents 9 | 10 | 1. [Local Build](#local-build) 11 | 1. [Prerequisites](#prerequisites) 12 | 2. [Build Command](#build-command) 13 | 3. [Deploy](#deploy) 14 | 2. [Navigating the repository](#navigating-the-repository) 15 | 3. [Demo](#demo) 16 | 4. [License](#license) 17 | 18 | ## Local Build 19 | 20 | ### Prerequisites 21 | 22 | #### Meteor 23 | 24 | EasyPharma is developed on Meteor framework which is why you need to install a [Meteor](https://www.meteor.com/install). 25 | 26 | #### Git 27 | 28 | Install the version control tool [git](https://git-scm.com/). 29 | 30 | ### Build Command 31 | 32 | ```bash 33 | $ git clone https://github.com/yasgun/easypharma.git 34 | $ cd easypharma 35 | $ npm install 36 | ``` 37 | 38 | #### Settings 39 | 40 | Add a `settings.json` file to the root folder following the structure of `settings.json.example` file. 41 | 42 | ### Deploy 43 | 44 | ```bash 45 | $ meteor run --settings settings.json 46 | ``` 47 | 48 | #### Creating a System Administrator 49 | 50 | Call this route with appropriate parameters to create an admin. Remember to use a working email as it is necessary to receive the enrollment email in order to set a password and login. 51 | 52 | ```bash 53 | [ip-address]:[port]/api/config/create-admin/{email}/{first name}/{last name} 54 | ``` 55 | 56 | ## Navigating the Repository 57 | 58 | The project tree is set up as follows: 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 |
client/Source files for the web application client.
client-tests/Tests for client side.
collections/NoSQL database collections.
lib/Route definitions and other libraries.
public/Public folder for the web application.
server/Source files for the web application server.
86 | 87 | ## License 88 | 89 | Copyright © 2017 Yasas Gunarathne 90 | -------------------------------------------------------------------------------- /client/user_admin/user_management/partials/scripts/create_user.js: -------------------------------------------------------------------------------- 1 | Template.create_user.events({ 2 | 'submit form': function (event) { 3 | event.preventDefault(); 4 | 5 | $('#submit').attr("disabled", true); 6 | 7 | let pharmacist = {}; 8 | 9 | pharmacist.emailVar = event.target.inputEmail.value; 10 | 11 | pharmacist.inputPharmacistNameVar = event.target.inputPharmacistName.value; 12 | pharmacist.inputPharmacyNameVar = event.target.inputPharmacyName.value; 13 | pharmacist.inputContactNoVar = event.target.inputContactNo.value; 14 | 15 | const inputImageVar = document.getElementById('inputImage').files[0]; 16 | 17 | const reader = new FileReader(); 18 | 19 | reader.onload = function (event) { 20 | 21 | pharmacist.inputImageVar = reader.result; 22 | 23 | Meteor.call('create_pharmacist', 24 | pharmacist, 25 | function (error) { 26 | $('#submit').attr("disabled", false); 27 | 28 | if (error !== undefined) { 29 | alert(error.reason); 30 | console.log("error in create_pharmacist"); 31 | console.log(error); 32 | } else { 33 | event.target.inputEmail.value = ""; 34 | event.target.inputPharmacistName.value = ""; 35 | event.target.inputPharmacyName.value = ""; 36 | event.target.inputContactNo.value = ""; 37 | } 38 | } 39 | ); 40 | 41 | }; 42 | 43 | reader.readAsDataURL(inputImageVar); 44 | }, 45 | 46 | 'change #inputImage': function (event) { 47 | event.preventDefault(); 48 | 49 | const img = document.getElementById('img_preview'); 50 | const file_error = $('#image_helper_block'); 51 | file_error.html(""); 52 | const file = event.target.files[0]; 53 | 54 | const re = /(?:\.([^.]+))?$/; 55 | const ext = re.exec(file.name)[1]; 56 | 57 | if (ext == "jpg" || ext == "JPG") { 58 | const reader = new FileReader(); 59 | reader.readAsDataURL(file); 60 | 61 | reader.onload = function (event) { 62 | const result = reader.result; 63 | img.src = result; 64 | }; 65 | } else { 66 | img.removeAttribute("src"); 67 | file_error.html("Only .jpg or .JPG files"); 68 | $('#inputImage').val(''); 69 | img.src = "/dist/img/boxed-bg.jpg"; 70 | } 71 | }, 72 | }); -------------------------------------------------------------------------------- /public/dist/css/skins/skin-red.min.css: -------------------------------------------------------------------------------- 1 | .skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .treeview-menu>li>a{color:#8aa4af}.skin-red .treeview-menu>li.active>a,.skin-red .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /public/dist/css/skins/skin-green.min.css: -------------------------------------------------------------------------------- 1 | .skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /public/dist/css/skins/skin-purple.min.css: -------------------------------------------------------------------------------- 1 | .skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .treeview-menu>li>a{color:#8aa4af}.skin-purple .treeview-menu>li.active>a,.skin-purple .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /public/dist/css/skins/skin-yellow.min.css: -------------------------------------------------------------------------------- 1 | .skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .treeview-menu>li>a{color:#8aa4af}.skin-yellow .treeview-menu>li.active>a,.skin-yellow .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /lib/routes/routes_pharmacist.js: -------------------------------------------------------------------------------- 1 | Router.route('/customer-service', { 2 | onBeforeAction: function () { 3 | $('body').addClass('hold-transition skin-green sidebar-mini'); 4 | this.next(); 5 | }, 6 | 7 | onStop: function () { 8 | $('body').removeClass('hold-transition skin-green sidebar-mini'); 9 | }, 10 | 11 | action: function () { 12 | if (Roles.subscription.ready()) { 13 | if (!Roles.userIsInRole(Meteor.userId(), 'active') || !Roles.userIsInRole(Meteor.userId(), 'pharmacist')) { 14 | return Router.go('/'); 15 | } 16 | 17 | BlazeLayout.render('master_layout', { 18 | content: 'customer_service', 19 | side_bar_links: 'pharmacist_side_bar_links', 20 | page: { 21 | link: 'customer-service' 22 | } 23 | }); 24 | } else { 25 | BlazeLayout.render('loading'); 26 | } 27 | } 28 | }); 29 | 30 | Router.route('/view-reports', { 31 | onBeforeAction: function () { 32 | $('body').addClass('hold-transition skin-green sidebar-mini'); 33 | this.next(); 34 | }, 35 | 36 | onStop: function () { 37 | $('body').removeClass('hold-transition skin-green sidebar-mini'); 38 | }, 39 | 40 | action: function () { 41 | if (Roles.subscription.ready()) { 42 | if (!Roles.userIsInRole(Meteor.userId(), 'active') || !Roles.userIsInRole(Meteor.userId(), 'pharmacist')) { 43 | return Router.go('/'); 44 | } 45 | 46 | BlazeLayout.render('master_layout', { 47 | content: 'view_reports', 48 | side_bar_links: 'pharmacist_side_bar_links', 49 | page: { 50 | link: 'view-reports' 51 | } 52 | }); 53 | } else { 54 | BlazeLayout.render('loading'); 55 | } 56 | }, 57 | }); 58 | 59 | Router.route('/update-stocks', { 60 | onBeforeAction: function () { 61 | $('body').addClass('hold-transition skin-green sidebar-mini'); 62 | this.next(); 63 | }, 64 | 65 | onStop: function () { 66 | $('body').removeClass('hold-transition skin-green sidebar-mini'); 67 | }, 68 | 69 | action: function () { 70 | if (Roles.subscription.ready()) { 71 | if (!Roles.userIsInRole(Meteor.userId(), 'active') || !Roles.userIsInRole(Meteor.userId(), 'pharmacist')) { 72 | return Router.go('/'); 73 | } 74 | 75 | BlazeLayout.render('master_layout', { 76 | content: 'update_stocks', 77 | side_bar_links: 'pharmacist_side_bar_links', 78 | page: { 79 | link: 'update-stocks' 80 | }, 81 | medicine_form: 'add_medicine' 82 | }); 83 | } else { 84 | BlazeLayout.render('loading'); 85 | } 86 | }, 87 | }); -------------------------------------------------------------------------------- /public/dist/css/skins/skin-blue.min.css: -------------------------------------------------------------------------------- 1 | .skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8} -------------------------------------------------------------------------------- /client/user_admin/user_management/partials/templates/create_user.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_admin/api_management/templates/api_management.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_admin/user_management/templates/user_management.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_pharmacist/view_reports/partials/templates/stock_bill.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/user_admin/api_management/partials/scripts/edit_api_user.js: -------------------------------------------------------------------------------- 1 | Template.edit_api_user.helpers({ 2 | api_user: () => { 3 | return APIUsers.findOne({_id: Template.instance().data.api_user_id}); 4 | }, 5 | 6 | free_subscription: () => { 7 | return (APIUsers.findOne({_id: Template.instance().data.api_user_id}).subscription == "free_subscription"); 8 | }, 9 | 10 | paid_subscription: () => { 11 | return (APIUsers.findOne({_id: Template.instance().data.api_user_id}).subscription == "paid_subscription"); 12 | } 13 | }); 14 | 15 | Template.edit_api_user.events({ 16 | 'submit form': function (event, template) { 17 | event.preventDefault(); 18 | 19 | $('#submit').attr("disabled", true); 20 | 21 | let api_user = {}; 22 | 23 | api_user.inputUserId = template.data.api_user_id; 24 | api_user.inputEmail = event.target.inputEmail.value; 25 | 26 | api_user.inputAPIUserName = event.target.inputAPIUserName.value; 27 | api_user.inputAPIKey = event.target.inputAPIKey.value; 28 | api_user.inputAPISubscription = event.target.inputAPISubscription.value; 29 | 30 | 31 | Meteor.call('edit_api_user', 32 | api_user, 33 | function (error) { 34 | $('#submit').attr("disabled", false); 35 | 36 | if (error !== undefined) { 37 | alert(error); 38 | console.log('error in edit_api_user'); 39 | console.log(error); 40 | } else { 41 | BlazeLayout.render('master_layout', { 42 | content: 'api_management', 43 | side_bar_links: 'admin_side_bar_links', 44 | user_form: 'create_api_user', 45 | page: { 46 | link: 'api-management' 47 | } 48 | }); 49 | } 50 | } 51 | ); 52 | 53 | }, 54 | 55 | 'click #cancel_btn': function (event) { 56 | event.preventDefault(); 57 | 58 | BlazeLayout.render('master_layout', { 59 | content: 'api_management', 60 | side_bar_links: 'admin_side_bar_links', 61 | user_form: 'create_api_user', 62 | page: { 63 | link: 'api-management' 64 | } 65 | }); 66 | }, 67 | 68 | 'click #enable': function (event) { 69 | event.preventDefault(); 70 | 71 | Meteor.call('enable_api_user', Template.instance().data.api_user_id, function (error) { 72 | if (error !== undefined) { 73 | console.log("error in enable_api_user"); 74 | console.log(error); 75 | } 76 | }); 77 | }, 78 | 79 | 'click #disable': function (event) { 80 | event.preventDefault(); 81 | 82 | Meteor.call('disable_api_user', Template.instance().data.api_user_id, function (error) { 83 | if (error !== undefined) { 84 | console.log("error in disable_api_user"); 85 | console.log(error); 86 | } 87 | }); 88 | } 89 | }); -------------------------------------------------------------------------------- /client/partials/templates/nav_bar.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/dist/css/skins/skin-black.min.css: -------------------------------------------------------------------------------- 1 | .skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222} -------------------------------------------------------------------------------- /public/dist/css/skins/skin-red-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .content-wrapper,.skin-red-light .main-footer{border-left:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .treeview-menu>li>a{color:#777}.skin-red-light .treeview-menu>li.active>a,.skin-red-light .treeview-menu>li>a:hover{color:#000}.skin-red-light .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /.meteor/versions: -------------------------------------------------------------------------------- 1 | accounts-base@1.2.15 2 | accounts-password@1.3.4 3 | alanning:roles@1.2.16 4 | aldeed:collection2@2.10.0 5 | aldeed:collection2-core@1.2.0 6 | aldeed:schema-deny@1.1.0 7 | aldeed:schema-index@1.1.1 8 | aldeed:simple-schema@1.5.3 9 | allow-deny@1.0.5 10 | autoupdate@1.3.12 11 | babel-compiler@6.14.1 12 | babel-runtime@1.0.1 13 | babrahams:transactions@0.8.2 14 | base64@1.0.10 15 | binary-heap@1.0.10 16 | blaze@2.3.2 17 | blaze-html-templates@1.1.2 18 | blaze-tools@1.0.10 19 | boilerplate-generator@1.0.11 20 | caching-compiler@1.1.9 21 | caching-html-compiler@1.1.2 22 | callback-hook@1.0.10 23 | check@1.2.5 24 | coffeescript@1.12.3_1 25 | dburles:factory@1.1.0 26 | dburles:mongo-collection-instances@0.3.5 27 | ddp@1.2.5 28 | ddp-client@1.3.3 29 | ddp-common@1.2.8 30 | ddp-rate-limiter@1.0.7 31 | ddp-server@1.3.13 32 | deps@1.0.12 33 | diff-sequence@1.0.7 34 | ecmascript@0.6.3 35 | ecmascript-runtime@0.3.15 36 | ejson@1.0.13 37 | email@1.1.18 38 | es5-shim@4.6.15 39 | fastclick@1.0.13 40 | geojson-utils@1.0.10 41 | hot-code-push@1.0.4 42 | html-tools@1.0.11 43 | htmljs@1.0.11 44 | http@1.2.12 45 | id-map@1.0.9 46 | iron:controller@1.0.12 47 | iron:core@1.0.11 48 | iron:dynamic-template@1.0.12 49 | iron:layout@1.0.12 50 | iron:location@1.0.11 51 | iron:middleware-stack@1.1.0 52 | iron:router@1.1.2 53 | iron:url@1.1.0 54 | jquery@1.11.10 55 | kadira:blaze-layout@2.3.0 56 | lai:collection-extensions@0.2.1_1 57 | launch-screen@1.1.1 58 | livedata@1.0.18 59 | localstorage@1.0.12 60 | logging@1.1.17 61 | mdg:validation-error@0.5.1 62 | meteor@1.6.1 63 | meteor-base@1.0.4 64 | meteortoys:allthings@3.0.0 65 | meteortoys:authenticate@3.0.0 66 | meteortoys:autopub@3.0.0 67 | meteortoys:blueprint@3.0.0 68 | meteortoys:email@3.0.0 69 | meteortoys:hotreload@3.0.0 70 | meteortoys:listen@3.0.0 71 | meteortoys:method@3.0.4 72 | meteortoys:pub@3.0.4 73 | meteortoys:result@3.0.0 74 | meteortoys:shell@3.0.0 75 | meteortoys:status@3.0.0 76 | meteortoys:sub@3.0.0 77 | meteortoys:throttle@3.0.0 78 | meteortoys:toykit@3.0.4 79 | minifier-css@1.2.16 80 | minifier-js@1.2.18 81 | minimongo@1.0.21 82 | mobile-experience@1.0.4 83 | mobile-status-bar@1.0.14 84 | modules@0.7.9 85 | modules-runtime@0.7.9 86 | momentjs:moment@2.18.1 87 | mongo@1.1.16 88 | mongo-id@1.0.6 89 | msavin:jetsetter@2.0.0 90 | msavin:mongol@2.0.1 91 | nimble:restivus@0.8.12 92 | npm-bcrypt@0.9.2 93 | npm-mongo@2.2.24 94 | observe-sequence@1.0.16 95 | ordered-dict@1.0.9 96 | ostrio:cookies@2.2.0 97 | ostrio:files@1.7.13 98 | practicalmeteor:chai@2.1.0_1 99 | practicalmeteor:loglevel@1.2.0_2 100 | practicalmeteor:mocha@2.4.5_6 101 | practicalmeteor:mocha-core@1.0.1 102 | practicalmeteor:sinon@1.14.1_2 103 | promise@0.8.8 104 | raix:eventemitter@0.1.3 105 | random@1.0.10 106 | rate-limit@1.0.7 107 | reactive-dict@1.1.8 108 | reactive-var@1.0.11 109 | reload@1.1.11 110 | retry@1.0.9 111 | routepolicy@1.0.12 112 | service-configuration@1.0.11 113 | session@1.1.7 114 | sha@1.0.9 115 | shell-server@0.2.3 116 | simple:json-routes@2.1.0 117 | socialize:server-time@0.1.2 118 | spacebars@1.0.15 119 | spacebars-compiler@1.1.2 120 | srp@1.0.10 121 | standard-minifier-css@1.3.4 122 | standard-minifier-js@1.2.3 123 | templating@1.3.2 124 | templating-compiler@1.3.2 125 | templating-runtime@1.3.2 126 | templating-tools@1.1.2 127 | tmeasday:test-reporter-helpers@0.2.1 128 | tracker@1.1.2 129 | twbs:bootstrap@3.3.6 130 | ui@1.0.13 131 | underscore@1.0.10 132 | url@1.1.0 133 | webapp@1.3.14 134 | webapp-hashing@1.0.9 135 | xolvio:cleaner@0.3.1 136 | -------------------------------------------------------------------------------- /client/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | EasyPharma 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 50 | 51 | 88 | 89 | 90 | 91 | 92 | 96 | 97 | -------------------------------------------------------------------------------- /public/dist/css/skins/skin-green-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .content-wrapper,.skin-green-light .main-footer{border-left:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .treeview-menu>li>a{color:#777}.skin-green-light .treeview-menu>li.active>a,.skin-green-light .treeview-menu>li>a:hover{color:#000}.skin-green-light .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /public/dist/css/skins/skin-purple-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .content-wrapper,.skin-purple-light .main-footer{border-left:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .treeview-menu>li>a{color:#777}.skin-purple-light .treeview-menu>li.active>a,.skin-purple-light .treeview-menu>li>a:hover{color:#000}.skin-purple-light .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /public/dist/css/skins/skin-yellow-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .content-wrapper,.skin-yellow-light .main-footer{border-left:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .treeview-menu>li>a{color:#777}.skin-yellow-light .treeview-menu>li.active>a,.skin-yellow-light .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /public/dist/css/skins/skin-blue-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .content-wrapper,.skin-blue-light .main-footer{border-left:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .treeview-menu>li>a{color:#777}.skin-blue-light .treeview-menu>li.active>a,.skin-blue-light .treeview-menu>li>a:hover{color:#000}.skin-blue-light .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8} -------------------------------------------------------------------------------- /client/user_admin/api_management/partials/templates/edit_api_user.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/dist/css/skins/skin-red.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Red 3 | * --------- 4 | */ 5 | .skin-red .main-header .navbar { 6 | background-color: #dd4b39; 7 | } 8 | .skin-red .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-red .main-header .navbar .nav > li > a:hover, 12 | .skin-red .main-header .navbar .nav > li > a:active, 13 | .skin-red .main-header .navbar .nav > li > a:focus, 14 | .skin-red .main-header .navbar .nav .open > a, 15 | .skin-red .main-header .navbar .nav .open > a:hover, 16 | .skin-red .main-header .navbar .nav .open > a:focus, 17 | .skin-red .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-red .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-red .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-red .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-red .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #d73925; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-red .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-red .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-red .main-header .navbar .dropdown-menu li a:hover { 42 | background: #d73925; 43 | } 44 | } 45 | .skin-red .main-header .logo { 46 | background-color: #d73925; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-red .main-header .logo:hover { 51 | background-color: #d33724; 52 | } 53 | .skin-red .main-header li.user-header { 54 | background-color: #dd4b39; 55 | } 56 | .skin-red .content-header { 57 | background: transparent; 58 | } 59 | .skin-red .wrapper, 60 | .skin-red .main-sidebar, 61 | .skin-red .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-red .user-panel > .info, 65 | .skin-red .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-red .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-red .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-red .sidebar-menu > li:hover > a, 76 | .skin-red .sidebar-menu > li.active > a { 77 | color: #ffffff; 78 | background: #1e282c; 79 | border-left-color: #dd4b39; 80 | } 81 | .skin-red .sidebar-menu > li > .treeview-menu { 82 | margin: 0 1px; 83 | background: #2c3b41; 84 | } 85 | .skin-red .sidebar a { 86 | color: #b8c7ce; 87 | } 88 | .skin-red .sidebar a:hover { 89 | text-decoration: none; 90 | } 91 | .skin-red .treeview-menu > li > a { 92 | color: #8aa4af; 93 | } 94 | .skin-red .treeview-menu > li.active > a, 95 | .skin-red .treeview-menu > li > a:hover { 96 | color: #ffffff; 97 | } 98 | .skin-red .sidebar-form { 99 | border-radius: 3px; 100 | border: 1px solid #374850; 101 | margin: 10px 10px; 102 | } 103 | .skin-red .sidebar-form input[type="text"], 104 | .skin-red .sidebar-form .btn { 105 | box-shadow: none; 106 | background-color: #374850; 107 | border: 1px solid transparent; 108 | height: 35px; 109 | } 110 | .skin-red .sidebar-form input[type="text"] { 111 | color: #666; 112 | border-top-left-radius: 2px; 113 | border-top-right-radius: 0; 114 | border-bottom-right-radius: 0; 115 | border-bottom-left-radius: 2px; 116 | } 117 | .skin-red .sidebar-form input[type="text"]:focus, 118 | .skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 119 | background-color: #fff; 120 | color: #666; 121 | } 122 | .skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 123 | border-left-color: #fff; 124 | } 125 | .skin-red .sidebar-form .btn { 126 | color: #999; 127 | border-top-left-radius: 0; 128 | border-top-right-radius: 2px; 129 | border-bottom-right-radius: 2px; 130 | border-bottom-left-radius: 0; 131 | } 132 | -------------------------------------------------------------------------------- /public/dist/css/skins/skin-black-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-black-light .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .content-wrapper,.skin-black-light .main-footer{border-left:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .treeview-menu>li>a{color:#777}.skin-black-light .treeview-menu>li.active>a,.skin-black-light .treeview-menu>li>a:hover{color:#000}.skin-black-light .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /public/dist/css/skins/skin-green.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Green 3 | * ----------- 4 | */ 5 | .skin-green .main-header .navbar { 6 | background-color: #00a65a; 7 | } 8 | .skin-green .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-green .main-header .navbar .nav > li > a:hover, 12 | .skin-green .main-header .navbar .nav > li > a:active, 13 | .skin-green .main-header .navbar .nav > li > a:focus, 14 | .skin-green .main-header .navbar .nav .open > a, 15 | .skin-green .main-header .navbar .nav .open > a:hover, 16 | .skin-green .main-header .navbar .nav .open > a:focus, 17 | .skin-green .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-green .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-green .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-green .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-green .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #008d4c; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-green .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-green .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-green .main-header .navbar .dropdown-menu li a:hover { 42 | background: #008d4c; 43 | } 44 | } 45 | .skin-green .main-header .logo { 46 | background-color: #008d4c; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-green .main-header .logo:hover { 51 | background-color: #008749; 52 | } 53 | .skin-green .main-header li.user-header { 54 | background-color: #00a65a; 55 | } 56 | .skin-green .content-header { 57 | background: transparent; 58 | } 59 | .skin-green .wrapper, 60 | .skin-green .main-sidebar, 61 | .skin-green .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-green .user-panel > .info, 65 | .skin-green .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-green .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-green .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-green .sidebar-menu > li:hover > a, 76 | .skin-green .sidebar-menu > li.active > a { 77 | color: #ffffff; 78 | background: #1e282c; 79 | border-left-color: #00a65a; 80 | } 81 | .skin-green .sidebar-menu > li > .treeview-menu { 82 | margin: 0 1px; 83 | background: #2c3b41; 84 | } 85 | .skin-green .sidebar a { 86 | color: #b8c7ce; 87 | } 88 | .skin-green .sidebar a:hover { 89 | text-decoration: none; 90 | } 91 | .skin-green .treeview-menu > li > a { 92 | color: #8aa4af; 93 | } 94 | .skin-green .treeview-menu > li.active > a, 95 | .skin-green .treeview-menu > li > a:hover { 96 | color: #ffffff; 97 | } 98 | .skin-green .sidebar-form { 99 | border-radius: 3px; 100 | border: 1px solid #374850; 101 | margin: 10px 10px; 102 | } 103 | .skin-green .sidebar-form input[type="text"], 104 | .skin-green .sidebar-form .btn { 105 | box-shadow: none; 106 | background-color: #374850; 107 | border: 1px solid transparent; 108 | height: 35px; 109 | } 110 | .skin-green .sidebar-form input[type="text"] { 111 | color: #666; 112 | border-top-left-radius: 2px; 113 | border-top-right-radius: 0; 114 | border-bottom-right-radius: 0; 115 | border-bottom-left-radius: 2px; 116 | } 117 | .skin-green .sidebar-form input[type="text"]:focus, 118 | .skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 119 | background-color: #fff; 120 | color: #666; 121 | } 122 | .skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 123 | border-left-color: #fff; 124 | } 125 | .skin-green .sidebar-form .btn { 126 | color: #999; 127 | border-top-left-radius: 0; 128 | border-top-right-radius: 2px; 129 | border-bottom-right-radius: 2px; 130 | border-bottom-left-radius: 0; 131 | } 132 | -------------------------------------------------------------------------------- /public/dist/css/skins/skin-purple.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Purple 3 | * ------------ 4 | */ 5 | .skin-purple .main-header .navbar { 6 | background-color: #605ca8; 7 | } 8 | .skin-purple .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-purple .main-header .navbar .nav > li > a:hover, 12 | .skin-purple .main-header .navbar .nav > li > a:active, 13 | .skin-purple .main-header .navbar .nav > li > a:focus, 14 | .skin-purple .main-header .navbar .nav .open > a, 15 | .skin-purple .main-header .navbar .nav .open > a:hover, 16 | .skin-purple .main-header .navbar .nav .open > a:focus, 17 | .skin-purple .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-purple .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-purple .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-purple .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-purple .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #555299; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-purple .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-purple .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-purple .main-header .navbar .dropdown-menu li a:hover { 42 | background: #555299; 43 | } 44 | } 45 | .skin-purple .main-header .logo { 46 | background-color: #555299; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-purple .main-header .logo:hover { 51 | background-color: #545096; 52 | } 53 | .skin-purple .main-header li.user-header { 54 | background-color: #605ca8; 55 | } 56 | .skin-purple .content-header { 57 | background: transparent; 58 | } 59 | .skin-purple .wrapper, 60 | .skin-purple .main-sidebar, 61 | .skin-purple .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-purple .user-panel > .info, 65 | .skin-purple .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-purple .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-purple .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-purple .sidebar-menu > li:hover > a, 76 | .skin-purple .sidebar-menu > li.active > a { 77 | color: #ffffff; 78 | background: #1e282c; 79 | border-left-color: #605ca8; 80 | } 81 | .skin-purple .sidebar-menu > li > .treeview-menu { 82 | margin: 0 1px; 83 | background: #2c3b41; 84 | } 85 | .skin-purple .sidebar a { 86 | color: #b8c7ce; 87 | } 88 | .skin-purple .sidebar a:hover { 89 | text-decoration: none; 90 | } 91 | .skin-purple .treeview-menu > li > a { 92 | color: #8aa4af; 93 | } 94 | .skin-purple .treeview-menu > li.active > a, 95 | .skin-purple .treeview-menu > li > a:hover { 96 | color: #ffffff; 97 | } 98 | .skin-purple .sidebar-form { 99 | border-radius: 3px; 100 | border: 1px solid #374850; 101 | margin: 10px 10px; 102 | } 103 | .skin-purple .sidebar-form input[type="text"], 104 | .skin-purple .sidebar-form .btn { 105 | box-shadow: none; 106 | background-color: #374850; 107 | border: 1px solid transparent; 108 | height: 35px; 109 | } 110 | .skin-purple .sidebar-form input[type="text"] { 111 | color: #666; 112 | border-top-left-radius: 2px; 113 | border-top-right-radius: 0; 114 | border-bottom-right-radius: 0; 115 | border-bottom-left-radius: 2px; 116 | } 117 | .skin-purple .sidebar-form input[type="text"]:focus, 118 | .skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 119 | background-color: #fff; 120 | color: #666; 121 | } 122 | .skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 123 | border-left-color: #fff; 124 | } 125 | .skin-purple .sidebar-form .btn { 126 | color: #999; 127 | border-top-left-radius: 0; 128 | border-top-right-radius: 2px; 129 | border-bottom-right-radius: 2px; 130 | border-bottom-left-radius: 0; 131 | } 132 | -------------------------------------------------------------------------------- /public/dist/css/skins/skin-yellow.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Yellow 3 | * ------------ 4 | */ 5 | .skin-yellow .main-header .navbar { 6 | background-color: #f39c12; 7 | } 8 | .skin-yellow .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-yellow .main-header .navbar .nav > li > a:hover, 12 | .skin-yellow .main-header .navbar .nav > li > a:active, 13 | .skin-yellow .main-header .navbar .nav > li > a:focus, 14 | .skin-yellow .main-header .navbar .nav .open > a, 15 | .skin-yellow .main-header .navbar .nav .open > a:hover, 16 | .skin-yellow .main-header .navbar .nav .open > a:focus, 17 | .skin-yellow .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-yellow .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-yellow .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-yellow .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-yellow .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #e08e0b; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-yellow .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-yellow .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-yellow .main-header .navbar .dropdown-menu li a:hover { 42 | background: #e08e0b; 43 | } 44 | } 45 | .skin-yellow .main-header .logo { 46 | background-color: #e08e0b; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-yellow .main-header .logo:hover { 51 | background-color: #db8b0b; 52 | } 53 | .skin-yellow .main-header li.user-header { 54 | background-color: #f39c12; 55 | } 56 | .skin-yellow .content-header { 57 | background: transparent; 58 | } 59 | .skin-yellow .wrapper, 60 | .skin-yellow .main-sidebar, 61 | .skin-yellow .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-yellow .user-panel > .info, 65 | .skin-yellow .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-yellow .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-yellow .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-yellow .sidebar-menu > li:hover > a, 76 | .skin-yellow .sidebar-menu > li.active > a { 77 | color: #ffffff; 78 | background: #1e282c; 79 | border-left-color: #f39c12; 80 | } 81 | .skin-yellow .sidebar-menu > li > .treeview-menu { 82 | margin: 0 1px; 83 | background: #2c3b41; 84 | } 85 | .skin-yellow .sidebar a { 86 | color: #b8c7ce; 87 | } 88 | .skin-yellow .sidebar a:hover { 89 | text-decoration: none; 90 | } 91 | .skin-yellow .treeview-menu > li > a { 92 | color: #8aa4af; 93 | } 94 | .skin-yellow .treeview-menu > li.active > a, 95 | .skin-yellow .treeview-menu > li > a:hover { 96 | color: #ffffff; 97 | } 98 | .skin-yellow .sidebar-form { 99 | border-radius: 3px; 100 | border: 1px solid #374850; 101 | margin: 10px 10px; 102 | } 103 | .skin-yellow .sidebar-form input[type="text"], 104 | .skin-yellow .sidebar-form .btn { 105 | box-shadow: none; 106 | background-color: #374850; 107 | border: 1px solid transparent; 108 | height: 35px; 109 | } 110 | .skin-yellow .sidebar-form input[type="text"] { 111 | color: #666; 112 | border-top-left-radius: 2px; 113 | border-top-right-radius: 0; 114 | border-bottom-right-radius: 0; 115 | border-bottom-left-radius: 2px; 116 | } 117 | .skin-yellow .sidebar-form input[type="text"]:focus, 118 | .skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 119 | background-color: #fff; 120 | color: #666; 121 | } 122 | .skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 123 | border-left-color: #fff; 124 | } 125 | .skin-yellow .sidebar-form .btn { 126 | color: #999; 127 | border-top-left-radius: 0; 128 | border-top-right-radius: 2px; 129 | border-bottom-right-radius: 2px; 130 | border-bottom-left-radius: 0; 131 | } 132 | -------------------------------------------------------------------------------- /client/user_pharmacist/update_stocks/templates/update_stocks.html: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------------------------------