Vincent Vandemeulebrouck
a103239288
Quand mergeObject est utilisé pour retourner une valeur, faire très attention à ne pas passer un Item/Actor, ou une de ses sous parties en premier paramètre sans préciser l'option { inplace: false } Sinon, le premier paramètre subit une mutation!
91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
import { DialogItemAchat } from "../achat-vente/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 foundry.utils.mergeObject(super.defaultOptions, {
|
|
template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.html",
|
|
width: 600, height: 720,
|
|
tabs: []
|
|
}, { inplace: false })
|
|
}
|
|
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) {
|
|
foundry.utils.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()
|
|
});
|
|
}
|
|
}
|