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!
110 lines
3.9 KiB
JavaScript
110 lines
3.9 KiB
JavaScript
import { HtmlUtility } from "../html-utility.js";
|
|
import { RdDUtility } from "../rdd-utility.js";
|
|
import { ChatVente } from "./chat-vente.js";
|
|
|
|
export class DialogItemVente extends Dialog {
|
|
|
|
static async display({ item, quantiteMax = undefined }) {
|
|
const quantite = quantiteMax ?? item.getQuantite() ?? 1;
|
|
const venteData = {
|
|
item: item,
|
|
alias: item.actor?.name ?? game.user.name,
|
|
vendeurId: item.actor.id,
|
|
prixOrigine: item.calculerPrixCommercant(),
|
|
prixUnitaire: item.calculerPrixCommercant(),
|
|
prixLot: item.calculerPrixCommercant(),
|
|
tailleLot: 1,
|
|
nbLots: quantite,
|
|
maxLots: quantite,
|
|
quantiteMax: quantite,
|
|
quantiteIllimite: item.isItemCommerce() ? quantiteMax == undefined : !item.parent,
|
|
isOwned: item.parent,
|
|
}
|
|
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-vente.html`, venteData);
|
|
return new DialogItemVente(venteData, html).render(true);
|
|
}
|
|
|
|
constructor(venteData, html) {
|
|
let options = { classes: ["dialogvente"], width: 400, height: 'fit-content', 'z-index': 99999 };
|
|
|
|
let conf = {
|
|
title: "Proposer",
|
|
content: html,
|
|
default: "proposer",
|
|
buttons: { "proposer": { label: "Proposer", callback: it => { this.onProposer(it); } } }
|
|
};
|
|
|
|
super(conf, options);
|
|
this.venteData = venteData;
|
|
}
|
|
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
|
|
this.html = html;
|
|
this.html.find(".tailleLot").change(event => this.setTailleLot(Number(event.currentTarget.value)));
|
|
this.html.find(".nbLots").change(event => this.setNbLots(Number(event.currentTarget.value)));
|
|
this.html.find(".quantiteIllimite").change(event => this.setQuantiteIllimite(event.currentTarget.checked));
|
|
this.html.find(".prixLot").change(event => this.setPrixLot(Number(event.currentTarget.value)));
|
|
|
|
this.setQuantiteIllimite(this.venteData.quantiteIllimite);
|
|
}
|
|
|
|
async onProposer(it) {
|
|
this.updateVente(this.getChoixVente());
|
|
|
|
this.venteData["properties"] = this.venteData.item.getProprietes();
|
|
if (this.venteData.isOwned) {
|
|
if (this.venteData.nbLots * this.venteData.tailleLot > this.venteData.quantiteMax) {
|
|
ui.notifications.warn(`Vous avez ${this.venteData.quantiteMax} ${this.venteData.item.name}, ce n'est pas suffisant pour vendre ${this.venteData.nbLots} de ${this.venteData.tailleLot}`)
|
|
return;
|
|
}
|
|
}
|
|
await ChatVente.displayAchatVente(this.venteData)
|
|
}
|
|
|
|
updateVente(update) {
|
|
foundry.utils.mergeObject(this.venteData, update);
|
|
}
|
|
|
|
getChoixVente() {
|
|
return {
|
|
nbLots: Number(this.html.find(".nbLots").val()),
|
|
tailleLot: Number(this.html.find(".tailleLot").val()),
|
|
quantiteIllimite: this.html.find(".quantiteIllimite").is(':checked'),
|
|
prixLot: Number(this.html.find(".prixLot").val())
|
|
};
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
setPrixLot(prixLot) {
|
|
this.venteData.prixLot = prixLot;
|
|
}
|
|
|
|
setTailleLot(tailleLot) {
|
|
const maxLots = Math.floor(this.venteData.quantiteMax / tailleLot);
|
|
this.updateVente({
|
|
tailleLot,
|
|
nbLots: Math.min(maxLots, this.venteData.nbLots),
|
|
maxLots: maxLots,
|
|
prixLot: (tailleLot * this.venteData.prixOrigine).toFixed(2)
|
|
});
|
|
|
|
this.html.find(".prixLot").val(this.venteData.prixLot);
|
|
this.html.find(".nbLots").val(this.venteData.nbLots);
|
|
this.html.find(".nbLots").attr("max", this.venteData.maxLots)
|
|
}
|
|
|
|
setNbLots(nbLots) {
|
|
this.updateVente({
|
|
nbLots: this.venteData.isOwned ? Math.max(0, Math.min(nbLots, this.venteData.maxLots)) : nbLots
|
|
})
|
|
this.html.find(".nbLots").val(this.venteData.nbLots);
|
|
}
|
|
|
|
setQuantiteIllimite(checked) {
|
|
this.updateVente({ quantiteIllimite: checked })
|
|
this.html.find(".label-quantiteIllimite").text(this.venteData.quantiteIllimite ? "Illimités" : "disponibles");
|
|
HtmlUtility.showControlWhen(this.html.find(".nbLots"), !this.venteData.quantiteIllimite)
|
|
}
|
|
} |