Vincent Vandemeulebrouck
0b1c5d0a3d
- remplacement des données/JSON dans le html par des Flags sur le ChatMessage - extraction de la gestion des infos de ventes pour rassembler la génération du ChatMessage - on ne perd plus la quantité ou le vendeur - attention au mergeObject: il modifie le premier parametre, ce qui modifiait parfois l'acteur (!!!) et toujours la quantité de l'objet du vendeur lors de la création de l'objet de l'acheteur!
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: []
|
|
});
|
|
}
|
|
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()
|
|
});
|
|
}
|
|
}
|