ScoDoc/app/static/js/etud_debouche.js

181 lines
5.0 KiB
JavaScript

// Cadre "debouchés" sur fiche etudiant
// affichage et saisie des informations sur l'avenir de l'étudiant.
// console.log('etud_debouche.js loaded');
$(function () {
display_itemsuivis(false);
});
function display_itemsuivis(active) {
var etudid = $("div#fichedebouche").data("etudid");
var readonly = $("div#fichedebouche").data("readonly"); // present ro interface
if (!readonly) {
$("#adddebouchelink")
.off("click")
.click(function (e) {
e.preventDefault();
$.post(`${SCO_URL}../api/etudiant/${etudid}/itemsuivi/create`, {
etudid: etudid,
}).done(item_insert_new);
return false;
});
}
// add existing items
$.get(
`${SCO_URL}../api/etudiant/${etudid}/itemsuivis`,
{ },
function (L) {
for (var i in L) {
item_insert(
L[i]["id"],
L[i]["item_date_dmy"],
L[i]["situation"],
L[i]["tags"],
readonly
);
}
}
);
$("div#fichedebouche").accordion({
heightStyle: "content",
collapsible: true,
active: active,
});
}
function item_insert_new(it) {
item_insert(it.id, it.item_date, it.situation, "", false);
}
function item_insert(itemsuivi_id, item_date, situation, tags, readonly) {
if (item_date === undefined) item_date = Date2DMY(new Date());
if (situation === undefined) situation = "";
if (tags === undefined) tags = "";
var nodes = item_nodes(itemsuivi_id, item_date, situation, tags, readonly);
// insert just before last li:
if ($("ul.listdebouches li.adddebouche").length > 0) {
$("ul.listdebouches").children(":last").before(nodes);
} else {
// mode readonly, pas de li "ajouter"
$("ul.listdebouches").append(nodes);
}
}
function item_nodes(itemsuivi_id, item_date, situation, tags, readonly) {
// console.log('item_nodes: itemsuivi_id=' + itemsuivi_id);
var sel_mois =
'Situation à la date du <input type="text" class="itemsuividatepicker" size="10" value="' +
item_date +
'"/><span class="itemsuivi_suppress" onclick="itemsuivi_suppress(\'' +
itemsuivi_id +
'\')"><img width="10" height="9" border="0" title="" alt="supprimer cet item" src="/ScoDoc/static/icons/delete_small_img.png"/></span>';
var h = sel_mois;
// situation
h += `<div class="itemsituation editable"
data-type="textarea"
data-url="${SCO_URL}../api/etudiant/itemsuivi/${itemsuivi_id}/set_situation"
data-placeholder="<em>décrire situation...</em>"
data-object="'${itemsuivi_id}'">${situation}</div>`;
// tags:
h +=
`<div class="itemsuivi_tag_edit">
<textarea class="itemsuivi_tag_editor"
data-itemsuivi_id="${itemsuivi_id}"
>${tags}</textarea>
</div>`;
var nodes = $($.parseHTML('<li class="itemsuivi">' + h + "</li>"));
var dp = nodes.find(".itemsuividatepicker");
dp.blur(function (e) {
var date = this.value;
if (date) {
$.post(`${SCO_URL}../api/etudiant/itemsuivi/${itemsuivi_id}/set_date`, {
date_dmy: date,
});
}
});
dp.datepicker({
onSelect: function (date, instance) {
if (date) {
$.post(`${SCO_URL}../api/etudiant/itemsuivi/${itemsuivi_id}/set_date`, {
date_dmy: date,
});
}
},
showOn: "button",
buttonImage: "/ScoDoc/static/icons/calendar_img.png",
buttonImageOnly: true,
dateFormat: "dd/mm/yy",
duration: "fast",
disabled: readonly,
});
dp.datepicker(
"option",
$.extend({ showMonthAfterYear: false }, $.datepicker.regional["fr"])
);
if (readonly) {
// show tags read-only
readOnlyTags(nodes.find(".itemsuivi_tag_editor"));
} else {
// bind tag editor
nodes.find(".itemsuivi_tag_editor").tagEditor({
initialTags: "",
placeholder: "Tags...",
onChange: function (field, editor, tags) {
let itemsuivi_id = field.data("itemsuivi_id");
$.post(`${SCO_URL}../api/etudiant/itemsuivi/${itemsuivi_id}/tag`, {
itemsuivi_id: itemsuivi_id,
taglist: tags.join(),
});
},
autocomplete: {
delay: 200, // ms before suggest
position: { collision: "flip" }, // automatic menu position up/down
source: "itemsuivi_tag_search",
},
});
// bind inplace editor
nodes.find("div.itemsituation").jinplace();
}
return nodes;
}
function Date2DMY(date) {
var year = date.getFullYear();
var month = (1 + date.getMonth()).toString();
month = month.length > 1 ? month : "0" + month;
var day = date.getDate().toString();
day = day.length > 1 ? day : "0" + day;
return day + "/" + month + "/" + year;
}
async function itemsuivi_suppress(itemsuivi_id) {
const deleteUrl = `${SCO_URL}../api/etudiant/itemsuivi/${itemsuivi_id}/delete`;
try {
const response = await fetch(deleteUrl, {
method: 'POST'
});
if (response.ok) {
// Clear items and rebuild:
$("ul.listdebouches li.itemsuivi").remove();
display_itemsuivis(0);
}
} catch (error) {
console.error('Error deleting itemsuivi:', error);
}
}