Blame view

src/pages/Attendence/studentAttendence.vue 14 KB
687e0b929   Neeraj Sharma   add user,attenden...
1
  <template>
68d742034   Neeraj Sharma   implement new des...
2
    <v-container fluid class="body-color">
687e0b929   Neeraj Sharma   add user,attenden...
3
4
5
6
7
8
9
10
      <v-snackbar
        :timeout="timeout"
        :top="y === 'top'"
        :right="x === 'right'"
        :vertical="mode === 'vertical'"
        v-model="snackbar"
        color="success"
      >{{ text }}</v-snackbar>
68d742034   Neeraj Sharma   implement new des...
11
12
      <!-- ****** ATTENDENCE STUDENTS TABLE ****** -->
      <!-- <download-csv :data="json_data">
6ae46ca27   Neeraj Sharma   implement upload ...
13
              <v-btn>Download Data</v-btn>
68d742034   Neeraj Sharma   implement new des...
14
15
      </download-csv>-->
      <v-toolbar color="transparent" flat>
710438de6   Shikha Mishra   added teacher mod...
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
        <v-btn
          fab
          dark
          class="open-dialog-button hidden-xl-only hidden-md-only hidden-lg-only"
          small
          @click="addStudentAttendenceDialog = true"
        >
          <v-icon dark>add</v-icon>
        </v-btn>
        <v-btn
          v-if="role != 'ADMIN' && schoolRole != 'SCHOOLADMIN' "
          round
          class="open-dialog-button hidden-sm-only hidden-xs-only"
          dark
          @click="addStudentAttendenceDialog = true"
        >
          <v-icon class="white--text pr-1" size="20">add</v-icon>Add Student Attendence
        </v-btn>
68d742034   Neeraj Sharma   implement new des...
34
35
36
37
38
39
        <v-spacer></v-spacer>
        <v-flex xs12 sm4 md2>
          <v-select
            small
            :items="addclass"
            label="Select Class"
710438de6   Shikha Mishra   added teacher mod...
40
            v-model="getReport.classId"
68d742034   Neeraj Sharma   implement new des...
41
42
43
            item-text="classNum"
            item-value="_id"
            name="Select Class"
710438de6   Shikha Mishra   added teacher mod...
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
            @change="getSection(getReport.classId)"
            class="px-2"
            required
          ></v-select>
        </v-flex>
        <v-flex xs12 sm4 md2>
          <v-select
            small
            :items="addSection"
            label="Select Section"
            v-model="getReport.sectionId"
            item-text="name"
            item-value="_id"
            name="Select Section"
            @change="getStudents(getReport.sectionId)"
68d742034   Neeraj Sharma   implement new des...
59
60
61
62
63
64
65
            class="px-2"
            required
          ></v-select>
        </v-flex>
        <v-card-title class="body-1" v-show="show">
          <v-btn icon large flat @click="displaySearch">
            <v-avatar size="27">
aa310d61a   Shikha Mishra   added functionali...
66
              <img src="/static/icon/search.png" alt="icon" />
68d742034   Neeraj Sharma   implement new des...
67
68
69
70
71
72
73
            </v-avatar>
          </v-btn>
        </v-card-title>
        <v-flex xs8 sm8 md3 lg2 v-show="showSearch">
          <v-layout>
            <v-text-field v-model="search" label="Search" prepend-inner-icon="search" color="primary"></v-text-field>
            <v-icon @click="closeSearch" color="error">close</v-icon>
687e0b929   Neeraj Sharma   add user,attenden...
74
          </v-layout>
68d742034   Neeraj Sharma   implement new des...
75
76
        </v-flex>
      </v-toolbar>
687e0b929   Neeraj Sharma   add user,attenden...
77
78
      <v-data-table
        :headers="headers"
710438de6   Shikha Mishra   added teacher mod...
79
        :items="studentsData"
687e0b929   Neeraj Sharma   add user,attenden...
80
81
82
83
        :pagination.sync="pagination"
        :search="search"
      >
        <template slot="items" slot-scope="props">
68d742034   Neeraj Sharma   implement new des...
84
85
86
87
88
89
90
91
92
          <tr class="tr">
            <td class="td td-row">{{ props.index + 1}}</td>
            <td class="text-xs-center td td-row">
              <v-avatar size="40">
                <img :src="props.item.profilePicUrl" v-if="props.item.profilePicUrl" />
                <img src="/static/icon/user.png" v-else-if="!props.item.profilePicUrl" />
              </v-avatar>
            </td>
            <td class="text-xs-center td td-row">{{ props.item.name}}</td>
710438de6   Shikha Mishra   added teacher mod...
93
            <td class="text-xs-center td td-row">{{ props.item.fatherCellNo}}</td>
68d742034   Neeraj Sharma   implement new des...
94
95
            <td class="text-xs-center td td-row">{{ props.item.email }}</td>
            <td class="text-xs-center td td-row">
2fe1115d8   Shikha Mishra   added csv button ...
96
              <router-link :to="{ name:'View Students Attendence',params: { id:props.item._id } }">
68d742034   Neeraj Sharma   implement new des...
97
98
99
100
101
                <v-tooltip top>
                  <img
                    slot="activator"
                    style="cursor:pointer; width:20px; height:25px; "
                    class="mr-3"
aa310d61a   Shikha Mishra   added functionali...
102
                    src="/static/icon/view.png"
68d742034   Neeraj Sharma   implement new des...
103
                  />
67a276510   Shikha Mishra   fixed all bugs
104
                  <span>View</span>
68d742034   Neeraj Sharma   implement new des...
105
106
                </v-tooltip>
              </router-link>
68d742034   Neeraj Sharma   implement new des...
107
108
            </td>
          </tr>
687e0b929   Neeraj Sharma   add user,attenden...
109
110
111
112
113
114
115
116
        </template>
        <v-alert
          slot="no-results"
          :value="true"
          color="error"
          icon="warning"
        >Your search for "{{ search }}" found no results.</v-alert>
      </v-data-table>
710438de6   Shikha Mishra   added teacher mod...
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
      <!-- ****** Add Students Attendece****** -->
      <v-dialog v-model="addStudentAttendenceDialog" width="1600">
        <v-card flat class="pa-2">
          <v-layout>
            <v-flex xs12>
              <label class="title text-xs-center">Add Student Attendence</label>
              <v-icon size="24" class="right" @click="addStudentAttendenceDialog = false">cancel</v-icon>
            </v-flex>
          </v-layout>
          <v-flex xs12 class="mt-4">
            <v-form ref="form" v-model="valid" lazy-validation>
              <v-flex xs12 sm12 lg12>
                <v-layout wrap>
                  <v-flex xs6 sm6 lg3 md4>
                    <v-layout>
                      <v-flex xs3 sm6 lg2 class="subheading mt-4">
                        <label class="right">Class:</label>
                      </v-flex>
                      <v-flex xs9 sm6 lg8 class="ml-2">
                        <v-select
                          v-model="getReport.classId"
                          label="Select your class"
                          type="text"
                          :items="addclass"
                          item-text="classNum"
                          item-value="_id"
                          :rules="classRules"
                          @change="getSection(getReport.classId)"
                          required
                        ></v-select>
                      </v-flex>
                    </v-layout>
                  </v-flex>
                  <v-flex xs6 sm6 lg3 md8>
                    <v-layout>
                      <v-flex xs3 sm6 lg2 class="subheading mt-4">
                        <label class="right">Section:</label>
                      </v-flex>
                      <v-flex xs9 sm6 lg8 class="ml-2">
                        <v-select
                          :items="addSection"
                          label="Select your Section"
                          v-model="getReport.sectionId"
                          item-text="name"
                          item-value="_id"
                          name="Select Section"
                          :rules="sectionRules"
                          required
                        ></v-select>
                      </v-flex>
                    </v-layout>
                  </v-flex>
                  <v-flex xs6 sm6 lg3 md4>
                    <v-menu
                      ref="menu"
                      :close-on-content-click="false"
                      v-model="menu"
                      :nudge-right="40"
                      lazy
                      transition="scale-transition"
                      offset-y
                      full-width
                      min-width="290px"
                    >
                      <v-text-field
                        slot="activator"
                        v-model="date"
                        label="Select Date"
                        append-icon="event"
                        :rules="dataValid"
                        readonly
                      ></v-text-field>
                      <v-date-picker
                        ref="picker"
                        v-model="date"
                        :max="new Date().toISOString().substr(0, 10)"
                        min="1950-01-01"
                        @change="save"
                      ></v-date-picker>
                    </v-menu>
                  </v-flex>
                  <v-flex xs6 sm6 lg9 md8>
                    <v-btn round dark class="add-button" @click="showTable">Attendence</v-btn>
                  </v-flex>
                </v-layout>
              </v-flex>
            </v-form>
          </v-flex>
          <v-flex xs12 v-show="attendeceTable" class>
            <v-data-table
              :headers="headers"
              :items="studentsData"
              :pagination.sync="pagination"
              :search="search"
            >
              <template slot="items" slot-scope="props">
                <tr class="tr">
                  <td class="td td-row">{{ props.index + 1}}</td>
                  <td class="text-xs-center td td-row">
                    <v-avatar size="40">
                      <img :src="props.item.profilePicUrl" v-if="props.item.profilePicUrl" />
                      <img src="/static/icon/user.png" v-else-if="!props.item.profilePicUrl" />
                    </v-avatar>
                  </td>
                  <td class="text-xs-center td td-row">{{ props.item.name}}</td>
                  <td class="text-xs-center td td-row">{{ props.item.fatherCellNo }}</td>
                  <td class="text-xs-center td td-row">{{ props.item.email }}</td>
                  <td class="text-xs-center td td-row">
                    <v-radio-group v-model="props.item.attendence" :mandatory="false" row>
                      <v-radio
                        v-for="attendences in attendenceType"
                        :key="attendences.value"
                        :label="`${attendences.label}`"
                        :value="attendences.value"
                      ></v-radio>
                    </v-radio-group>
                  </td>
                </tr>
              </template>
            </v-data-table>
            <v-flex xs12>
              <v-card-actions>
                <v-spacer></v-spacer>
                <v-btn @click="update()" class="add-button" round dark>Submit</v-btn>
              </v-card-actions>
            </v-flex>
          </v-flex>
        </v-card>
      </v-dialog>
      <v-snackbar
        :timeout="timeout"
        :top="y === 'top'"
        :right="x === 'right'"
        :vertical="mode === 'vertical'"
        v-model="snackbar"
        color="success"
      >{{ text }}</v-snackbar>
687e0b929   Neeraj Sharma   add user,attenden...
254
255
256
      <div class="loader" v-if="showLoader">
        <v-progress-circular indeterminate color="white"></v-progress-circular>
      </div>
68d742034   Neeraj Sharma   implement new des...
257
    </v-container>
687e0b929   Neeraj Sharma   add user,attenden...
258
259
260
261
  </template>
  
  <script>
  import http from "@/Services/http.js";
687e0b929   Neeraj Sharma   add user,attenden...
262
263
264
265
266
267
268
269
270
271
  import moment from "moment";
  
  export default {
    data: () => ({
      snackbar: false,
      y: "top",
      x: "right",
      mode: "",
      timeout: 3000,
      text: "",
68d742034   Neeraj Sharma   implement new des...
272
273
      show: true,
      showSearch: false,
687e0b929   Neeraj Sharma   add user,attenden...
274
275
276
277
278
279
      showLoader: false,
      loading: false,
      date: null,
      search: "",
      addclass: [],
      pagination: {
68d742034   Neeraj Sharma   implement new des...
280
        rowsPerPage: 10
687e0b929   Neeraj Sharma   add user,attenden...
281
282
283
284
285
286
287
288
      },
      imageData: {},
      imageName: "",
      imageUrl: "",
      imageFile: "",
      headers: [
        {
          text: "No",
68d742034   Neeraj Sharma   implement new des...
289
          align: "",
687e0b929   Neeraj Sharma   add user,attenden...
290
291
292
293
294
295
296
297
298
299
          sortable: false,
          value: "index"
        },
        {
          text: "Profile Pic",
          value: "profilprofilePicUrlePicUrl",
          sortable: false,
          align: "center"
        },
        { text: "Name", value: "name", sortable: false, align: "center" },
710438de6   Shikha Mishra   added teacher mod...
300
301
302
303
304
305
        {
          text: "Mobile No",
          value: "fatherCellNo",
          sortable: false,
          align: "center"
        },
687e0b929   Neeraj Sharma   add user,attenden...
306
        { text: "Email", value: "email", sortable: false, align: "center" },
710438de6   Shikha Mishra   added teacher mod...
307
        { text: "Attendance", value: "", sortable: false, align: "center" }
687e0b929   Neeraj Sharma   add user,attenden...
308
      ],
6ae46ca27   Neeraj Sharma   implement upload ...
309
      // json_data: [],
687e0b929   Neeraj Sharma   add user,attenden...
310
311
312
313
314
      parentId: "",
      token: "",
      selectStudents: {
        select: "",
        selectSection: ""
710438de6   Shikha Mishra   added teacher mod...
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
      },
  
      role: "",
      schoolRole: "",
      addStudentAttendenceDialog: false,
      attendeceTable: false,
      menu: false,
      valid: true,
  
      getReport: {},
      studentsList: [],
      studentsData: [],
      addSection: [],
  
      SectionName: ["A", "B", "C", "D", "E", "F"],
      classRules: [v => !!v || "Class is required"],
      sectionRules: [v => !!v || "Class is required"],
      studentRules: [v => !!v || "Student is required"],
      dataValid: [v => !!v || "Date is required"],
  
      attendenceType: [
        {
          label: "Present",
          value: true
        },
        {
          label: "Absent",
          value: false
        }
      ]
687e0b929   Neeraj Sharma   add user,attenden...
345
346
    }),
    methods: {
710438de6   Shikha Mishra   added teacher mod...
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
      save(date) {
        this.$refs.menu.save(date);
      },
      showTable() {
        this.attendeceTable = true;
        this.getStudents();
      },
      getAllClass() {
        http()
          .get("/getClassesList", {
            headers: { Authorization: "Bearer " + this.token }
          })
          .then(response => {
            this.addclass = response.data.data;
          })
          .catch(error => {
            // console.log("err====>", err);
            // this.$router.replace({ path: "/" });
          });
      },
      getSection(_id) {
6ae46ca27   Neeraj Sharma   implement upload ...
368
        this.showLoader = true;
687e0b929   Neeraj Sharma   add user,attenden...
369
370
        http()
          .get(
710438de6   Shikha Mishra   added teacher mod...
371
            "/getSectionsList",
687e0b929   Neeraj Sharma   add user,attenden...
372
373
            { params: { classId: _id } },
            {
710438de6   Shikha Mishra   added teacher mod...
374
              headers: { Authorization: "Bearer " + this.token }
687e0b929   Neeraj Sharma   add user,attenden...
375
376
377
            }
          )
          .then(response => {
710438de6   Shikha Mishra   added teacher mod...
378
            this.addSection = response.data.data;
6ae46ca27   Neeraj Sharma   implement upload ...
379
            this.showLoader = false;
687e0b929   Neeraj Sharma   add user,attenden...
380
          })
710438de6   Shikha Mishra   added teacher mod...
381
          .catch(err => {
6ae46ca27   Neeraj Sharma   implement upload ...
382
            this.showLoader = false;
710438de6   Shikha Mishra   added teacher mod...
383
            // console.log("err====>", err);
687e0b929   Neeraj Sharma   add user,attenden...
384
385
          });
      },
710438de6   Shikha Mishra   added teacher mod...
386
387
      getStudents(_id) {
        this.showLoader = true;
687e0b929   Neeraj Sharma   add user,attenden...
388
        http()
710438de6   Shikha Mishra   added teacher mod...
389
390
391
392
393
          .get("/getStudentWithClass", {
            params: {
              classId: this.getReport.classId,
              sectionId: this.getReport.sectionId
            }
687e0b929   Neeraj Sharma   add user,attenden...
394
395
          })
          .then(response => {
710438de6   Shikha Mishra   added teacher mod...
396
397
398
399
400
401
402
            this.studentsData = response.data.data;
            this.showLoader = false;
            // this.addStudentAttendenceDialog = false;
            var attendence = "";
            for (let i = 0; i < this.studentsData.length; i++) {
              this.studentsData[i].attendence = true;
            }
687e0b929   Neeraj Sharma   add user,attenden...
403
          })
68d742034   Neeraj Sharma   implement new des...
404
          .catch(error => {
710438de6   Shikha Mishra   added teacher mod...
405
406
407
408
409
410
411
412
413
414
            console.log("err====>", error);
            this.showLoader = false;
          });
      },
      update() {
        var studentsAttendence = [];
        for (var j = 0; j < this.studentsData.length; j++) {
          studentsAttendence.push({
            studentId: this.studentsData[j]._id,
            isPresent: this.studentsData[j].attendence
687e0b929   Neeraj Sharma   add user,attenden...
415
          });
710438de6   Shikha Mishra   added teacher mod...
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
        }
        if (this.$refs.form.validate()) {
          let attendanceData = {
            sectionId: this.getReport.sectionId,
            date: this.date,
            students: studentsAttendence
          };
          http()
            .put("/updateAttendance", attendanceData)
            .then(response => {
              this.snackbar = true;
              this.text = response.data.message;
              this.addStudentAttendenceDialog = false;
            })
            .catch(error => {
              this.snackbar = true;
              this.text = error.response.data.message;
            });
        }
68d742034   Neeraj Sharma   implement new des...
435
      },
710438de6   Shikha Mishra   added teacher mod...
436

68d742034   Neeraj Sharma   implement new des...
437
438
439
440
441
442
443
      displaySearch() {
        (this.show = false), (this.showSearch = true);
      },
      closeSearch() {
        this.showSearch = false;
        this.show = true;
        this.search = "";
687e0b929   Neeraj Sharma   add user,attenden...
444
445
446
447
448
449
      }
    },
    mounted() {
      // this.getStudentList();
      this.token = this.$store.state.token;
      this.getAllClass();
710438de6   Shikha Mishra   added teacher mod...
450
      this.role = this.$store.state.role;
687e0b929   Neeraj Sharma   add user,attenden...
451
452
    }
  };
68d742034   Neeraj Sharma   implement new des...
453
  </script>