import { Misc } from "../misc.js"; import { RdDUtility } from "../rdd-utility.js"; import { ChatVente } from "./chat-vente.js"; export class DialogItemAchat extends Dialog { static preparerAchat(chatButton) { return ChatVente.getDetailAchatVente(RdDUtility.findChatMessageId(chatButton)) } static async onAcheter({ item, vendeur, acheteur, tailleLot, prixLot, nbLots, quantiteIllimite, chatMessageIdVente }) { const venteData = { item, actingUserId: game.user.id, vendeur, acheteur, tailleLot, quantiteIllimite, nbLots, choix: { seForcer: false, supprimerSiZero: true }, prixLot, isVente: prixLot > 0, isConsommable: item.type == 'nourritureboisson' && acheteur?.isPersonnage(), chatMessageIdVente } if (venteData.vendeur?.id == venteData.acheteur?.id) { ui.notifications.info("Inutile de se vendre à soi-même") return } DialogItemAchat.changeNombreLots(venteData, 1) const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData) new DialogItemAchat(html, venteData).render(true) } static changeNombreLots(venteData, nombreLots) { venteData.choix.nombreLots = nombreLots; venteData.prixTotal = (nombreLots * venteData.prixLot).toFixed(2); if (venteData.isConsommable) { const doses = nombreLots * venteData.tailleLot; venteData.totalSust = Misc.keepDecimals(doses * (venteData.item.system.sust ?? 0), 2); venteData.totalDesaltere = venteData.item.system.boisson ? Misc.keepDecimals(doses * (venteData.item.system.desaltere ?? 0), 2) : 0; } } constructor(html, venteData) { let options = { classes: ["dialogachat"], width: 400, height: 'fit-content', 'z-index': 99999 }; const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre"; const buttons = {}; if (venteData.isConsommable) { buttons["consommer"] = { label: venteData.item.system.boisson ? "Boire" : "Manger", callback: it => this.onAchatConsommer() } } buttons[actionAchat] = { label: actionAchat, callback: it => { this.onAchat(); } }; buttons["decliner"] = { label: "Décliner", callback: it => { } }; const acheteur = venteData.acheteur?.name ?? 'Un acheteur'; const vendeur = venteData.vendeur?.name ?? 'Un vendeur'; let conf = { title: `${acheteur} - ${actionAchat} à ${vendeur}`, content: html, default: actionAchat, buttons: buttons }; super(conf, options); this.venteData = venteData; } async onAchat() { await this.html.find(".nombreLots").change(); (this.venteData.vendeur ?? this.venteData.acheteur).achatVente({ userId: game.user.id, vendeurId: this.venteData.vendeur?.id, acheteurId: this.venteData.acheteur?.id, prixTotal: this.venteData.prixTotal, chatMessageIdVente: this.venteData.chatMessageIdVente, choix: this.venteData.choix, vente: this.venteData }); } async onAchatConsommer() { this.venteData.choix.consommer = true; await this.onAchat(); } /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); this.html = html; this.html.find(".nombreLots").change(event => this.setNombreLots(Number(event.currentTarget.value))); this.html.find(".se-forcer").change(event => this.setSeForcer(event)); } setSeForcer(event) { this.venteData.choix.seForcer = event.currentTarget.checked; } setNombreLots(nbLots) { if (!this.venteData.quantiteIllimite) { if (!this.venteData.quantiteIllimite && nbLots > this.venteData.nbLots) { ui.notifications.warn(`Seulement ${this.venteData.nbLots} lots disponibles, vous ne pouvez pas en prendre ${nbLots}`) } nbLots = Math.min(nbLots, this.venteData.nbLots); } DialogItemAchat.changeNombreLots(this.venteData, nbLots); this.html.find(".nombreLots").val(nbLots); this.html.find(".prixTotal").text(this.venteData.prixTotal); this.html.find("span.total-sust").text(this.venteData.totalSust); this.html.find("span.total-desaltere").text(this.venteData.totalDesaltere); } }