From 6d0b1d859720ac280803ceda3f3d59a692ba5e3a Mon Sep 17 00:00:00 2001 From: Bao Chau Date: Wed, 12 Apr 2017 05:51:53 -0700 Subject: [PATCH] add cashier role in roles (#1027) * add cashier role in roles * change capabilities in navigation bar * add unit test for cashier role and finalize the role --- app/admin/roles/controller.js | 4 +++- app/invoices/edit/template.hbs | 2 +- app/invoices/route.js | 12 +++++++----- app/locales/en/translations.js | 4 ++++ app/mixins/navigation.js | 8 +++++++- app/mixins/user-roles.js | 3 ++- app/mixins/user-session.js | 29 +++++++++++++++++++++++------ app/router.js | 1 + tests/acceptance/invoices-test.js | 26 ++++++++++++++++++++++++++ 9 files changed, 74 insertions(+), 15 deletions(-) diff --git a/app/admin/roles/controller.js b/app/admin/roles/controller.js index 8c8f633b5d..b520df4e83 100644 --- a/app/admin/roles/controller.js +++ b/app/admin/roles/controller.js @@ -42,7 +42,9 @@ export default AbstractEditController.extend(UserRoles, UserSession, { 'editInvoice', 'invoices', 'overrideInvoice', - 'pricing' + 'pricing', + 'cashier', + 'listPaidInvoices' ] }, { name: 'patients', diff --git a/app/invoices/edit/template.hbs b/app/invoices/edit/template.hbs index eff1d8a5c6..f714194749 100644 --- a/app/invoices/edit/template.hbs +++ b/app/invoices/edit/template.hbs @@ -109,7 +109,7 @@ {{t 'labels.name'}} {{t 'labels.quantity'}} {{t 'labels.price'}} - {{t 'labels.expense_to'}} + {{t 'labels.expenseTo'}} {{t 'labels.total'}} {{#if canAddCharge}} diff --git a/app/invoices/route.js b/app/invoices/route.js index ca834524b5..dcbcdd023d 100644 --- a/app/invoices/route.js +++ b/app/invoices/route.js @@ -75,11 +75,13 @@ export default AbstractModuleRoute.extend(ModalHelper, PatientListRoute, { statusQuery: 'All' }); } - actions.push({ - text: 'Paid', - linkTo: 'invoices.index', - statusQuery: 'Paid' - }); + if (this.currentUserCan('list_paid_invoices')) { + actions.push({ + text: 'Paid', + linkTo: 'invoices.index', + statusQuery: 'Paid' + }); + } return actions; }.property() diff --git a/app/locales/en/translations.js b/app/locales/en/translations.js index d4b5c5e77b..46905c5209 100644 --- a/app/locales/en/translations.js +++ b/app/locales/en/translations.js @@ -31,6 +31,7 @@ export default { columns: 'Columns', customForm: 'Custom Form', dischargeReportFormType: 'Discharge Report', + expenseTo: 'Expense To', formName: 'Form Name', formType: 'Form Type', incidentFormType: 'Incident', @@ -161,6 +162,7 @@ export default { admitPatient: 'Admit Patient', appointments: 'Appointments', billing: 'Billing', + cashier: 'Cashier', completeImaging: 'Complete Imaging', completeLab: 'Complete Lab', defineUserRoles: 'Define User Roles', @@ -192,6 +194,7 @@ export default { inventory: 'Inventory', invoices: 'Invoices', labs: 'Labs', + listPaidInvoices: 'List Paid Invoices', loadDb: 'Load Database', manageIncidents: 'Manage Incidents', medication: 'Medication', @@ -1065,6 +1068,7 @@ export default { appointmentSearch: 'Appointment Search', appointmentsCalendar: 'Appointments Calendar', appointmentsThisWeek: 'Appointments This Week', + cashier: 'Cashier', completed: 'Completed', currentIncidents: 'Current Incidents', customForms: 'Custom Forms', diff --git a/app/mixins/navigation.js b/app/mixins/navigation.js index dad4412629..1a9588ca02 100644 --- a/app/mixins/navigation.js +++ b/app/mixins/navigation.js @@ -251,12 +251,18 @@ export default Ember.Mixin.create({ title: 'Prices', iconClass: 'octicon-chevron-right', route: 'pricing.index', - capability: 'invoices' + capability: 'pricing' }, { title: 'Price Profiles', iconClass: 'octicon-chevron-right', route: 'pricing.profiles', + capability: 'pricing' + }, + { + title: 'Cashier', + iconClass: 'octicon-chevron-right', + route: 'invoices.cashier', capability: 'invoices' } ] diff --git a/app/mixins/user-roles.js b/app/mixins/user-roles.js index 56f77f8502..92e4106ed0 100644 --- a/app/mixins/user-roles.js +++ b/app/mixins/user-roles.js @@ -16,7 +16,8 @@ export const PREDEFINED_USER_ROLES = [ { name: 'Pharmacist', roles: ['Pharmacist', 'user'], defaultRoute: 'medication.index' }, { name: 'Social Worker', roles: ['Social Worker', 'user'], defaultRoute: 'patients.index' }, { name: 'System Administrator', roles: ['System Administrator', 'admin', 'user'], defaultRoute: 'patients.index' }, - { name: 'User Administrator', roles: ['User Administrator', 'admin', 'user'], defaultRoute: 'users' } + { name: 'User Administrator', roles: ['User Administrator', 'admin', 'user'], defaultRoute: 'users' }, + { name: 'Cashier', roles: ['Cashier', 'user'], defaultRoute: 'invoices.index' } ]; export default Ember.Mixin.create({ diff --git a/app/mixins/user-session.js b/app/mixins/user-session.js index 8a77720332..4434954016 100644 --- a/app/mixins/user-session.js +++ b/app/mixins/user-session.js @@ -22,7 +22,8 @@ export default Ember.Mixin.create({ 'Medical Records Officer', 'Patient Administration', 'Social Worker', - 'System Administrator' + 'System Administrator', + 'Cashier' ], add_appointment: [ 'Data Entry', @@ -31,7 +32,8 @@ export default Ember.Mixin.create({ 'Medical Records Officer', 'Patient Administration', 'Social Worker', - 'System Administrator' + 'System Administrator', + 'Cashier' ], add_charge: [ 'Data Entry', @@ -151,12 +153,14 @@ export default Ember.Mixin.create({ 'Data Entry', 'Hospital Administrator', 'Medical Records Officer', - 'System Administrator' + 'System Administrator', + 'Cashier' ], add_payment: [ 'Hospital Administrator', 'Medical Records Officer', - 'System Administrator' + 'System Administrator', + 'Cashier' ], add_procedure: [ 'Data Entry', @@ -228,6 +232,11 @@ export default Ember.Mixin.create({ 'Hospital Administrator', 'Finance', 'Finance Manager', + 'System Administrator', + 'Cashier' + ], + cashier: [ + 'Cashier', 'System Administrator' ], complete_imaging: [ @@ -396,7 +405,8 @@ export default Ember.Mixin.create({ 'Hospital Administrator', 'Finance', 'Finance Manager', - 'System Administrator' + 'System Administrator', + 'Cashier' ], labs: [ 'Data Entry', @@ -406,6 +416,12 @@ export default Ember.Mixin.create({ 'Medical Records Officer', 'System Administrator' ], + list_paid_invoices: [ + 'Data Entry', + 'Hospital Administrator', + 'Medical Records Officer', + 'System Administrator' + ], medication: [ 'Data Entry', 'Doctor', @@ -428,7 +444,8 @@ export default Ember.Mixin.create({ ], override_invoice: [ 'Hospital Administrator', - 'System Administrator' + 'System Administrator', + 'Cashier' ], query_db: [ 'System Administrator' diff --git a/app/router.js b/app/router.js index 79ab45b017..ee8f66abbc 100755 --- a/app/router.js +++ b/app/router.js @@ -65,6 +65,7 @@ Router.map(function() { }); this.route('invoices', function() { + this.route('cashier'); this.route('edit', { path: '/edit/:invoice_id' }); this.route('search', { path: '/search/:search_text' }); }); diff --git a/tests/acceptance/invoices-test.js b/tests/acceptance/invoices-test.js index 2e9406d034..5e40848e9d 100644 --- a/tests/acceptance/invoices-test.js +++ b/tests/acceptance/invoices-test.js @@ -133,3 +133,29 @@ test('add deposit', function(assert) { }); }); }); + +test('cashier role', function(assert) { + runWithPouchDump('billing', function() { + authenticateUser({ + name: 'cashier@hospitalrun.io', + roles: ['Cashier', 'user'], + role: 'Cashier', + prefix: 'p1' + }); + visit('/invoices'); + andThen(function() { + assert.equal(currentURL(), '/invoices'); + assert.equal(find('.primary-section-link').length, 2, 'Should have 2 navigations'); + assert.equal(find('.primary-section-link:contains(Scheduling)').length, 1, 'should see Scheduling navigation'); + assert.equal(find('.primary-section-link:contains(Billing)').length, 1, 'should see Billing navigation'); + + assert.equal(find('li:contains(Billed)').length, 1, 'should see Billed selection'); + assert.equal(find('li:contains(Drafts)').length, 1, 'should see Drafts selection'); + assert.equal(find('li:contains(All Invoices)').length, 1, 'should see All Invoices selection'); + }); + click('a:contains(Billing)'); + andThen(function() { + assert.equal(find('.category-sub-item').length, 3, 'Should have 3 sub navigations'); + }); + }); +});