Vincent Vandemeulebrouck
f116003d6f
On peut de nouveau vendre des items sans propriétaire, depuis les compendiums ou depuis l'onglet des Objets
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)
|
|
}
|
|
} |