const { Op } = require('sequelize') const { controllers: C } = require('@alancnet/material-framework/server') const { register } = C.auth.permissions const terminals = [ { name: 'Las Vegas', key: 'LAS' }, { name: 'Los Angeles', key: 'LAX' }, { name: 'Phoenix', key: 'PHX' }, { name: 'San Francisco', key: 'SFO' } ] const laborCategories = [ { name: 'Warehouse', key: 'WAREHOUSE' }, { name: 'Admin', key: 'ADMIN' }, { name: 'Delivery', key: 'DELIVERY' }, { name: 'Ops', key: 'OPS' } ] const serviceCategories = [ { name: 'Inbound', key: 'INBOUND', laborCategories: [ 'WAREHOUSE', 'ADMIN', 'OPS' ], serviceColumn: 'inbound', displayOrder: 1 }, { name: 'Delivery', key: 'DELIVERY', laborCategories: [ 'DELIVERY' ], serviceColumn: 'delivered', displayOrder: 2 } ] const roles = [ { name: 'Management', key: 'MANAGER', permissions: [ 'LABOR_CATEGORY_CREATE', 'LABOR_CATEGORY_DELETE', 'LABOR_CATEGORY_READ', 'LABOR_CATEGORY_UNDELETE', 'LABOR_CATEGORY_UPDATE', 'LABOR_ENTRY', 'LABOR_VIEW', 'TERMINAL_ALL_ACCESS', 'TERMINAL_CREATE', 'TERMINAL_DELETE', 'TERMINAL_READ', 'TERMINAL_UNDELETE', 'TERMINAL_UPDATE', 'METRICS_VIEW', 'CLIENT_CREATE', 'CLIENT_DELETE', 'CLIENT_READ', 'CLIENT_UNDELETE', 'CLIENT_UPDATE', 'ROLE_CREATE', 'ROLE_DELETE', 'ROLE_READ', 'ROLE_UNDELETE', 'ROLE_UPDATE', 'SERVICES_ENTRY', 'SERVICES_VIEW', 'STAFFING_AGENCY_CREATE', 'STAFFING_AGENCY_DELETE', 'STAFFING_AGENCY_READ', 'STAFFING_AGENCY_UNDELETE', 'STAFFING_AGENCY_UPDATE', 'STAFF_MEMBER_CREATE', 'STAFF_MEMBER_DELETE', 'STAFF_MEMBER_READ', 'STAFF_MEMBER_UNDELETE', 'STAFF_MEMBER_UPDATE', 'USER_CREATE', 'USER_DELETE', 'USER_READ', 'USER_UNDELETE', 'USER_UPDATE', 'INCOME_ADMIN_VIEW', 'INCOME_DELIVERY_VIEW', 'INCOME_OPS_VIEW', 'INCOME_WAREHOUSE_VIEW', 'VIEW_TERMINAL_LAS', 'VIEW_TERMINAL_LAX', 'VIEW_TERMINAL_PHX', 'VIEW_TERMINAL_SFO' ].join(',') }, { name: 'Terminal Manager', key: 'TERMINAL_MANAGER', permissions: [ 'LABOR_CATEGORY_READ', 'TERMINAL_READ', 'METRICS_VIEW', 'CLIENT_CREATE', 'CLIENT_DELETE', 'CLIENT_READ', 'CLIENT_UNDELETE', 'CLIENT_UPDATE', 'CLIENT_VIEW', 'STAFFING_AGENCY_READ', 'STAFF_MEMBER_CREATE', 'STAFF_MEMBER_DELETE', 'STAFF_MEMBER_READ', 'STAFF_MEMBER_UNDELETE', 'STAFF_MEMBER_UPDATE', 'STAFF_MEMBER_VIEW' ] .concat(laborCategories.map(x => x.key).filter(key => key !== 'ADMIN').map(key => `INCOME_${key}_VIEW`)) .join(',') }, { name: 'Accounting', key: 'ACCOUNTING', permissions: [ 'LABOR_CATEGORY_READ', 'TERMINAL_READ', 'CLIENT_READ', 'STAFFING_AGENCY_CREATE', 'STAFFING_AGENCY_DELETE', 'STAFFING_AGENCY_READ', 'STAFFING_AGENCY_UNDELETE', 'STAFFING_AGENCY_UPDATE', 'STAFF_MEMBER_CREATE', 'STAFF_MEMBER_DELETE', 'STAFF_MEMBER_READ', 'STAFF_MEMBER_UNDELETE', 'STAFF_MEMBER_UPDATE' ] .concat(laborCategories.map(x => x.key).filter(key => key !== 'ADMIN').map(key => `INCOME_${key}_VIEW`)) .join(',') }, { name: 'Standard User', key: 'USER', } ].concat(terminals.map(loc => ({ name: `${loc.name}`, key: `${loc.key}`, permissions: `TERMINAL_${loc.key}_ACCESS` }))) const initializeTerminals = async db => { await db.fill(db.Terminal, terminals) for (let terminal of terminals) { register(`TERMINAL_${terminal.key}_ACCESS`, `Access ${terminal.name}.`) } } const initializeRoles = async db => { await db.fill(db.Role, roles) } const initializeLaborCategories = async db => { await db.fill(db.LaborCategory, laborCategories) for (let category of laborCategories) { register(`INCOME_${category.key}_VIEW`, `View ${category.name} Staff income.`) } } const initializeServiceCategories = async db => { await db.fill(db.ServiceCategory, serviceCategories) } const seed = async (db) => { await initializeTerminals(db) await initializeRoles(db) await initializeLaborCategories(db) await initializeServiceCategories(db) } module.exports = Object.assign(seed, { seed, initializeTerminals, initializeRoles, initializeLaborCategories, initializeServiceCategories })