import { Misc } from "./misc.js"; import { RdDUtility } from "./rdd-utility.js"; export class DialogItemAchat extends Dialog { static async onButtonAcheter(event) { const buttonAcheter = event.currentTarget; if (!buttonAcheter.attributes['data-jsondata']?.value) { ui.notifications.warn("Impossible d'acheter: informations sur l'objet manquantes") return; } const chatMessageIdVente = RdDUtility.findChatMessageId(buttonAcheter); const vendeurId = buttonAcheter.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; } let venteData = DialogItemAchat.prepareVenteData(buttonAcheter, vendeurId, vendeur, acheteur); 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) { const isConsommable = venteData.item.type == 'nourritureboisson'; let options = { classes: ["dialogachat"], width: 400, height: isConsommable ? 450 : 300, 'z-index': 99999 }; const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre"; const buttons = {}; if (isConsommable) { buttons["consommer"] = { label: venteData.item.data.boisson ? "Boire" : "Manger", callback: it => { this.onAchatConsommer(); } } } buttons[actionAchat] = { label: actionAchat, callback: it => { this.onAchat(); } }; buttons["decliner"] = { label: "Décliner", callback: it => { } }; let conf = { title: actionAchat, content: html, default: actionAchat, buttons: buttons }; super(conf, options); this.vendeur = vendeur; this.acheteur = acheteur; this.chatMessageIdVente = chatMessageIdVente; this.venteData = venteData; } static prepareVenteData(buttonAcheter, vendeurId, vendeur, acheteur) { const jsondata = buttonAcheter.attributes['data-jsondata']?.value; const prixLot = buttonAcheter.attributes['data-prixLot']?.value ?? 0; let venteData = { item: JSON.parse(jsondata), vendeurId: vendeurId, vendeur: Misc.data(vendeur), acheteur: Misc.data(acheteur), tailleLot: parseInt(buttonAcheter.attributes['data-tailleLot']?.value ?? 1), quantiteIllimite: buttonAcheter.attributes['data-quantiteIllimite']?.value == 'true', quantiteNbLots: parseInt(buttonAcheter.attributes['data-quantiteNbLots']?.value), choix: { nombreLots: 1, seForcer: false, supprimerSiZero: true }, prixLot: prixLot, prixTotal: prixLot, isVente: prixLot > 0 }; return venteData; } async onAchat() { await $(".nombreLots").change(); (this.vendeur ?? this.acheteur).achatVente({ vendeurId: this.vendeur?.id, acheteurId: this.acheteur?.id, prixTotal: this.venteData.prixTotal, chatMessageIdVente: this.chatMessageIdVente, choix: this.venteData.choix }); } async onAchatConsommer() { this.venteData.choix.consommer = true; await this.onAchat(); } /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); html.find(".nombreLots").change(event => this.setNombreLots(Number(event.currentTarget.value))); html.find(".se-forcer").change(event => this.setSeForcer(event)); } setSeForcer(event) { this.venteData.choix.seForcer = event.currentTarget.checked; } setNombreLots(nombreLots) { this.venteData.choix.nombreLots = nombreLots; this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2); $(".prixTotal").text(this.venteData.prixTotal); } }