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.hbs`, 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)
|
|
}
|
|
} |