@campxdev/shared 1.10.77 → 1.10.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@campxdev/shared",
3
- "version": "1.10.77",
3
+ "version": "1.10.79",
4
4
  "main": "./exports.ts",
5
5
  "scripts": {
6
6
  "start": "react-scripts start",
@@ -90,7 +90,6 @@ interface MultiSelectProps {
90
90
  onOpen?: (e: any) => void
91
91
  noOptionsText?: string
92
92
  }
93
-
94
93
  export default function MultiSelect({
95
94
  name,
96
95
  options,
@@ -0,0 +1,97 @@
1
+ import { SelectProps } from '@mui/material'
2
+ import { useEffect, useState } from 'react'
3
+ import axios from '../../config/axios'
4
+ import { SingleSelect } from '../Input'
5
+
6
+ type ClassRoomSelectorProps = {
7
+ name?: string
8
+ label: string
9
+ filters?: { programId: number; courseId: number; batch: string }
10
+ required?: boolean
11
+ onChange?: (value: any) => void
12
+ allowAll?: boolean
13
+ error?: boolean
14
+ helperText?: string
15
+ api?: string
16
+ } & SelectProps
17
+ const ClassRoomSelector = (props: ClassRoomSelectorProps) => {
18
+ const {
19
+ name,
20
+ required = false,
21
+ label,
22
+ multiple = false,
23
+ filters,
24
+ allowAll = true,
25
+ api = '/square/classrooms/filters',
26
+ } = props
27
+ const [options, setOptions] = useState([])
28
+ const [prevProgramId, setPrevProgramId] = useState(null)
29
+ const [prevBatch, setPrevBatch] = useState(null)
30
+ const [prevCourseId, setPrevCourseId] = useState(null)
31
+ const handleOpen = () => {
32
+ if (filters) {
33
+ if (
34
+ (filters?.programId && filters?.programId !== prevProgramId) ||
35
+ (filters?.batch &&
36
+ filters?.batch !== prevBatch &&
37
+ filters?.programId) ||
38
+ (filters?.courseId && filters?.courseId !== prevCourseId)
39
+ ) {
40
+ setOptions([])
41
+ axios
42
+ .get(api, {
43
+ params: filters,
44
+ })
45
+ .then((response) => {
46
+ setOptions(response.data)
47
+ setPrevProgramId(filters.programId)
48
+ setPrevBatch(filters.batch)
49
+ setPrevCourseId(filters.courseId)
50
+ })
51
+ .catch((error) => {
52
+ console.error('Error fetching data from the API:', error)
53
+ })
54
+ }
55
+ } else if (options.length === 0) {
56
+ axios
57
+ .get(api)
58
+ .then((response) => {
59
+ setOptions(response.data)
60
+ })
61
+ .catch((error) => {
62
+ console.error('Error fetching data from the API:', error)
63
+ })
64
+ }
65
+ }
66
+ useEffect(() => {
67
+ if (props?.value && props.value != 'all') {
68
+ handleOpen()
69
+ }
70
+ }, [props.value])
71
+
72
+ const handleOptions =
73
+ options.length > 0
74
+ ? [
75
+ ...(allowAll ? [{ value: 'all', label: 'All' }] : []),
76
+ ...options.map((item) => ({
77
+ label: `${item.name}`,
78
+ value: `${item.id}`,
79
+ })),
80
+ ]
81
+ : allowAll
82
+ ? [{ value: 'all', label: 'All' }]
83
+ : []
84
+
85
+ return (
86
+ <SingleSelect
87
+ name={name}
88
+ label={label}
89
+ required={required}
90
+ options={handleOptions}
91
+ onOpen={handleOpen}
92
+ defaultValue="all"
93
+ {...props}
94
+ />
95
+ )
96
+ }
97
+ export default ClassRoomSelector
@@ -12,6 +12,7 @@ type CourseSelectorProps = {
12
12
  error?: boolean
13
13
  helperText?: string
14
14
  api?: string
15
+ valueByUniqueId?: boolean
15
16
  } & SelectProps
16
17
  export default function CourseSelector(props: CourseSelectorProps) {
17
18
  const {
@@ -20,7 +21,8 @@ export default function CourseSelector(props: CourseSelectorProps) {
20
21
  label,
21
22
  onChange,
22
23
  allowAll = true,
23
- api = '/square/courses',
24
+ valueByUniqueId = false,
25
+ api = '/paymentx/domain/courses',
24
26
  } = props
25
27
  const [options, setOptions] = useState([])
26
28
 
@@ -47,7 +49,7 @@ export default function CourseSelector(props: CourseSelectorProps) {
47
49
  ...(allowAll ? [{ value: 'all', label: 'All' }] : []),
48
50
  ...options.map((item) => ({
49
51
  label: `${item.courseName} `,
50
- value: `${item.id}`,
52
+ value: !valueByUniqueId ? `${item.id}` : `${item.uniqueId}`,
51
53
  })),
52
54
  ]
53
55
  : allowAll
@@ -0,0 +1,67 @@
1
+ import { SelectProps } from '@mui/material'
2
+ import { useEffect, useState } from 'react'
3
+ import axios from '../../config/axios'
4
+ import { SingleSelect } from '../Input'
5
+
6
+ type DepartmentSelectorProps = {
7
+ name?: string
8
+ label: string
9
+ required?: boolean
10
+ onChange?: (value: any) => void
11
+ allowAll?: boolean
12
+ error?: boolean
13
+ helperText?: string
14
+ api?: string
15
+ } & SelectProps
16
+ export default function DepartmentSelector(props: DepartmentSelectorProps) {
17
+ const {
18
+ name,
19
+ required = false,
20
+ label,
21
+ onChange,
22
+ allowAll = true,
23
+ api = '/hrms/departments',
24
+ } = props
25
+ const [options, setOptions] = useState([])
26
+
27
+ const handleOpen = () => {
28
+ if (options.length === 0) {
29
+ axios
30
+ .get(api)
31
+ .then((response) => {
32
+ setOptions(response.data.data)
33
+ })
34
+ .catch((error) => {
35
+ console.error('Error fetching data from the API:', error)
36
+ })
37
+ }
38
+ }
39
+ useEffect(() => {
40
+ if (props?.value && props.value != 'all') {
41
+ handleOpen()
42
+ }
43
+ }, [props.value])
44
+ const handleOptions =
45
+ options.length > 0
46
+ ? [
47
+ ...(allowAll ? [{ value: 'all', label: 'All' }] : []),
48
+ ...options.map((item) => ({
49
+ label: `${item.name} `,
50
+ value: `${item._id}`,
51
+ })),
52
+ ]
53
+ : allowAll
54
+ ? [{ value: 'all', label: 'All' }]
55
+ : []
56
+
57
+ return (
58
+ <SingleSelect
59
+ name={name}
60
+ label={label}
61
+ required={required}
62
+ options={handleOptions}
63
+ onOpen={handleOpen}
64
+ {...props}
65
+ />
66
+ )
67
+ }
@@ -0,0 +1,92 @@
1
+ import { SelectProps } from '@mui/material'
2
+ import { useEffect, useState } from 'react'
3
+ import axios from '../../config/axios'
4
+ import { SingleSelect } from '../Input'
5
+
6
+ type FacultySelectorProps = {
7
+ name?: string
8
+ label: string
9
+ filters?: {
10
+ departmentId: number | string
11
+ isSearch: boolean
12
+ isActive: boolean
13
+ type: string
14
+ }
15
+ required?: boolean
16
+ onChange?: (value: any) => void
17
+ allowAll?: boolean
18
+ error?: boolean
19
+ helperText?: string
20
+ api?: string
21
+ } & SelectProps
22
+ const FacultySelector = (props: FacultySelectorProps) => {
23
+ const {
24
+ name,
25
+ required = false,
26
+ label,
27
+ multiple = false,
28
+ filters,
29
+ allowAll = true,
30
+ api = '/hrms/employees',
31
+ } = props
32
+ const [options, setOptions] = useState([])
33
+ const [prevDepartmentId, setPrevDepartmentId] = useState(null)
34
+ const handleOpen = () => {
35
+ if (filters) {
36
+ if (filters.departmentId && filters.departmentId !== prevDepartmentId) {
37
+ setOptions([])
38
+ axios
39
+ .get(api, {
40
+ params: filters,
41
+ })
42
+ .then((response) => {
43
+ setOptions(response.data.data)
44
+ setPrevDepartmentId(filters.departmentId)
45
+ })
46
+ .catch((error) => {
47
+ console.error('Error fetching data from the API:', error)
48
+ })
49
+ }
50
+ } else if (options.length === 0) {
51
+ axios
52
+ .get(api)
53
+ .then((response) => {
54
+ setOptions(response.data.data)
55
+ })
56
+ .catch((error) => {
57
+ console.error('Error fetching data from the API:', error)
58
+ })
59
+ }
60
+ }
61
+ useEffect(() => {
62
+ if (props?.value && props.value != 'all') {
63
+ handleOpen()
64
+ }
65
+ }, [props.value])
66
+
67
+ const handleOptions =
68
+ options.length > 0
69
+ ? [
70
+ ...(allowAll ? [{ value: 'all', label: 'All' }] : []),
71
+ ...options.map((item) => ({
72
+ label: `${item.fullName}`,
73
+ value: `${item.userId}`,
74
+ })),
75
+ ]
76
+ : allowAll
77
+ ? [{ value: 'all', label: 'All' }]
78
+ : []
79
+
80
+ return (
81
+ <SingleSelect
82
+ name={name}
83
+ label={label}
84
+ required={required}
85
+ options={handleOptions}
86
+ onOpen={handleOpen}
87
+ defaultValue="all"
88
+ {...props}
89
+ />
90
+ )
91
+ }
92
+ export default FacultySelector
@@ -0,0 +1,50 @@
1
+ import { SelectProps } from '@mui/material'
2
+ import { Controller } from 'react-hook-form'
3
+ import ClassRoomSelector from '../ClassRoomSelector'
4
+
5
+ type ClassRoomSelectorProps = {
6
+ control: any
7
+ name: string
8
+ label: string
9
+ required?: boolean
10
+ multiple?: boolean
11
+ allowAll?: boolean
12
+ filters?: { programId: number; courseId: number; batch: string }
13
+ onChange?: (value: any) => void
14
+ api?: string
15
+ } & SelectProps
16
+ export default function FormClassRoomSelector(props: ClassRoomSelectorProps) {
17
+ const {
18
+ name,
19
+ required = false,
20
+ control,
21
+ label,
22
+ multiple = false,
23
+ allowAll = true,
24
+ onChange,
25
+ value,
26
+ filters,
27
+ api,
28
+ } = props
29
+
30
+ return (
31
+ <Controller
32
+ name={name}
33
+ control={control}
34
+ render={({ field, fieldState: { error } }) => (
35
+ <ClassRoomSelector
36
+ label={label}
37
+ name={name}
38
+ onChange={onChange ?? field.onChange}
39
+ value={value ?? field?.value}
40
+ allowAll={allowAll}
41
+ filters={filters}
42
+ required={required}
43
+ error={!!error}
44
+ helperText={error?.message}
45
+ {...props}
46
+ />
47
+ )}
48
+ />
49
+ )
50
+ }
@@ -11,6 +11,7 @@ type FormCourseSelectorProps = {
11
11
  allowAll?: boolean
12
12
  onChange?: (value: any) => void
13
13
  api?: string
14
+ valueByUniqueId?: boolean
14
15
  } & SelectProps
15
16
  export default function FormCourseSelector(props: FormCourseSelectorProps) {
16
17
  const {
@@ -23,6 +24,7 @@ export default function FormCourseSelector(props: FormCourseSelectorProps) {
23
24
  onChange,
24
25
  value,
25
26
  api,
27
+ valueByUniqueId = false,
26
28
  } = props
27
29
 
28
30
  return (
@@ -39,6 +41,7 @@ export default function FormCourseSelector(props: FormCourseSelectorProps) {
39
41
  required={required}
40
42
  error={!!error}
41
43
  helperText={error?.message}
44
+ valueByUniqueId={valueByUniqueId}
42
45
  {...props}
43
46
  />
44
47
  )}
@@ -0,0 +1,49 @@
1
+ import { SelectProps } from '@mui/material'
2
+ import { Controller } from 'react-hook-form'
3
+ import DepartmentSelector from '../DepartmentSelector'
4
+
5
+ type FormDepartmentSelectorProps = {
6
+ control: any
7
+ name: string
8
+ label: string
9
+ required?: boolean
10
+ multiple?: boolean
11
+ allowAll?: boolean
12
+ onChange?: (value: any) => void
13
+ api?: string
14
+ } & SelectProps
15
+ export default function FormDepartmentSelector(
16
+ props: FormDepartmentSelectorProps,
17
+ ) {
18
+ const {
19
+ name,
20
+ required = false,
21
+ control,
22
+ label,
23
+ allowAll = true,
24
+ multiple = false,
25
+ onChange,
26
+ value,
27
+ api,
28
+ } = props
29
+
30
+ return (
31
+ <Controller
32
+ name={name}
33
+ control={control}
34
+ render={({ field, fieldState: { error } }) => (
35
+ <DepartmentSelector
36
+ label={label}
37
+ name={name}
38
+ onChange={onChange ?? field.onChange}
39
+ value={value ?? field?.value}
40
+ allowAll={allowAll}
41
+ required={required}
42
+ error={!!error}
43
+ helperText={error?.message}
44
+ {...props}
45
+ />
46
+ )}
47
+ />
48
+ )
49
+ }
@@ -0,0 +1,55 @@
1
+ import { SelectProps } from '@mui/material'
2
+ import { Controller } from 'react-hook-form'
3
+ import FacultySelector from '../FacultySelector'
4
+
5
+ type FacultySelectorProps = {
6
+ control: any
7
+ name: string
8
+ label: string
9
+ required?: boolean
10
+ multiple?: boolean
11
+ allowAll?: boolean
12
+ filters?: {
13
+ departmentId: number | string
14
+ isSearch: boolean
15
+ isActive: boolean
16
+ type: string
17
+ }
18
+ onChange?: (value: any) => void
19
+ api?: string
20
+ } & SelectProps
21
+ export default function FormFacultySelector(props: FacultySelectorProps) {
22
+ const {
23
+ name,
24
+ required = false,
25
+ control,
26
+ label,
27
+ multiple = false,
28
+ allowAll = true,
29
+ onChange,
30
+ value,
31
+ filters,
32
+ api,
33
+ } = props
34
+
35
+ return (
36
+ <Controller
37
+ name={name}
38
+ control={control}
39
+ render={({ field, fieldState: { error } }) => (
40
+ <FacultySelector
41
+ label={label}
42
+ name={name}
43
+ onChange={onChange ?? field.onChange}
44
+ value={value ?? field?.value}
45
+ allowAll={allowAll}
46
+ filters={filters}
47
+ required={required}
48
+ error={!!error}
49
+ helperText={error?.message}
50
+ {...props}
51
+ />
52
+ )}
53
+ />
54
+ )
55
+ }
@@ -12,6 +12,7 @@ type ProgramSelectorProps = {
12
12
  filters?: { courseId: number }
13
13
  onChange?: (value: any) => void
14
14
  api?: string
15
+ valueByBranchCode?: boolean
15
16
  } & SelectProps
16
17
  export default function FormProgramSelector(props: ProgramSelectorProps) {
17
18
  const {
@@ -24,7 +25,8 @@ export default function FormProgramSelector(props: ProgramSelectorProps) {
24
25
  onChange,
25
26
  value,
26
27
  filters,
27
- api
28
+ api,
29
+ valueByBranchCode = false,
28
30
  } = props
29
31
 
30
32
  return (
@@ -42,6 +44,7 @@ export default function FormProgramSelector(props: ProgramSelectorProps) {
42
44
  required={required}
43
45
  error={!!error}
44
46
  helperText={error?.message}
47
+ valueByBranchCode={valueByBranchCode}
45
48
  {...props}
46
49
  />
47
50
  )}
@@ -0,0 +1,106 @@
1
+ import { SelectProps } from '@mui/material'
2
+ import { useEffect, useState } from 'react'
3
+ import { Controller } from 'react-hook-form'
4
+ import axios from '../../../../config/axios'
5
+ import { MultiSelect } from '../../../Input'
6
+
7
+ type MultiFacultySelectorProps = {
8
+ control: any
9
+ name?: string
10
+ label: string
11
+ filters?: {
12
+ departmentId: string
13
+ isSearch: boolean
14
+ isActive: boolean
15
+ type: string
16
+ }
17
+ required?: boolean
18
+ onChange?: (value: any) => void
19
+ allowAll?: boolean
20
+ error?: boolean
21
+ helperText?: string
22
+ api?: string
23
+ } & SelectProps
24
+ const MultiFacultySelector = (props: MultiFacultySelectorProps) => {
25
+ const {
26
+ control,
27
+ onChange,
28
+ name,
29
+ required = false,
30
+ label,
31
+ multiple = true,
32
+ filters,
33
+ value,
34
+ allowAll = true,
35
+ api = '/hrms/employees',
36
+ } = props
37
+ const [options, setOptions] = useState([])
38
+ const [prevDepartmentId, setPrevDepartmentId] = useState(null)
39
+ const handleOpen = () => {
40
+ if (filters) {
41
+ if (filters.departmentId && filters.departmentId !== prevDepartmentId) {
42
+ setOptions([])
43
+ axios
44
+ .get(api, {
45
+ params: filters,
46
+ })
47
+ .then((response) => {
48
+ setOptions(response.data.data)
49
+ setPrevDepartmentId(filters.departmentId)
50
+ })
51
+ .catch((error) => {
52
+ console.error('Error fetching data from the API:', error)
53
+ })
54
+ }
55
+ } else if (options.length === 0) {
56
+ axios
57
+ .get(api)
58
+ .then((response) => {
59
+ setOptions(response.data.data)
60
+ })
61
+ .catch((error) => {
62
+ console.error('Error fetching data from the API:', error)
63
+ })
64
+ }
65
+ }
66
+ useEffect(() => {
67
+ if (props?.value && props.value != 'all') {
68
+ handleOpen()
69
+ }
70
+ }, [props.value])
71
+
72
+ const handleOptions =
73
+ options.length > 0
74
+ ? [
75
+ ...(allowAll ? [{ value: 'all', label: 'All' }] : []),
76
+ ...options.map((item) => ({
77
+ label: `${item.fullName}`,
78
+ value: `${item._id}`,
79
+ })),
80
+ ]
81
+ : allowAll
82
+ ? [{ value: 'all', label: 'All' }]
83
+ : []
84
+
85
+ return (
86
+ <Controller
87
+ name={name}
88
+ control={control}
89
+ render={({ field, fieldState: { error } }) => (
90
+ <MultiSelect
91
+ name={name}
92
+ label={label}
93
+ required={required}
94
+ options={handleOptions}
95
+ onOpen={handleOpen}
96
+ onChange={onChange ?? field.onChange}
97
+ value={value ?? field?.value}
98
+ error={!!error}
99
+ helperText={error?.message}
100
+ multiple={multiple}
101
+ />
102
+ )}
103
+ />
104
+ )
105
+ }
106
+ export default MultiFacultySelector
@@ -13,6 +13,7 @@ type ProgramSelectorProps = {
13
13
  error?: boolean
14
14
  helperText?: string
15
15
  api?: string
16
+ valueByBranchCode?: boolean
16
17
  } & SelectProps
17
18
  const ProgramSelector = (props: ProgramSelectorProps) => {
18
19
  const {
@@ -22,7 +23,8 @@ const ProgramSelector = (props: ProgramSelectorProps) => {
22
23
  multiple = false,
23
24
  filters,
24
25
  allowAll = true,
25
- api = '/square/branches',
26
+ valueByBranchCode = false,
27
+ api = '/paymentx/domain/programs',
26
28
  } = props
27
29
  const [options, setOptions] = useState([])
28
30
  const [prevCourseId, setPrevCourseId] = useState(null)
@@ -65,7 +67,7 @@ const ProgramSelector = (props: ProgramSelectorProps) => {
65
67
  ...(allowAll ? [{ value: 'all', label: 'All' }] : []),
66
68
  ...options.map((item) => ({
67
69
  label: `${item.branchName}`,
68
- value: `${item.id}`,
70
+ value: !valueByBranchCode ? `${item.id}` : `${item.branchCode}`,
69
71
  })),
70
72
  ]
71
73
  : allowAll
@@ -1,10 +1,17 @@
1
+ import ClassRoomSelector from './ClassRoomSelector'
1
2
  import CourseSelector from './CourseSelector'
3
+ import DepartmentSelector from './DepartmentSelector'
4
+ import FacultySelector from './FacultySelector'
2
5
  import FeeTypeSelector from './FeeTypeSelector'
6
+ import FormClassRoomSelector from './FormSelectors/FormClassRoomSelector'
3
7
  import FormCourseSelector from './FormSelectors/FormCourseSelector'
8
+ import FormDepartmentSelector from './FormSelectors/FormDepartmentSelector'
9
+ import FormFacultySelector from './FormSelectors/FormFacultySelector'
4
10
  import FormFeeTypeSelector from './FormSelectors/FormFeeTypeSelector'
5
11
  import FormProgramSelector from './FormSelectors/FormProgramSelector'
6
12
  import FormQuotaSelector from './FormSelectors/FormQuotaSelector'
7
13
  import FormSemseterSelector from './FormSelectors/FormSemesterSelector'
14
+ import MultiFacultySelector from './FormSelectors/MultiSelect/MultiFacultySelector'
8
15
  import MultiFeeTypeSelector from './FormSelectors/MultiSelect/MultiFeeTypeSelector'
9
16
  import MultiProgramSelector from './FormSelectors/MultiSelect/MultiProgramSelector'
10
17
  import MultiQuotaSelector from './FormSelectors/MultiSelect/MultiQuotaSelector'
@@ -13,13 +20,20 @@ import QuotaSelector from './QuotaSelector'
13
20
  import SemesterSelector from './SemesterSelector'
14
21
 
15
22
  export {
23
+ ClassRoomSelector,
16
24
  CourseSelector,
25
+ DepartmentSelector,
26
+ FacultySelector,
17
27
  FeeTypeSelector,
28
+ FormClassRoomSelector,
18
29
  FormCourseSelector,
30
+ FormDepartmentSelector,
31
+ FormFacultySelector,
19
32
  FormFeeTypeSelector,
20
33
  FormProgramSelector,
21
34
  FormQuotaSelector,
22
35
  FormSemseterSelector,
36
+ MultiFacultySelector,
23
37
  MultiFeeTypeSelector,
24
38
  MultiProgramSelector,
25
39
  MultiQuotaSelector,
@@ -0,0 +1,356 @@
1
+ import { Store } from "pullstate";
2
+
3
+ export enum Permission {
4
+ VIEW_AUDIT_LOGS = "can_view_audit_logs",
5
+ STUDENTS_VIEW = "can_students_view",
6
+ ADMISSIONS_VIEW = "can_admissions_view",
7
+ USERS_VIEW = "can_users_view",
8
+ SUBJECTS_VIEW = "can_subjects_view",
9
+ COURSE_REGISTRATION_VIEW = "can_course_registration_view",
10
+ END_SEMESTER_EXAMINATIONS_VIEW = "can_end_semester_examinations_view",
11
+ INTERNAL_EXAMINATIONS_VIEW = "can_internal_examinations_view",
12
+ VIEW_ANSWER_SHEET_REPORT = "can_view_answer_sheet_report",
13
+ SEATING_PLAN = "can_examinations_seating_plan",
14
+ VIEW_REPORTS = "can_results_processing_view_reports",
15
+ CAN_ADD_FEED = "can_feed_add",
16
+ MARKS_DIVISION = "can_examinations_manage_marks_division",
17
+
18
+ //classroom
19
+
20
+ CLASSROOM_VIEW = "can_classroom_view",
21
+ CLASSROOM_EDIT = "can_classroom_edit",
22
+ CLASSROOM_DELETE = "can_classroom_delete",
23
+ CLASSROOM_ADD = "can_classroom_add",
24
+
25
+ // Tasks
26
+
27
+ CAN_TASKS_ADD = "can_tasks_add",
28
+ CAN_TASKS_DELETE = "can_tasks_delete",
29
+ CAN_TASKS_EDIT = "can_tasks_edit",
30
+ CAN_TASKS_VIEW = "can_tasks_view",
31
+ CAN_TASKS_CHANGE_STATUS = "can_tasks_change_status",
32
+ CAN_REVOKE_MARKS = "can_classroom_revoke_marks",
33
+
34
+ // Academic Calendar
35
+
36
+ ACADEMIC_CALENDAR_VIEW = "can_academic_calendar_view",
37
+ ACADEMIC_CALENDAR_EVENT_ADD = "can_academic_calendar_event_add",
38
+ ACADEMIC_CALENDAR_EVENT_EDIT = "can_academic_calendar_event_edit",
39
+ ACADEMIC_CALENDAR_EVENT_DELETE = "can_academic_calendar_event_delete",
40
+
41
+ //Designations
42
+ DESIGNATIONS_ADD = "can_designations_add",
43
+ DESIGNATIONS_DELETE = "can_designations_delete",
44
+ DESIGNATIONS_EDIT = "can_designations_edit",
45
+ DESIGNATIONS_VIEW = "can_designations_view",
46
+
47
+ //bundling
48
+
49
+ BUNDLING_VIEW = "can_bundling_view",
50
+ BUNDLING_ADD = "can_bundling_add",
51
+ BUNDLING_EDIT = "can_bundling_edit",
52
+ BUNDLING_DELETE = "can_bundling_delete",
53
+
54
+ // manage
55
+ MANAGE_ROLES_AND_PROFILES = "can_manage_roles_and_profiles",
56
+
57
+ MANAGE_USER_GROUPS = "can_manage_user_groups",
58
+ MANAGE_ASSESSMENTS = "can_manage_assessments",
59
+ USERS_ADD = "can_users_add",
60
+ USERS_EDIT = "can_users_edit",
61
+ USERS_DELETE = "can_users_delete",
62
+ USERS_REORDER = "can_users_reorder",
63
+ USERS_UPLOAD_PHOTOS = "can_user_upload_photos",
64
+ USERS_EXPORT = "can_users_export",
65
+ ADMISSIONS_ADD = "can_admissions_add",
66
+ ADMISSIONS_EDIT = "can_admissions_edit",
67
+ ADMISSIONS_DELETE = "can_admissions_delete",
68
+ ADMISSIONS_CHANGE_STATUS = "can_admissions_change_status",
69
+ ADMISSIONS_IMPORT = "can_admissions_import",
70
+ ADMISSIONS_EXPORT = "can_admissions_export",
71
+ ADMISSIONS_CONFIRM = "can_admissions_confirm",
72
+ STUDENTS_ADD = "can_students_add",
73
+ STUDENTS_EDIT = "can_students_edit",
74
+ STUDENTS_DELETE = "can_students_delete",
75
+ STUDENTS_DETAIN = "can_students_detain",
76
+ STUDENTS_IMPORT = "can_students_import",
77
+ STUDENTS_EXPORT = "can_students_export",
78
+ STUDENTS_RESULTS = "can_students_results",
79
+ STUDENTS_UPLOAD_PHOTOS = "can_students_upload_photos",
80
+ STUDENTS_TRANSFER = "can_students_transfer",
81
+ STUDENTS_ALLOTMENT = "can_students_allotment",
82
+ SUBJECTS_ADD = "can_subjects_add",
83
+ SUBJECTS_EDIT = "can_subjects_edit",
84
+ SUBJECTS_DELETE = "can_subjects_delete",
85
+ SUBJECTS_EDIT_SUBJECT_INFO = "can_subjects_edit_subject_info",
86
+ COURSE_REGISTRATION_ADD = "can_course_registration_add",
87
+ COURSE_REGISTRATION_EDIT = "can_course_registration_edit",
88
+ COURSE_REGISTRATION_DELETE = "can_course_registration_delete",
89
+ END_SEMESTER_EXAMINATIONS_ADD = "can_end_semester_examinations_add",
90
+ END_SEMESTER_EXAMINATIONS_EDIT = "can_end_semester_examinations_edit",
91
+ END_SEMESTER_EXAMINATIONS_NOTIFICATION = "can_end_semester_examinations_notification",
92
+ END_SEMESTER_EXAMINATIONS_DELETE = "can_end_semester_examinations_delete",
93
+ END_SEMESTER_EXAMINATIONS_SEATING_PLAN = "can_end_semester_examinations_seating_plan",
94
+ END_SEMESTER_EXAMINATIONS_MANAGE_EXAM_FEE = "can_end_semester_examinations_manage_exam_fee",
95
+ END_SEMESTER_EXAMINATIONS_D_FORMS = "can_end_semester_examinations_d_forms",
96
+ END_SEMESTER_EXAMINATIONS_BUNDLING = "can_end_semester_examinations_bundling",
97
+ END_SEMESTER_EXAMINATIONS_MARKS_ENTRY = "can_end_semester_examinations_marks_entry",
98
+ END_SEMESTER_EXAMINATIONS_INVIGILATIONS = "can_end_semester_examinations_invigilations",
99
+ INTERNAL_EXAMINATIONS_ADD = "can_internal_examinations_add",
100
+ INTERNAL_EXAMINATIONS_EDIT = "can_internal_examinations_edit",
101
+ INTERNAL_EXAMINATIONS_DELETE = "can_internal_examinations_delete",
102
+ INTERNAL_EXAMINATIONS_MANAGE_EXAM_FEE = "can_internal_examinations_manage_exam_fee",
103
+ INTERNAL_EXAMINATIONS_MANAGE_HALLTICKETS = "can_internal_examinations_manage_halltickets",
104
+ INTERNAL_EXAMINATIONS_SEATING_PLAN = "can_internal_examinations_seating_plan",
105
+ INTERNAL_EXAMINATIONS_INVIGILATIONS = "can_internal_examinations_invigilations",
106
+ EXTRA_CURRICULAR_ACTIVITIES_NEWS_FEED = "can_extra_curricular_activities_news_feed",
107
+ EXTRA_CURRICULAR_ACTIVITIES_CLUBS = "can_extra_curricular_activities_clubs",
108
+ EXTRA_CURRICULAR_ACTIVITIES_EVENTS = "can_extra_curricular_activities_events",
109
+ EDIT_ANSWER_SHEET_MARKS = "can_edit_answer_sheet_marks",
110
+ EDIT_EXTERNAL_MARKS = "can_edit_external_marks",
111
+ EXAM_COLLATERALS = "can_exam_collaterals",
112
+ REVALUTION = "can_revaluation",
113
+ EDIT_INTERNAL_MARKS = "can_edit_internal_marks",
114
+ PROCESS_RESULTS = "can_process_results",
115
+ CAN_PROGRAMS_ADD = "can_programs_add",
116
+ CAN_PROGRAMS_DELETE = "can_programs_delete",
117
+ CAN_PROGRAMS_EDIT = "can_programs_edit",
118
+ CAN_PROGRAMS_VIEW = "can_programs_view",
119
+ CAN_DEGRESS_ADD = "can_degrees_add",
120
+ CAN_DEGRESS_DELETE = "can_degrees_delete",
121
+ CAN_DEGRESS_EDIT = "can_degrees_edit",
122
+ CAN_SETTINGS_VIEW = "can_settings_view",
123
+ CAN_DASHBOARD_VIEW = "can_dashboard_view",
124
+ CAN_DEGRESS_VIEW = "can_degrees_view",
125
+ CAN_SEMESTERS_ADD = "can_semesters_add",
126
+ CAN_SEMESTERS_DELETE = "can_semesters_delete",
127
+ CAN_SEMESTERS_EDIT = "can_semesters_edit",
128
+ CAN_SEMESTERS_VIEW = "can_semesters_view",
129
+ CAN_CURRICULUMS_ADD = "can_curriculums_add",
130
+ CAN_CURRICULUMS_DELETE = "can_curriculums_delete",
131
+ CAN_CURRICULUMS_EDIT = "can_curriculums_edit",
132
+ CAN_CURRICULUMS_VIEW = "can_curriculums_view",
133
+ CAN_ASSESSMENT_RULES_ADD = "can_assessment_rules_add",
134
+ CAN_ASSESSMENT_RULES_DELETE = "can_assessment_rules_delete",
135
+ CAN_ASSESSMENT_RULES_EDIT = "can_assessment_rules_edit",
136
+ CAN_ASSESSMENT_RULES_VIEW = "can_assessment_rules_view",
137
+ CAN_RESULTS_PROCESSING_GENERATE_MEMOS = "can_results_processing_generate_memos",
138
+ CAN_RESULTS_PROCESSING_MODERATION_AND_GRAFTING = "can_results_processing_moderation_and_grafting",
139
+ CAN_RESULTS_PROCESSING_PUBLISH_RESULTS = "can_results_processing_publish_results",
140
+ CAN_RESULTS_PROCESSING_UPDATE_INTERNAL_MARKS = "can_results_processing_update_internal_marks",
141
+ CAN_RESULTS_PROCESSING_VIEW = "can_results_processing_view",
142
+
143
+ //newly added permissions
144
+
145
+ CAN_PHD_FORM_VIEW = "can_admissions_view_phd_applications",
146
+ CAN_PHD_FORM_DOWNLOAD = "can_admissions_download_phd_applications",
147
+ CAN_CET_VIEW = "can_admissions_view_cet",
148
+ CAN_CET_DOWNLOAD = "can_admissions_download_cet",
149
+ CAN_HOSTELER_DASHBOARD_VIEW = "can_hosteler_dashboard_view",
150
+ CAN_HOSTELER_VIEW = "can_hosteler_view",
151
+ CAN_HOSTELER_ADD = "can_hosteler_add",
152
+ CAN_HOSTELER_EDIT = "can_hosteler_edit",
153
+ CAN_HOSTELER_CHANGE_STATUS = "can_hosteler_change_status",
154
+ CAN_HOSTELER_FACE_DATA_RESET = "can_hosteler_face_data_reset",
155
+ CAN_HOSTELER_FEE_PAYMENT_VIEW = "can_hosteler_fee_payments_view",
156
+ CAN_HOSTELER_REPORTS_VIEW = "can_hosteler_reports_view",
157
+ CAN_HOSTELER_SETTINGS_VIEW_CONFIGURATION = "can_hosteler_settings_view_configuration",
158
+ CAN_HOSTELER_SETTINGS_EDIT_CONFIGURATION = "can_hosteler_settings_edit_configuration",
159
+ CAN_HOSTELER_SETTINGS_ADD_FEE_TYPES = "can_hosteler_settings_add_fee_types",
160
+ CAN_HOSTELER_SETTINGS_VIEW_FEE_TYPES = "can_hosteler_settings_view_fee_types",
161
+ CAN_HOSTELER_SETTINGS_EDIT_FEE_TYPES = "can_hosteler_settings_edit_fee_types",
162
+ CAN_HOSTELER_SETTINGS_DELETE_FEE_TYPES = "can_hosteler_settings_delete_fee_types",
163
+ CAN_HOSTELERS_SETTINGS_BLOCK_VIEW = "can_hosteler_settings_blocks_view",
164
+ CAN_HOSTELERS_SETTINGS_BLOCK_ADD = "can_hosteler_settings_blocks_add",
165
+ CAN_HOSTELERS_SETTINGS_BLOCK_EDIT = "can_hosteler_settings_blocks_edit",
166
+ CAN_HOSTELERS_SETTINGS_BLOCK_DELETE = "can_hosteler_settings_blocks_delete",
167
+ CAN_HOSTELERS_SETTINGS_ROOMS_VIEW = "can_hosteler_settings_rooms_view",
168
+ CAN_HOSTELERS_SETTINGS_ROOMS_ADD = "can_hosteler_settings_rooms_add",
169
+ CAN_HOSTELERS_SETTINGS_ROOMS_EDIT = "can_hosteler_settings_rooms_edit",
170
+ CAN_HOSTELERS_SETTINGS_ROOMS_DELETE = "can_hosteler_settings_rooms_delete",
171
+ CAN_HOSTELERS_SETTINGS_ROOMS_IMPORT = "can_hosteler_settings_import_hostel_rooms",
172
+ CAN_HOSTELERS_SETTINGS_AMENITIES_VIEW = "can_hosteler_settings_amenities_view",
173
+ CAN_HOSTELERS_SETTINGS_AMENITIES_ADD = "can_hosteler_settings_amenities_add",
174
+ CAN_HOSTELERS_SETTINGS_AMENITIES_EDIT = "can_hosteler_settings_amenities_edit",
175
+ CAN_HOSTELERS_SETTINGS_AMENITIES_DELETE = "can_hosteler_settings_amenities_delete",
176
+ CAN_ADMISSIONS_DASHBOARD_VIEW = "can_admission_dashboard_view",
177
+ CAN_LEAD_STATUS_VIEW = "can_lead_status_view",
178
+ CAN_LEAD_STATUS_EDIT = "can_lead_status_edit",
179
+ CAN_LEAD_STATUS_ADD = "can_lead_status_add",
180
+ CAN_LEAD_STATUS_DELETE = "can_lead_status_delete",
181
+ SCHOOLS_VIEW = "can_schools_view",
182
+ SCHOOLS_ADD = "can_schools_add",
183
+ SCHOOLS_EDIT = "can_schools_edit",
184
+ SCHOOLS_DELETE = "can_schools_delete",
185
+ SUBJECT_TYPE_VIEW = "can_subject_types_view",
186
+ SUBJECT_TYPE_ADD = "can_subject_types_add",
187
+ SUBJECT_TYPE_EDIT = "can_subject_types_edit",
188
+ SUBJECT_TYPE_DELETE = "can_subject_types_delete",
189
+ ASSESSMENT_TYPE_VIEW = "can_assessment_types_view",
190
+ ASSESSMENT_TYPE_ADD = "can_assessment_types_add",
191
+ ASSESSMENT_TYPE_EDIT = "can_assessment_types_edit",
192
+ ASSESSMENT_TYPE_DELETE = "can_assessment_types_delete",
193
+ CLASSROOM_REPORTS = "can_classroom_reports",
194
+ CLASSROOM_REASSIGN_FACULTY = "can_classroom_re_assign_faculty",
195
+ CAN_INDIVIDUAL_PAGES_VIEW = "can_individual_pages_view",
196
+
197
+ // Exams
198
+
199
+ // OMRS
200
+ CAN_OMRS_VIEW = "can_omrs_view",
201
+ CAN_OMRS_UPDATE = "can_omrs_update",
202
+ CAN_OMRS_DOWNLOAD = "can_omrs_download",
203
+
204
+ // Hall tickets
205
+ CAN_HALL_TICKETS_VIEW = "can_hall_tickets_view",
206
+ CAN_HALL_TICKETS_DOWNLOAD = "can_hall_tickets_download",
207
+
208
+ // Paper Configuration
209
+ CAN_PAPER_CONFIGURATION_VIEW = "can_paper_configuration_view",
210
+ CAN_PAPER_CONFIGURATION_ADD = "can_paper_configuration_add",
211
+ CAN_PAPER_CONFIGURATION_EDIT = "can_paper_configuration_edit",
212
+ CAN_PAPER_CONFIGURATION_DELETE = "can_paper_configuration_delete",
213
+ CAN_PAPER_CONFIGURATION_UPLOAD = "can_paper_configuration_upload",
214
+ CAN_PAPER_CONFIGURATION_DOWNLOAD = "can_paper_configuration_download",
215
+
216
+ // Time table
217
+ CAN_EXAM_TIMETABLE_VIEW = "can_exam_timetable_view",
218
+ CAN_EXAM_TIMETABLE_ADD = "can_exam_timetable_add",
219
+ CAN_EXAM_TIMETABLE_EDIT = "can_exam_timetable_edit",
220
+ CAN_EXAM_TIMETABLE_DELETE = "can_exam_timetable_delete",
221
+
222
+ // Registrations
223
+ CAN_REGISTARTIONS_VIEW = "can_exam_registrations_view",
224
+ CAN_REGISTARTIONS_ADD = "can_exam_registrations_add",
225
+ CAN_REGISTARTIONS_CHALAN_UPLOAD = "can_exam_registrations_chalan_upload",
226
+ CAN_REGISTARTIONS_SUBMIT = "can_exam_registrations_submit",
227
+
228
+ // Internal Marks
229
+ CAN_INTERNAL_MARKS_VIEW = "can_internal_marks_view",
230
+ CAN_INTERNAL_MARKS_ADD = "can_internal_marks_add",
231
+ CAN_INTERNAL_MARKS_EDIT = "can_internal_marks_edit",
232
+
233
+ // External Marks
234
+ CAN_EXTERNAL_MARKS_VIEW = "can_external_marks_view",
235
+ CAN_EXTERNAL_MARKS_ADD = "can_external_marks_add",
236
+ CAN_EXTERNAL_MARKS_EDIT = "can_external_marks_edit",
237
+
238
+ // D Form
239
+ CAN_D_FORM_VIEW = "can_d_forms_view",
240
+ CAN_D_FORM_ADD = "can_d_forms_add",
241
+ CAN_D_FORM_DOWNLOAD = "can_d_forms_download",
242
+
243
+ // Evaluators
244
+ CAN_EVALUATORS_VIEW = "can_evaluators_view",
245
+ CAN_EVALUATORS_ADD = "can_evaluators_add",
246
+ CAN_EVALUATORS_EDIT = "can_evaluators_edi",
247
+ CAN_EVALUATORS_DELETE = "can_evaluators_delete",
248
+
249
+ // Rooms
250
+ CAN_EXAM_ROOM_VIEW = "can_exam_rooms_view",
251
+ CAN_EXAM_ROOM_ADD = "can_exam_rooms_add",
252
+ CAN_EXAM_ROOM_EDIT = "can_exam_rooms_edit",
253
+ CAN_EXAM_ROOM_DELETE = "can_exam_rooms_delete",
254
+
255
+ // Time slots
256
+ CAN_TIME_SLOTS_VIEW = "can_time_slots_view",
257
+ CAN_TIME_SLOTS_ADD = "can_time_slots_add",
258
+ CAN_TIME_SLOTS_EDIT = "can_time_slots_edit",
259
+ CAN_TIME_SLOTS_DELETE = "can_time_slots_delete",
260
+ }
261
+
262
+ export interface IPermissions {
263
+ // view
264
+ can_view_audit_logs: boolean;
265
+ can_students_view: boolean;
266
+ can_admissions_view: boolean;
267
+ can_users_view: boolean;
268
+ can_subjects_view: boolean;
269
+ can_course_registration_view: boolean;
270
+ can_end_semester_examinations_view: boolean;
271
+ can_internal_examinations_view: boolean;
272
+ can_view_answer_sheet_report: boolean;
273
+ can_feed_add: boolean;
274
+ can_classroom_view: boolean;
275
+ can_classroom_edit: boolean;
276
+ can_classroom_delete: boolean;
277
+ can_classroom_add: boolean;
278
+ can_tasks_view: boolean;
279
+ can_classroom_revoke_marks: boolean;
280
+ // manage
281
+ can_manage_roles_and_profiles: boolean;
282
+ can_manage_user_groups: boolean;
283
+ can_manage_programs: boolean;
284
+ can_manage_courses: boolean;
285
+ can_manage_semesters: boolean;
286
+ can_manage_curriculums: boolean;
287
+ can_manage_assessments: boolean;
288
+ can_users_add: boolean;
289
+ can_users_edit: boolean;
290
+ can_users_delete: boolean;
291
+ can_users_reorder: boolean;
292
+ can_admissions_add: boolean;
293
+ can_admissions_edit: boolean;
294
+ can_admissions_delete: boolean;
295
+ can_admissions_change_status: boolean;
296
+ can_admissions_import: boolean;
297
+ can_admissions_export: boolean;
298
+ can_admissions_confirm: boolean;
299
+ can_students_add: boolean;
300
+ can_students_edit: boolean;
301
+ can_students_delete: boolean;
302
+ can_students_detain: boolean;
303
+ can_students_import: boolean;
304
+ can_students_export: boolean;
305
+ can_students_results: boolean;
306
+ can_students_upload_photos: boolean;
307
+ can_students_transfer: boolean;
308
+ can_students_allotment: boolean;
309
+ can_subjects_add: boolean;
310
+ can_subjects_edit: boolean;
311
+ can_subjects_delete: boolean;
312
+ can_subjects_edit_subject_info: boolean;
313
+ can_course_registration_add: boolean;
314
+ can_course_registration_edit: boolean;
315
+ can_course_registration_delete: boolean;
316
+ can_end_semester_examinations_add: boolean;
317
+ can_end_semester_examinations_edit: boolean;
318
+ can_end_semester_examinations_delete: boolean;
319
+ can_end_semester_examinations_seating_plan: boolean;
320
+ can_end_semester_examinations_manage_exam_fee: boolean;
321
+ can_end_semester_examinations_d_forms: boolean;
322
+ can_end_semester_examinations_bundling: boolean;
323
+ can_end_semester_examinations_marks_entry: boolean;
324
+ can_end_semester_examinations_invigilations: boolean;
325
+ can_examinations_seating_plan: boolean;
326
+ can_internal_examinations_add: boolean;
327
+ can_internal_examinations_edit: boolean;
328
+ can_internal_examinations_delete: boolean;
329
+ can_internal_examinations_manage_exam_fee: boolean;
330
+ can_internal_examinations_manage_halltickets: boolean;
331
+ can_internal_examinations_seating_plan: boolean;
332
+ can_internal_examinations_invigilations: boolean;
333
+ can_extra_curricular_activities_news_feed: boolean;
334
+ can_extra_curricular_activities_clubs: boolean;
335
+ can_extra_curricular_activities_events: boolean;
336
+ can_edit_answer_sheet_marks: boolean;
337
+ can_edit_external_marks: boolean;
338
+ can_exam_collaterals: boolean;
339
+ can_revalution: boolean;
340
+ can_edit_internal_marks: boolean;
341
+ can_process_results: boolean;
342
+ can_generate_memos: boolean;
343
+ can_individual_pages_view: boolean;
344
+ can_tasks_add: boolean;
345
+ can_tasks_edit: boolean;
346
+ can_tasks_change_status: boolean;
347
+ can_tasks_delete: boolean;
348
+ }
349
+
350
+ interface IPermissionsStore {
351
+ permissions: IPermissions;
352
+ }
353
+
354
+ export const PermissionsStore = new Store<IPermissionsStore>({
355
+ permissions: null,
356
+ });
@@ -1064,15 +1064,19 @@ export enum Permission {
1064
1064
  CAN_MANAGE_EXAMS_PROFILE_PERMISSIONS_EDIT = 'can_manage_exams_profile_permissions_edit',
1065
1065
  CAN_MANAGE_EXAMS_PROFILE_PERMISSIONS_DELETE = 'can_manage_exams_profile_permissions_delete',
1066
1066
 
1067
+
1067
1068
  // End Semester Examination
1068
1069
  CAN_END_SEMESTER_EXAMINATIONS_VIEW = 'can_end_semester_examinations_view',
1069
1070
  CAN_END_SEMESTER_EXAMINATIONS_ADD = 'can_end_semester_examinations_add',
1070
1071
  CAN_END_SEMESTER_EXAMINATIONS_EDIT = 'can_end_semester_examinations_edit',
1071
1072
  CAN_END_SEMESTER_EXAMINATIONS_DELETE = 'can_end_semester_examinations_delete',
1073
+ CAN_END_SEMESTER_EXAMINATIONS_NOTIFICATION_DETAILS_VIEW = "can_end_semester_examinations_notification_details_view",
1072
1074
 
1073
1075
  // Registrations
1074
1076
  CAN_EXAM_REGISTARTIONS_VIEW = 'can_exam_registrations_view',
1075
1077
  CAN_EXAM_REGISTARTIONS_ADD = 'can_exam_registrations_add',
1078
+ CAN_EXAM_REGISTARTIONS_CHALLAN_UPLOAD = "can_exam_registrations_challan_upload",
1079
+ CAN_EXAM_REGISTARTIONS_SUBMIT = "can_exam_registrations_submit",
1076
1080
 
1077
1081
  // Fee configuration
1078
1082
  EXAM_FEE_CONFIGURATION_VIEW = 'can_exam_fee_configuration_view',
@@ -1086,21 +1090,25 @@ export enum Permission {
1086
1090
 
1087
1091
  // Hall tickets
1088
1092
  CAN_HALL_TICKETS_VIEW = 'can_hall_tickets_view',
1093
+ CAN_HALL_TICKETS_DOWNLOAD = "can_hall_tickets_download",
1089
1094
 
1090
1095
  // OMRS
1091
1096
  CAN_OMRS_VIEW = 'can_omrs_view',
1092
1097
  CAN_OMRS_UPDATE = 'can_omrs_update',
1093
1098
  CAN_OMRS_GENERATE = 'can_omrs_generate',
1099
+ CAN_OMRS_DOWNLOAD = "can_omrs_download",
1094
1100
 
1095
1101
  // Paper Configuration
1096
1102
  CAN_PAPER_CONFIGURATION_VIEW = 'can_paper_configuration_view',
1097
1103
  CAN_PAPER_CONFIGURATION_ADD = 'can_paper_configuration_add',
1098
1104
  CAN_PAPER_CONFIGURATION_EDIT = 'can_paper_configuration_edit',
1099
1105
  CAN_PAPER_CONFIGURATION_DELETE = 'can_paper_configuration_delete',
1106
+ CAN_PAPER_CONFIGURATION_DOWNLOAD = "can_paper_configuration_download",
1100
1107
 
1101
1108
  // D Form
1102
1109
  CAN_D_FORM_VIEW = 'can_d_forms_view',
1103
1110
  CAN_D_FORM_ADD = 'can_d_forms_add',
1111
+ CAN_D_FORM_DOWNLOAD = "can_d_forms_download",
1104
1112
 
1105
1113
  // Bundling
1106
1114
  CAN_VIEW_ANSWER_SHEET_REPORT = 'can_view_answer_sheet_report',