d51243d74f
Le bouton devenait "Acheter" car le prix après la première prise était récupéré sous forme de string (et le template fait une comparaison de nombre)
114 lines
4.0 KiB
JavaScript
114 lines
4.0 KiB
JavaScript
|
|
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 : 350, '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: venteData.acheteur? venteData.acheteur.name + " - " + actionAchat : 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 = parseInt(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({
|
|
userId: game.user.id,
|
|
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);
|
|
}
|
|
|
|
} |