initialize.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. const { Op } = require('sequelize')
  2. const { controllers: C } = require('@alancnet/material-framework/server')
  3. const { register } = C.auth.permissions
  4. const terminals = [
  5. {
  6. name: 'Las Vegas',
  7. key: 'LAS'
  8. },
  9. {
  10. name: 'Los Angeles',
  11. key: 'LAX'
  12. },
  13. {
  14. name: 'Phoenix',
  15. key: 'PHX'
  16. },
  17. {
  18. name: 'San Francisco',
  19. key: 'SFO'
  20. }
  21. ]
  22. const laborCategories = [
  23. {
  24. name: 'Warehouse',
  25. key: 'WAREHOUSE'
  26. },
  27. {
  28. name: 'Admin',
  29. key: 'ADMIN'
  30. },
  31. {
  32. name: 'Delivery',
  33. key: 'DELIVERY'
  34. },
  35. {
  36. name: 'Ops',
  37. key: 'OPS'
  38. }
  39. ]
  40. const serviceCategories = [
  41. {
  42. name: 'Inbound',
  43. key: 'INBOUND',
  44. laborCategories: [
  45. 'WAREHOUSE',
  46. 'ADMIN',
  47. 'OPS'
  48. ]
  49. },
  50. {
  51. name: 'Delivery',
  52. key: 'DELIVERY',
  53. laborCategories: [
  54. 'DELIVERY'
  55. ]
  56. }
  57. ]
  58. const roles = [
  59. {
  60. name: 'Management',
  61. key: 'MANAGER',
  62. permissions: [
  63. 'LABOR_CATEGORY_CREATE',
  64. 'LABOR_CATEGORY_DELETE',
  65. 'LABOR_CATEGORY_READ',
  66. 'LABOR_CATEGORY_UNDELETE',
  67. 'LABOR_CATEGORY_UPDATE',
  68. 'LABOR_ENTRY',
  69. 'LABOR_VIEW',
  70. 'TERMINAL_ALL_ACCESS',
  71. 'TERMINAL_CREATE',
  72. 'TERMINAL_DELETE',
  73. 'TERMINAL_READ',
  74. 'TERMINAL_UNDELETE',
  75. 'TERMINAL_UPDATE',
  76. 'METRICS_VIEW',
  77. 'CLIENT_CREATE',
  78. 'CLIENT_DELETE',
  79. 'CLIENT_READ',
  80. 'CLIENT_UNDELETE',
  81. 'CLIENT_UPDATE',
  82. 'ROLE_CREATE',
  83. 'ROLE_DELETE',
  84. 'ROLE_READ',
  85. 'ROLE_UNDELETE',
  86. 'ROLE_UPDATE',
  87. 'SERVICES_ENTRY',
  88. 'SERVICES_VIEW',
  89. 'STAFFING_AGENCY_CREATE',
  90. 'STAFFING_AGENCY_DELETE',
  91. 'STAFFING_AGENCY_READ',
  92. 'STAFFING_AGENCY_UNDELETE',
  93. 'STAFFING_AGENCY_UPDATE',
  94. 'STAFF_MEMBER_CREATE',
  95. 'STAFF_MEMBER_DELETE',
  96. 'STAFF_MEMBER_READ',
  97. 'STAFF_MEMBER_UNDELETE',
  98. 'STAFF_MEMBER_UPDATE',
  99. 'USER_CREATE',
  100. 'USER_DELETE',
  101. 'USER_READ',
  102. 'USER_UNDELETE',
  103. 'USER_UPDATE',
  104. 'INCOME_ADMIN_VIEW',
  105. 'INCOME_DELIVERY_VIEW',
  106. 'INCOME_OPS_VIEW',
  107. 'INCOME_WAREHOUSE_VIEW',
  108. 'VIEW_TERMINAL_LAS',
  109. 'VIEW_TERMINAL_LAX',
  110. 'VIEW_TERMINAL_PHX',
  111. 'VIEW_TERMINAL_SFO'
  112. ].join(',')
  113. },
  114. {
  115. name: 'Terminal Manager',
  116. key: 'TERMINAL_MANAGER',
  117. permissions: [
  118. 'LABOR_CATEGORY_READ',
  119. 'TERMINAL_READ',
  120. 'METRICS_VIEW',
  121. 'CLIENT_CREATE',
  122. 'CLIENT_DELETE',
  123. 'CLIENT_READ',
  124. 'CLIENT_UNDELETE',
  125. 'CLIENT_UPDATE',
  126. 'CLIENT_VIEW',
  127. 'STAFFING_AGENCY_READ',
  128. 'STAFF_MEMBER_CREATE',
  129. 'STAFF_MEMBER_DELETE',
  130. 'STAFF_MEMBER_READ',
  131. 'STAFF_MEMBER_UNDELETE',
  132. 'STAFF_MEMBER_UPDATE',
  133. 'STAFF_MEMBER_VIEW'
  134. ]
  135. .concat(laborCategories.map(x => x.key).filter(key => key !== 'ADMIN').map(key => `INCOME_${key}_VIEW`))
  136. .join(',')
  137. },
  138. {
  139. name: 'Accounting',
  140. key: 'ACCOUNTING',
  141. permissions: [
  142. 'LABOR_CATEGORY_READ',
  143. 'TERMINAL_READ',
  144. 'CLIENT_READ',
  145. 'STAFFING_AGENCY_CREATE',
  146. 'STAFFING_AGENCY_DELETE',
  147. 'STAFFING_AGENCY_READ',
  148. 'STAFFING_AGENCY_UNDELETE',
  149. 'STAFFING_AGENCY_UPDATE',
  150. 'STAFF_MEMBER_CREATE',
  151. 'STAFF_MEMBER_DELETE',
  152. 'STAFF_MEMBER_READ',
  153. 'STAFF_MEMBER_UNDELETE',
  154. 'STAFF_MEMBER_UPDATE'
  155. ]
  156. .concat(laborCategories.map(x => x.key).filter(key => key !== 'ADMIN').map(key => `INCOME_${key}_VIEW`))
  157. .join(',')
  158. },
  159. {
  160. name: 'Standard User',
  161. key: 'USER',
  162. }
  163. ].concat(terminals.map(loc => ({
  164. name: `${loc.name}`,
  165. key: `${loc.key}`,
  166. permissions: `TERMINAL_${loc.key}_ACCESS`
  167. })))
  168. const initializeTerminals = async db => {
  169. for (let terminal of terminals) {
  170. const record = await db.upsert(db.Terminal, terminal)
  171. register(`TERMINAL_${terminal.key}_ACCESS`, `Access ${terminal.name}.`)
  172. console.log(`Upserted Terminal ${terminal.name}: ${JSON.stringify(record)}`)
  173. }
  174. }
  175. const initializeRoles = async db => {
  176. for (let role of roles) {
  177. const record = await db.upsert(db.Role, role)
  178. console.log(`Upserted Role ${role.name}: ${JSON.stringify(record)}`)
  179. }
  180. }
  181. const initializeLaborCategories = async db => {
  182. for (let category of laborCategories) {
  183. const record = await db.upsert(db.LaborCategory, category)
  184. register(`INCOME_${category.key}_VIEW`, `View ${category.name} Staff income.`)
  185. console.log(`Upserted Labor Category ${category.name}: ${JSON.stringify(record)}`)
  186. }
  187. }
  188. const initializeServiceCategories = async db => {
  189. for (let category of serviceCategories) {
  190. const record = await db.upsert(db.ServiceCategory, category)
  191. const laborCategories = await db.LaborCategory.findAll({
  192. where: {
  193. key: {
  194. [Op.in]: category.laborCategories
  195. }
  196. }
  197. })
  198. await record.setLaborCategories(laborCategories)
  199. console.log(`Upserted Service Category ${category.name}: ${JSON.stringify(record)}`)
  200. }
  201. }
  202. const init = async (db) => {
  203. await initializeTerminals(db)
  204. await initializeRoles(db)
  205. await initializeLaborCategories(db)
  206. await initializeServiceCategories(db)
  207. }
  208. module.exports = {
  209. initializeRoles,
  210. initializeLaborCategories,
  211. init
  212. }