Browse Source

Group by location

Alan Colon 7 years ago
parent
commit
b45e415ff0

+ 2 - 1
app/assets/index.js

@@ -6,5 +6,6 @@ module.exports = Object.assign(assets, {
   staffMemberIcon: require('@alancnet/icomoon-svg/user-tie.svg'),
   locationIcon: require('@alancnet/icomoon-svg/location.svg'),
   laborIcon: require('@alancnet/icomoon-svg/accessibility.svg'),
-  crumbIcon: require('@alancnet/material-design-icons/image_ic_navigate_next_48px.svg')
+  crumbIcon: require('@alancnet/material-design-icons/image_ic_navigate_next_48px.svg'),
+  retailerIcon: require('@alancnet/material-design-icons/maps_ic_store_mall_directory_48px.svg')
 })

+ 1 - 1
app/components/labor-entry-page.js

@@ -34,7 +34,7 @@ app.component('appLaborEntryPage', {
               {{::ctrl.staffMembers[sfl.id].name}}
             </td>
             <td md-cell ng-repeat="day in ::sfl.days track by $index">
-              <input class="hour-input md-button md-raised" ng-model="day.hours" type="number">
+              <input class="hour-input md-button md-raised" ng-model="day.hours" type="number" min="0" step="0.01">
             </td>
           </tr>
         </tbody>

+ 9 - 2
app/components/staff-member-pages.js

@@ -2,6 +2,12 @@ const { pages } = require('@alancnet/material-framework/app/crud')
 
 pages({
   camelName: 'staffMember',
+  apiPrefix: '/api/staff-members/:location',
+  appPrefix: '/staff-members/:location',
+  pascalName: 'StaffMember',
+  pascalPlural: 'StaffMembers',
+  titleName: '{{ctrl.$routeParams.location == "all" ? "All" : ctrl.$routeParams.location}} Staff Member',
+  titlePlural: '{{ctrl.$routeParams.location == "all" ? "All" : ctrl.$routeParams.location}} Staff Members',
   columns: [
     { camelName: 'name', row: 1 },
     { camelName: 'title', row: 2 },
@@ -14,6 +20,7 @@ pages({
     {
       titleName: 'Location',
       camelName: 'locationId',
+      routeParam: 'location',
       type: 'autocomplete',
       apiPrefix: '/api/locations'
     },
@@ -33,8 +40,8 @@ pages({
     {
       section: null,
       rows: [
-        [ 'name', 'title', 'wage' ],
-        [ 'locationId' ]
+        [ 'name', 'title' ],
+        [ 'wage', 'locationId' ]
       ]
     },
     {

+ 30 - 10
app/components/user-area-nav.js

@@ -1,6 +1,6 @@
 const app = require('../app')
 const _ = require('lodash')
-const { dashboardIcon, staffMemberIcon, staffingAgencyIcon, laborIcon } = require('../assets')
+const { dashboardIcon, staffMemberIcon, staffingAgencyIcon, laborIcon, retailerIcon } = require('../assets')
 
 app.component('appUserAreaNav', {
   template: html`
@@ -15,17 +15,31 @@ app.component('appUserAreaNav', {
       </md-button>
     </md-menu-item>
 
-    <h3>Labor</h3>
-    <md-menu-item ng-repeat="location in ctrl.locations">
-      <md-button ng-href="/labor/{{location.key}}">
-        <md-icon md-svg-icon="${laborIcon}"></md-icon>
-        {{location.name}} Labor
-      </md-button>
-    </md-menu-item>
+    <div ng-repeat="location in ctrl.locations">
+      <h3>{{::location.name}}</h3>
+      <md-menu-item>
+        <md-button ng-href="/labor/{{::location.key}}">
+          <md-icon md-svg-icon="${laborIcon}"></md-icon>
+          {{::location.key}} Labor
+        </md-button>
+      </md-menu-item>
+      <md-menu-item>
+        <md-button ng-href="/staff-members/{{::location.key}}">
+          <md-icon md-svg-icon="${staffMemberIcon}"></md-icon>
+          {{::location.key}} Staff Members
+        </md-button>
+      </md-menu-item>
+      <md-menu-item>
+        <md-button ng-href="/retailers/{{::location.key}}">
+          <md-icon md-svg-icon="${retailerIcon}"></md-icon>
+          {{::location.key}} Retailers
+        </md-button>
+      </md-menu-item>
+    </div>
 
-    <h3>Staff</h3>
+    <h3>All</h3>
     <md-menu-item>
-      <md-button ng-href="/staff-members">
+      <md-button ng-href="/staff-members/all">
         <md-icon md-svg-icon="${staffMemberIcon}"></md-icon>
         Staff Members
       </md-button>
@@ -36,6 +50,12 @@ app.component('appUserAreaNav', {
         Staffing Agencies
       </md-button>
     </md-menu-item>
+    <md-menu-item>
+      <md-button ng-href="/retailers/all">
+        <md-icon md-svg-icon="${retailerIcon}"></md-icon>
+        Retailers
+      </md-button>
+    </md-menu-item>
     
   `,
   controllerAs: 'ctrl',

+ 1 - 1
app/routes.js

@@ -1,6 +1,6 @@
 module.exports = function($routeProvider) {
   $routeProvider.when('/dashboard', {template: '<app-dashboard-page />'})
-  $routeProvider.crudRoutes({ camelName: 'staffMember' })
+  $routeProvider.crudRoutes({ appPrefix: '/staff-members/:location', camelName: 'staffMember' })
   $routeProvider.crudRoutes({ camelName: 'staffingAgency' })
   $routeProvider.when('/labor/:location', {template: '<app-labor-page />'})
   $routeProvider.when('/labor/:location/:week', {template: '<app-labor-entry-page />'})

+ 1 - 0
auto-crud/index.js

@@ -1,5 +1,6 @@
 require('./location')
 require('./labor-category')
+require('./retailer')
 /* Example */
 /*
 

+ 9 - 2
auto-crud/retailer.js

@@ -3,6 +3,13 @@ const { register, Sequelize } = require('@alancnet/material-framework/auto-crud'
 register({
   camelName: 'retailer',
   iconAsset: 'userIcon',
+  appPrefix: '/retailers/:location',
+  apiPrefix: '/api/retailers/:location',
+  pascalName: 'Retailer',
+  pascalPlural: 'Retailers',
+  titleName: '{{ctrl.$routeParams.location == "all" ? "All" : ctrl.$routeParams.location}} Client',
+  titlePlural: '{{ctrl.$routeParams.location == "all" ? "All" : ctrl.$routeParams.location}} Clients',
+  showNav: false,
   schema: {
     id: {
       type: Sequelize.UUID,
@@ -31,7 +38,7 @@ register({
     { camelName: 'key' },
     { camelName: 'name' },
     { camelName: 'address', inList: false },
-    { camelName: 'locationId', titleName: 'Location', type: 'autocomplete', source: '/api/locations' },
+    { camelName: 'locationId', titleName: 'Location', type: 'autocomplete', apiPrefix: '/api/locations', routeParam: 'location' },
     { camelName: 'distanceMiles', titleName: 'Distance in Miles', type: 'number' }
   ],
   layout: [
@@ -39,7 +46,7 @@ register({
       section: 'Details',
       rows: [
         [ 'name', 'key' ],
-        [ 'address' ]
+        [ 'address' ],
         [ 'locationId', 'distanceMiles' ]
       ]
     }

+ 13 - 3
lib/database/index.js

@@ -1,10 +1,10 @@
 // TODO: App Specific Models
 const {database} = require('@alancnet/material-framework/server')
-const { Location } = database
+const { Location, Retailer } = database
 // const Location = require('./location')
 const Workday = require('./workday')
 const Service = require('./service')
-const Retailer = require('./retailer')
+//const Retailer = require('./retailer')
 const StaffMember = require('./staff-member')
 const StaffingAgency = require('./staffing-agency')
 const Labor = require('./labor')
@@ -18,6 +18,12 @@ const ServiceWorkday = Service.belongsTo(Workday)
 const RetailerService = Retailer.hasMany(Service)
 const ServiceRetailer = Service.belongsTo(Retailer)
 
+const LocationStaffMember = Location.hasMany(StaffMember)
+const StaffMemberLocation = StaffMember.belongsTo(Location)
+
+const LocationRetailer = Location.hasMany(Retailer)
+const RetailerLocation = Retailer.belongsTo(Location)
+
 // const StaffingAgencyStaffMember = StaffingAgency.hasMany(StaffMember)
 // const StaffMemberStaffingAgency = StaffMember.belongsTo(StaffingAgency)
 
@@ -35,5 +41,9 @@ module.exports = Object.assign(database, {
   ServiceWorkday,
   RetailerService,
   ServiceRetailer,
-  Labor
+  LocationStaffMember,
+  StaffMemberLocation,
+  Labor,
+  LocationRetailer,
+  RetailerLocation
 })

+ 2 - 1
lib/routes.js

@@ -3,7 +3,8 @@ const { routes:crudRoutes } = require('@alancnet/material-framework/lib/crud')
 
 module.exports = app => {
   app.get('/api/statistics', C.statistics.get)
-  crudRoutes({ app, controller: C.staffMember, camelName: 'staffMember' })
+  crudRoutes({ app, apiPrefix: '/api/staff-members/:location', controller: C.staffMember, camelName: 'staffMember' })
+ // crudRoutes({ app, controller: C.staffMember, camelName: 'staffMember' })
   crudRoutes({ app, controller: C.staffingAgency, camelName: 'staffingAgency' })
   app.get('/api/labor/:location', C.labor.list)
   app.get('/api/labor/:location/:week', C.labor.get)