PageSourceSearch

https://ta-tum.com/js/modules/school_admin/school/section/StudentModalEdit.js

js ta-tum.com collected 2026-09-24 11:30:20 UTC 14,300 bytes, 289 lines download raw bytes

1/**
2 * Module School Admin: Edit Students
3 * @description Módulo para agregar docentes a colegio
4 * @author Alejandro Micheloud
5 */
6
7function StudentModalEdit(_sm) {
8
9    var callback = null;
10    var mModal = null;
11    var _this = this;
12    var student = null;
13    var SchoolManager = _sm;
14
15    function reset() {
16        getModal().find("input.t-name").val("");
17        getModal().find("input.t-lastname").val("");
18        getModal().find("input.t-username").val("");
19        getModal().find("input.t-password").val("");
20    }
21
22    function getStudent() {
23        reset();
24        mDiscover.showLoading();
25        mCom.ajax("school/admin/student/" + student.guid, "GET", "", function (data, status) {
26            console.log(data);
27            student = data;
28            mDiscover.hideLoading();
29            renderStudent();
30        }, function (err, status, msg) {
31            mToast.toast("Problemas al buscar alumno", 3000);
32            mDiscover.hideLoading();
33        });
34    }
35
36    function linkToClassroom(classroom_ar) {
37        mDiscover.showLoading();
38        var data = {};
39        data.student_guid = student.guid;
40        data.student_name = student.name;
41        data.student_lastname = student.lastname;
42        data.classroom_ar = classroom_ar;
43        mCom.ajax("school/admin/student/link-to-classrooms", "PUT", data, function (data, status) {
44            console.log(data);
45            mDiscover.hideLoading();
46            getStudent();
47        }, function (err, status, msg) {
48            mToast.toast("Problemas al vincular", 3000);
49            mDiscover.hideLoading();
50        });
51    }
52    function unlinkClassroom(classroom_student_guid) {
53        mDiscover.showLoading();
54        var data = {};
55        data.classroom_student_guid = classroom_student_guid;
56        data.student_guid = student.guid;
57        mCom.ajax("school/admin/student/unlink-to-classroom", "PUT", data, function (data, status) {
58            console.log(data);
59            mDiscover.hideLoading();
60            getStudent();
61        }, function (err, status, msg) {
62            mToast.toast("Problemas al desvincular", 3000);
63            mDiscover.hideLoading();
64        });
65    }
66
67    function renderStudent() {
68        getModal().find("input.t-name").val(student.name);
69        getModal().find("input.t-lastname").val(student.lastname);
70        getModal().find("input.t-username").val(student.username);
71        getModal().find("input.t-password").val(student.password);
72
73        getModal().find("select.t-age").val(student.age);
74        if (student.is_active > 0) {
75            getModal().find("select.t-license").val("active");
76        } else {
77            getModal().find("select.t-license").val("no-active");
78        }
79        if (student.classrooms.length === 0) {
80            getModal().find(".d-value .linked-list").html(getHtmlEmptyLinkedClassrooms());
81        } else {
82            getModal().find(".d-value .linked-list").html("");
83            for (var i = 0; i < student.classrooms.length; i++) {
84                getModal().find(".d-value .linked-list").append(getHtmlSchool(student.classrooms[i]));
85                getModal().find(".d-value .linked-list .d-school")
86                        .last()
87                        .data(student.classrooms[i])
88                        .find(".d-ico-unlink")
89                        .click(function () {
90                            var classroom = $(this).closest(".d-school").data();
91                            mDiscover.openConfirm("Atención", "¿Seguro que desea desvincular al alumno de la clase '" + classroom.name + "'?", function (response) {
92                                mModal.show();
93                                if (response) {
94                                    unlinkClassroom(classroom.classroom_student_guid);
95                                }
96                            });
97                        });
98            }
99        }
100        getModal().find(".bt-edit-password").removeClass("disabled").off("click").on("click", showPassword);
101        getModal().find(".password-mask").show();
102    }
103    function showPassword() {
104        getModal().find(".password-mask").hide();
105        getModal().find(".bt-edit-password").addClass("disabled");
106    }
107
108    function init() {
109        $("#modal-container .modal.d-modal-admin-school-edit-students").remove();
110        $("#modal-container").append(getHtmlModal());
111        mModal = new Modal(getModal());
112
113        getModal().find(".d-modal-close").click(function () {
114            _this.hide();
115        });
116        getModal().find(".d-footer .btn-cancel").click(function () {
117            _this.hide();
118        });
119
120        // link to class
121        getModal().find(".btn.link-class").click(function () {
122            SchoolManager.getClassroomSelector().show(function (classroom_ar) {
123                linkToClassroom(classroom_ar);
124                mModal.show();
125            });
126        });
127
128        getModal().find(".btn-save").click(function () {
129            if (!getModal().find("form")[0].checkValidity()) {
130                mToast.toast("Debes completar correctamente el formulario.");
131                return;
132            }
133
134            var data = {};
135            data.school_guid = mDiscover.getUser().schools[0].guid;
136            data.guid = student.guid;
137            data.name = getModal().find("input.t-name").val();
138            data.lastname = getModal().find("input.t-lastname").val();
139            data.username = getModal().find("input.t-username").val();
140            data.password = getModal().find("input.t-password").val();
141            data.age = getModal().find("select.t-age").val();
142            data.is_verified = getModal().find("select.t-license").val() === "active";
143
144            mDiscover.showLoading();
145            mCom.ajax("school/admin/student", "PUT", data, function (data, status) {
146                console.log(data);
147                mDiscover.hideLoading();
148                if (data.is_verified && !data.have_license) {
149                    mToast.toast("Se guardó correctamente", 3000);
150                    mToast.toast("Atención: No tienes licencias disponibles para alumno.", 6000);
151                } else {
152                    mToast.toast("Se guardó correctamente", 3000);
153                }
154                if (isFunction(callback)) {
155                    callback();
156                }
157                mModal.hide();
158            }, function (err, status, msg) {
159                mToast.toast("Problemas al guardar, por favor revisa que los datos sean correctos", 3000);
160                mDiscover.hideLoading();
161            });
162        });
163
164    }
165
166    // helpers
167    function getModal() {
168        return $("#modal-container .modal.d-modal-admin-school-edit-students");
169    }
170    function getHtmlModal() {
171        return  '<div class="modal d-modal-admin-school-edit-students">' +
172                '  <div class="modal-content wrap-dialog-popup">' +
173                '       <div class="modal-body">' +
174                '           <div class="d-header">' +
175                '               <div class="d-title">Editar Alumno</div>' +
176                '               <div class="d-modal-close btn btn-bitmap"></div>' +
177                '           </div>' +
178                '           <div class="d-content">' +
179                '               <form class="d-form">' +
180                '               <div class="d-avatar"></div>' +
181                '               <div class="d-avatar-bg"></div>' +
182                '               <table class="f-teacher">' +
183                '                   <tr>' +
184                '                       <td class="d-label">Nombre</td>' +
185                '                       <td class="d-value"><input type="text" class="simple-input t-name" required="required" pattern=".{2,30}" /></td>' +
186                '                   </tr>' +
187                '                   <tr>' +
188                '                       <td class="d-label">Apellido</td>' +
189                '                       <td class="d-value"><input type="text" class="simple-input t-lastname" required="required" pattern=".{2,30}" /></td>' +
190                '                   </tr>' +
191                '                   <tr style="display:none;">' +
192                '                       <td class="d-label">Edad</td>' +
193                '                       <td class="d-value">' +
194                '                           <select class="simple-input t-age">' +
195                '                                <option value="1">1</option>' +
196                '                                <option value="2">2</option>' +
197                '                                <option value="3">3</option>' +
198                '                                <option value="4">4</option>' +
199                '                                <option value="5">5</option>' +
200                '                                <option value="6">6</option>' +
201                '                                <option value="7">7</option>' +
202                '                                <option value="8">8</option>' +
203                '                                <option value="9">9</option>' +
204                '                                <option value="10" selected="selected">10</option>' +
205                '                                <option value="11">11</option>' +
206                '                                <option value="12">12</option>' +
207                '                                <option value="13">13</option>' +
208                '                                <option value="14">14</option>' +
209                '                                <option value="15">15</option>' +
210                '                                <option value="16">16</option>' +
211                '                                <option value="17">17</option>' +
212                '                                <option value="18">18 o m&aacute;s</option>' +
213                '                           </select>' +
214                '                       </td>' +
215                '                   </tr>' +
216                '                   <tr>' +
217                '                       <td class="d-label">Email</td>' +
218                '                       <td class="d-value"><input type="text" class="simple-input t-username" disabled="disabled" required="required" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" /></td>' +
219                '                   </tr>' +
220                '                   <tr>' +
221                '                       <td class="d-label">Contraseña</td>' +
222                '                       <td class="d-value relative">' +
223                /*                          Al editar no se requiere clave, porque hay usuarios creados con google oauth que no tienen clave    */
224                '                           <input type="text" class="simple-input t-password" pattern=".{0,40}" />' +
225                '                           <div class="password-mask">#####################</div>' +
226                '                           <div class="btn orange bt-edit-password">Editar</div>' +
227                '                       </td>' +
228                '                   </tr>' +
229                '                   <tr>' +
230                '                       <td class="d-label">Licencia</td>' +
231                '                       <td class="d-value">' +
232                '                           <select class="simple-input t-license" required="required">' +
233                '                               <option value="active">Activa</option>' +
234                '                               <option value="no-active">No activa</option>' +
235                '                           </select>' +
236                '                       </td>' +
237                '                   </tr>' +
238                '               </table>' +
239                '               <table width="100%">' +
240                '                   <tr>' +
241                '                       <td class="d-label left"><div class="linked-label">Sus clases</div> <div class="btn link-class">Vincular clases <span class="d-icon"></span></div></td>' +
242                '                   </tr>' +
243                '                   <tr>' +
244                '                       <td class="d-value">' +
245                '                           <div class="linked-list">' + getHtmlEmptyLinkedClassrooms() + '</div>' +
246                '                       </td>' +
247                '                   </tr>' +
248                '               </table>' +
249                '               </form>' +
250                '           </div>' +
251                '           <div class="d-footer">' +
252                '               <div class="btn default btn-cancel">Descartar</div>' +
253                '               <div class="btn orange btn-save">Guardar</div>' +
254                '           </div>' +
255                '       </div>' +
256                '  </div>' +
257                '</div>';
258    }
259    function getHtmlEmptyLinkedClassrooms() {
260        return '<div class="empty">Este alumno aún no tiene clases.<br>Para vincular una clase, pulsa en "Vincular clases"</div>';
261    }
262    function getHtmlSchool(school) {
263        var avatar = (school.avatar !== "") ? school.avatar : "css/img/avatar_clase.jpg";
264        var students = (school.amount_students === 1) ? "1 alumno" : school.amount_students + " alumnos";
265        return '<div class="d-card d-school">' +
266                '   <div class="btn d-ico-unlink"></div>' +
267                '   <div class="d-avatar-school" style="background-image: url(' + avatar + ')"></div>' +
268                '   <div class="d-avatar-bg"></div>' +
269                '   <div class="d-name">' + school.name + '</div>' +
270                '   <div class="d-education-level">' + school.education_level + '</div>' +
271                '   <div class="d-amount-students">' + students + '</div>' +
272                '</div>';
273    }
274    this.show = function (_student, _callback) {
275        student = _student;
276        callback = _callback;
277        mModal.show();
278        getStudent();
279    };
280    this.hide = function () {
281        mModal.hide();
282        if (isFunction(callback)) {
283            callback(null);
284        }
285    };
286
287
288    init();
289}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.