Vincent Vandemeulebrouck
0b1c5d0a3d
- remplacement des données/JSON dans le html par des Flags sur le ChatMessage - extraction de la gestion des infos de ventes pour rassembler la génération du ChatMessage - on ne perd plus la quantité ou le vendeur - attention au mergeObject: il modifie le premier parametre, ce qui modifiait parfois l'acteur (!!!) et toujours la quantité de l'objet du vendeur lors de la création de l'objet de l'acheteur!
119 lines
4.1 KiB
JavaScript
119 lines
4.1 KiB
JavaScript
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);
|
|
}
|
|
|
|
|
|
} |