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) } }