0524540f5a
Forcer la validation des champs saisis avant de fermer les dialogs et d'appeler le callback pour avoir la dernière valuer saisie par l'utilisateur
89 lines
3.0 KiB
JavaScript
89 lines
3.0 KiB
JavaScript
import { RdDActor } from "./actor.js";
|
|
import { HtmlUtility } from "./html-utility.js";
|
|
import { Misc } from "./misc.js";
|
|
import { RdDUtility } from "./rdd-utility.js";
|
|
|
|
export class DialogItemAchat extends Dialog {
|
|
|
|
static async onButtonAcheter(event) {
|
|
let jsondata = event.currentTarget.attributes['data-jsondata']?.value;
|
|
if (!jsondata) {
|
|
ui.notifications.warn("Impossible d'acheter: informations sur l'objet manquantes")
|
|
return;
|
|
}
|
|
const vendeurId = event.currentTarget.attributes['data-vendeurId']?.value;
|
|
const vendeur = vendeurId ? game.actors.get(vendeurId) : undefined;
|
|
const acheteur = RdDUtility.getSelectedActor();
|
|
|
|
if (!acheteur && !vendeur) {
|
|
ui.notifications.info("Pas d'acheteur ni de vendeur, aucun changement");
|
|
return;
|
|
}
|
|
|
|
const chatMessageIdVente = RdDUtility.findChatMessageId(event.currentTarget);
|
|
const itemData = JSON.parse(jsondata);
|
|
const prixLot = event.currentTarget.attributes['data-prixLot']?.value ?? 0;
|
|
let venteData = {
|
|
item: itemData,
|
|
vendeurId: vendeurId,
|
|
vendeur: Misc.data(vendeur),
|
|
acheteur: Misc.data(acheteur),
|
|
tailleLot: event.currentTarget.attributes['data-tailleLot']?.value ?? 1,
|
|
quantiteIllimite : event.currentTarget.attributes['data-quantiteIllimite']?.value == 'true',
|
|
quantiteNbLots: event.currentTarget.attributes['data-quantiteNbLots']?.value,
|
|
nombreLots: 1,
|
|
prixLot: prixLot,
|
|
prixTotal: prixLot,
|
|
isVente: prixLot > 0
|
|
};
|
|
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData);
|
|
const dialog = new DialogItemAchat(html, vendeur, acheteur, venteData, chatMessageIdVente);
|
|
dialog.render(true);
|
|
}
|
|
|
|
constructor(html, vendeur, acheteur, venteData, chatMessageIdVente) {
|
|
let options = { classes: ["dialogachat"], width: 400, height: 300, 'z-index': 99999 };
|
|
|
|
const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre";
|
|
let conf = {
|
|
title: actionAchat,
|
|
content: html,
|
|
default: actionAchat,
|
|
buttons: {
|
|
[actionAchat]: { label: actionAchat, callback: it => { this.onAchat(); } },
|
|
"decliner": { label: "Décliner", callback: it => { } }
|
|
}
|
|
};
|
|
|
|
super(conf, options);
|
|
|
|
this.vendeur = vendeur;
|
|
this.acheteur = acheteur;
|
|
this.chatMessageIdVente = chatMessageIdVente;
|
|
this.venteData = venteData;
|
|
}
|
|
|
|
async onAchat() {
|
|
await $(".nombreLots").change();
|
|
(this.vendeur ?? this.acheteur).achatVente(
|
|
this.vendeur?.id,
|
|
this.acheteur?.id,
|
|
this.venteData,
|
|
this.chatMessageIdVente
|
|
);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
|
|
html.find(".nombreLots").change(event => this.setNombreLots(Number(event.currentTarget.value)));
|
|
}
|
|
|
|
setNombreLots(nombreLots) {
|
|
this.venteData.nombreLots = nombreLots;
|
|
this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2);
|
|
$(".prixTotal").text(this.venteData.prixTotal);
|
|
}
|
|
|
|
} |