
js Code`odoo.define('aspire_student_attendance.attendance_form', [' web.ajax'], function (require) {
"use strict";
Код: Выделить всё
var ajax = require('web.ajax');
const core = require('web.core');
var _t = core._t;
$(document).ready(function () {
$('select[name="class_division_id"]').on('change', function () {
const classId = $(this).val();
if (classId) {
this.rpc({route: "/get_students",
params: {class_division_id: classId}}). then(function (response) {
const studentList = $('#students_list');
studentList.empty();
$.each(response, function (index, student) {
const studentEntry = $('')
.addClass('student_attendance_input')
.text(student.name)
.data('student-id', student.id);
$('', {
type: 'checkbox',
name: `attendance[${student.id}]`,
value: 'present'
}).appendTo(studentEntry);
studentList.append(studentEntry);
});
}).catch(function (error) {
console.error("Error fetching students:", error);
});
} else {
$('#students_list').empty();
}
});
$('button[name="submit_attendance"]').on('click', function (e) {
e.preventDefault();
const classId = $('select[name="class_division_id"]').val();
const date = $('input[name="date"]').val();
const studentAttendances = [];
$('.student_attendance_input input[type="checkbox"]').each(function () {
const studentId = $(this).closest('.student_attendance_input').data('student-id');
const attendanceStatus = $(this).is(':checked') ? 'present' : 'absent';
studentAttendances.push({
student_id: studentId,
attendance_status: attendanceStatus,
});
});
if (!classId || !date || studentAttendances.length === 0) {
alert("Please select a class, enter a date, and mark student attendance.");
return;
}
ajax.rpc('/submit_attendance', {
class_division_id: classId,
date: date,
student_attendances: studentAttendances,
}).then(function (result) {
if (result.success) {
alert(result.message);
$('#students_list').empty();
$('select[name="class_division_id"]').val('');
$('input[name="date"]').val('');
}
}).catch(function (error) {
console.error("Error submitting attendance:", error);
});
});
});
Шаблон XML
[img]https://i.sstatic .net/0dtHE6CY.png[/img]
Ниже приведен файл манифеста.py
Код: Выделить всё
{
'name': 'School Management',
'version': '17.0.1.0.0',
'category': 'School Management',
'summary': """School Management Extended""",
'author': 'AAAA',
'company': 'AAAA',
'website': "",
'depends': ['base', 'web', 'website'],
'data': [
'security/ir.model.access.csv',
'views/student_attendance_views.xml',
# 'views/website_menu.xml',
# 'views/assets.xml',
'views/student_attendance_form.xml',
'views/home.xml',
],
'assets': {
'web.assets_frontend': [
'aspire_student_attendance/static/src/student_attendance_form/**/*',
],
},
'installable': True,
'auto_install': False,
'application': True,
'license': 'AGPL-3',
Подробнее здесь: https://stackoverflow.com/questions/784 ... js-and-xml