import { DialogItemAchat } from "../dialog-item-achat.js"; import { RdDItem } from "../item.js"; import { RdDUtility } from "../rdd-utility.js"; import { RdDBaseActorSheet } from "./base-actor-sheet.js"; /** * Extend the basic ActorSheet with some very simple modifications * @extends {ActorSheet} */ export class RdDCommerceSheet extends RdDBaseActorSheet { /** @override */ static get defaultOptions() { return mergeObject(super.defaultOptions, { classes: ["rdd", "sheet", "actor"], template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.html", width: 600, height: 720, tabs: [], dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }] }); } get title() { if (this.actor.token && this.actor.token != this.actor.prototypeToken) { return this.actor.token.name; } return super.title } async getData() { const formData = await super.getData(); if (this.actor.token && this.actor.token != this.actor.prototypeToken) { mergeObject(formData, { title: this.actor.token.name, token: { img: this.actor.token.texture.src } }, { overwrite: true }); } return formData; } /* -------------------------------------------- */ /** @override */ activateListeners(html) { super.activateListeners(html); this.html.find('a.item-acheter').click(async event => await this.vente(this.getItem(event))); if (!this.options.editable) return; this.html.find('a.item-quantite-moins').click(async event => await this.getItem(event)?.quantiteIncDec(-1, { supprimerSiZero: false })); this.html.find('a.item-quantite-plus').click(async event => await this.getItem(event)?.quantiteIncDec(1)); this.html.find('input.item-quantite').change(async event => { const newQuantite = Math.max(0, Number.parseInt(this.html.find(event.currentTarget).val())); await this.getItem(event)?.update({ "system.quantite": newQuantite }); }) this.html.find('input.item-cout').change(async event => { const newCout = Math.max(0, Number(this.html.find(event.currentTarget).val())); await this.getItem(event)?.update({ "system.cout": newCout }); }) } getTypesInventaire() { return RdDItem.getItemTypesInventaire('all'); } async vente(item) { const acheteur = RdDUtility.getSelectedActor(); if (!acheteur) { ui.notifications.warn(`Pas d'acheteur sélectionné`); return; } const disponible = this.actor.getQuantiteDisponible(item) if (disponible == 0) { ui.notifications.warn(`${this.name} n'a plus de ${item.name} en vente`); return; } await DialogItemAchat.onAcheter({ item, vendeur: this.actor, acheteur, quantiteIllimite: disponible == undefined, nbLots: disponible ?? 1, tailleLot: 1, prixLot: item.calculerPrixCommercant() }); } }