Tiavina 50ca1bb3e8 h2f release (source is from h2f code, add only features needed without changing existing code not related)
Push only :
- calendar features (create agenda and create devis automatically)
- gestion feature (listener to create devis automatically when creating calendar, export thanato statistic, export client statistic)
2025-01-05 12:49:33 +03:00

173 lines
5.8 KiB
JavaScript

import { showError } from "@nextcloud/dialogs";
import { LoadDT, baseUrl, checkSelectPurJs, showDone } from "../modules/mainFunction.mjs";
import { generateUrl } from "@nextcloud/router";
import { updateDB } from "../modules/ajaxRequest.mjs";
export class Defunt {
/**
*
* @param myresp instantiate Defunt object
*/
constructor(myresp) {
this.id = myresp.id;
this.nom = ((myresp.nom.length === 0) ? '-' : myresp.nom);
this.date_naissance = myresp.date_naissance;
this.age = 0;
this.sexe = ((myresp.sexe.length === 0) ? null : myresp.sexe);
this.ref_pacemaker = ((myresp.ref_pacemaker.lenth == 0) ? '-' : myresp.ref_pacemaker);
this.pompe = ((myresp.nom_client == null) ? '-' : myresp.nom_client);
this.lieu = ((myresp.lieu == null) ? '-' : myresp.lieu);
this.numero_devis = ((myresp.user_id == null) ? '-' : myresp.user_id);
this.baseUrl = generateUrl(`/apps/gestion/defunt/${this.id}/show`);
this.age = Defunt.caclulateAge(myresp.date_naissance);
}
/**
* Get datatable row for an item
*/
getDTRow() {
let myrow = [
'<div>' + this.id + '</div>', // identifiant
'<div class="editable" data-table="defunt" data-column="nom" data-id="' + this.id + '">' + this.nom + '</div>', // nom
'<input style="margin:0;padding:0;" class="inputDate" type="date" value=' + this.date_naissance + ' data-table="defunt" data-column="date_naissance" data-id="' + this.id + '"/>',
'<div id="ageDefunt-'+this.id+'">'+this.age+'</div>', // age
'<div>'+
'<select class="gestion-select" data-table="defunt" data-column="sexe" data-id="' + this.id + '">'+
'<option value="m" '+((this.sexe=='m')?'selected':'')+'>Masculin</option>'+
'<option value="f" '+((this.sexe=='f')?'selected':'')+'>Féminin</option>'+
'</select>'+
'</div>', // sexe
'<div class="editable" data-table="defunt" data-column="ref_pacemaker" data-id="' + this.id + '">' + this.ref_pacemaker + '</div>', // reference pacemaker
'<div>'+this.numero_devis+'</div>', // numeroDevis
'<div>'+this.pompe+'</div>', // pompe
'<div>'+this.lieu+'</div>', // lieu
'<div style="display:inline-block;margin-right:0px;width:80%;"><a href="' + this.baseUrl + '"><button>' + t('gestion', 'Open') + '</button></a></div><div data-modifier="defunt" data-id=' + this.id + ' data-table="defunt" style="display:inline-block;margin-right:0px;" class="deleteItem icon-delete"></div>'
];
return myrow;
}
/**
*
* @param {*} dateNaissance
*/
static caclulateAge(dateNaissance) {
var diff = Date.now() - (new Date(dateNaissance)).getTime();
var ageDate = new Date(diff);
var age = Math.abs(ageDate.getUTCFullYear() - 1970);
return age;
}
/**
*
* @param {*} defuntDt
*/
static loadDefuntDT(defuntDt) {
var oReq = new XMLHttpRequest();
oReq.open('PROPFIND', baseUrl + '/getDefunts', true);
oReq.setRequestHeader("Content-Type", "application/json");
oReq.onload = function(e){
if (this.status == 200) {
LoadDT(defuntDt, JSON.parse(this.response), Defunt);
}else{
showError(this.response);
}
};
oReq.send();
}
/**
*
* @param {*} dt
*/
static newDefunt(dt) {
var oReq = new XMLHttpRequest();
oReq.open('POST', baseUrl + '/defunt/insert', true);
oReq.onload = function(e){
if (this.status == 200) {
showDone()
Defunt.loadDefuntDT(dt);
}else{
showError(this.response);
}
};
oReq.send();
}
static getDefunts(callback){
var oReq = new XMLHttpRequest();
oReq.open('PROPFIND', baseUrl + '/getDefunts', true);
oReq.setRequestHeader("Content-Type", "application/json");
oReq.onload = function(e){
if (this.status == 200) {
callback(JSON.parse(this.response));
}else{
showError(this.response);
}
};
oReq.send();
}
static getUnusedDefunts(callback){
var oReq = new XMLHttpRequest();
oReq.open('PROPFIND', baseUrl + '/getUnusedDefunts', true);
oReq.setRequestHeader("Content-Type", "application/json");
oReq.onload = function(e){
if (this.status == 200) {
callback(JSON.parse(this.response));
}else{
showError(this.response);
}
};
oReq.send();
}
/**
* @desc populate defunt select list in devis
*/
static loadDefuntList_tid(e){
Defunt.getUnusedDefunts(response => {
var selectElement = document.createElement("select");
selectElement.dataset.current = e.target.dataset.current;
selectElement.dataset.id = e.target.dataset.id;
selectElement.dataset.old = e.target.innerHTML;
selectElement.addEventListener("change", el=>{
if(el.target.value != 0){
updateDB(el.target.parentElement.dataset.table,
el.target.parentElement.dataset.column,
el.target.value,
el.target.parentElement.dataset.id
);
var parentElement = el.target.parentElement
parentElement.innerHTML = el.target.value + " " + el.target.options[el.target.selectedIndex].text;
parentElement.dataset.current = el.target.value;
}else{
var parentElement = el.target.parentElement
parentElement.innerHTML = el.target.dataset.old
}
});
var option = document.createElement("option");
option.value = 0;
option.text = t('gestion', 'Cancel');
selectElement.appendChild(option);
JSON.parse(response).forEach(myresp => {
var txt = document.createElement("textarea");
txt.innerHTML = myresp.nom;
var option = document.createElement("option");
option.value = myresp.id;
option.text = txt.value;
selectElement.appendChild(option);
});
checkSelectPurJs(selectElement);
e.target.innerHTML = ''
e.target.appendChild(selectElement);
});
}
}