#184 Améliorations du commerce #447

Merged
vincent.vandeme merged 1 commits from v1.4-commerce into v1.4 2021-05-08 07:41:03 +02:00
4 changed files with 21 additions and 18 deletions

View File

@ -963,15 +963,14 @@ export class RdDActor extends Actor {
async processDropItem(event, dragData, objetVersConteneur) { async processDropItem(event, dragData, objetVersConteneur) {
console.log("DRAG", this.id, dragData); console.log("DRAG", this.id, dragData);
const droppedItemId = dragData.id || dragData.data._id; const itemId = dragData.id || dragData.data._id;
if (dragData.actorId && dragData.actorId != this.id) { if (dragData.actorId && dragData.actorId != this.id) {
console.log("Moving objects", dragData); console.log("Moving objects", dragData);
this.moveItemsBetweenActors(droppedItemId, dragData.actorId); this.moveItemsBetweenActors(itemId, dragData.actorId);
return false; return false;
} }
let result = true; let result = true;
const destId = $(event.target).parents(".item").attr("data-item-id"); const destId = $(event.target).parents(".item").attr("data-item-id");
const itemId = dragData.id || dragData.data._id;
const item = this.getObjet(itemId); const item = this.getObjet(itemId);
if (item?.isEquipement()) { if (item?.isEquipement()) {
if (dragData.actorId == this.id) { if (dragData.actorId == this.id) {
@ -1061,7 +1060,7 @@ export class RdDActor extends Actor {
async regrouperEquipementsSimilaires(item, dest) { async regrouperEquipementsSimilaires(item, dest) {
await dest.quantiteIncDec(Misc.templateData(item).quantite); await dest.quantiteIncDec(Misc.templateData(item).quantite);
await this.deleteEmbeddedDocuments('Item', [item.id]); await item.delete();
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -3272,6 +3271,10 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async achatVente(vendeurId, acheteurId, venteData, chatMessageIdVente) { async achatVente(vendeurId, acheteurId, venteData, chatMessageIdVente) {
if (vendeurId == acheteurId){
ui.notifications.info("Inutile de se vendre à soi-même");
return;
}
if (!game.user.isGM) { if (!game.user.isGM) {
RdDActor.remoteActorCall({ RdDActor.remoteActorCall({
userId: Misc.connectedGMOrUser(), userId: Misc.connectedGMOrUser(),
@ -3286,7 +3289,6 @@ export class RdDActor extends Actor {
const itemId = venteData.item._id; const itemId = venteData.item._id;
const coutDeniers = Math.floor((venteData.prixTotal ?? 0) * 100); const coutDeniers = Math.floor((venteData.prixTotal ?? 0) * 100);
const achat = duplicate(venteData.item);
venteData.quantiteTotal = (venteData.nombreLots ?? 1) * (venteData.tailleLot); venteData.quantiteTotal = (venteData.nombreLots ?? 1) * (venteData.tailleLot);
if (acheteur) { if (acheteur) {
let resteAcheteur = await acheteur.depenser(coutDeniers); let resteAcheteur = await acheteur.depenser(coutDeniers);
@ -3298,15 +3300,15 @@ export class RdDActor extends Actor {
if (vendeur) { if (vendeur) {
let itemData = Misc.data(vendeur.getObjet(itemId)); let itemData = Misc.data(vendeur.getObjet(itemId));
// diminuer QuantiteVendeur // diminuer QuantiteVendeur
if (("quantite" in itemData.data && itemData.data.quantite < venteData.nombreLots) if ("quantite" in itemData.data ?
|| (!("quantite" in itemData.data) && venteData.nombreLots != 1)) { itemData.data.quantite < venteData.quantiteTotal : venteData.nombreLots != 1) {
// pas assez de quantite // pas assez de quantite
await acheteur?.ajouterDeniers(coutDeniers); await acheteur?.ajouterDeniers(coutDeniers);
ui.notifications.warn(`Le vendeur n'a plus assez de ${venteData.item.name} !`); ui.notifications.warn(`Le vendeur n'a plus assez de ${venteData.item.name} !`);
return; return;
} }
vendeur.ajouterDeniers(coutDeniers); vendeur.ajouterDeniers(coutDeniers);
let qtReste = (itemData.data.quantite ?? 1) - venteData.nombreLots; let qtReste = (itemData.data.quantite ?? 1) - venteData.quantiteTotal;
if (qtReste == 0) { if (qtReste == 0) {
vendeur.deleteEmbeddedDocuments("Item", itemId); vendeur.deleteEmbeddedDocuments("Item", itemId);
} }
@ -3316,11 +3318,11 @@ export class RdDActor extends Actor {
} }
if (acheteur) { if (acheteur) {
// ajouter l'objet à l'acheteur // TODO: achat depuis un compendium
achat._id = undefined; const achat = duplicate(Misc.data(vendeur?.getObjet(itemId) ?? game.items.get(itemId)));
if ("quantite" in achat.data) {
achat.data.quantite = venteData.quantiteTotal; achat.data.quantite = venteData.quantiteTotal;
} achat._id = undefined;
// TODO: investigate bug - création marche mal...
await acheteur.createEmbeddedDocuments("Item", [achat]); await acheteur.createEmbeddedDocuments("Item", [achat]);
} }
if (coutDeniers > 0) { if (coutDeniers > 0) {
@ -3332,11 +3334,11 @@ export class RdDActor extends Actor {
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', venteData) content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', venteData)
}); });
venteData.quantiteNbLots -= venteData.nombreLots; if (venteData.quantiteNbLots <= venteData.nombreLots) {
if (venteData.quantiteNbLots <= 0) {
ChatUtility.removeChatMessageId(chatMessageIdVente); ChatUtility.removeChatMessageId(chatMessageIdVente);
} }
else { else {
venteData.quantiteNbLots -= venteData.nombreLots;
venteData.jsondata = JSON.stringify(venteData.item); venteData.jsondata = JSON.stringify(venteData.item);
let newMessageVente = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', venteData); let newMessageVente = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', venteData);
const messageVente = game.messages.get(chatMessageIdVente); const messageVente = game.messages.get(chatMessageIdVente);

View File

@ -11,7 +11,7 @@ export class DialogItemAchat extends Dialog {
ui.notifications.warn("Impossible d'acheter: informations sur l'objet manquantes") ui.notifications.warn("Impossible d'acheter: informations sur l'objet manquantes")
return; return;
} }
const vendeurId = event.currentTarget.attributes['data-actorId']?.value; const vendeurId = event.currentTarget.attributes['data-vendeurId']?.value;
const vendeur = vendeurId ? game.actors.get(vendeurId) : undefined; const vendeur = vendeurId ? game.actors.get(vendeurId) : undefined;
const acheteur = RdDUtility.getSelectedActor(); const acheteur = RdDUtility.getSelectedActor();
@ -25,6 +25,7 @@ export class DialogItemAchat extends Dialog {
const prixLot = event.currentTarget.attributes['data-prixLot']?.value ?? 0; const prixLot = event.currentTarget.attributes['data-prixLot']?.value ?? 0;
let venteData = { let venteData = {
item: itemData, item: itemData,
vendeurId: vendeurId,
vendeur: Misc.data(vendeur), vendeur: Misc.data(vendeur),
acheteur: Misc.data(acheteur), acheteur: Misc.data(acheteur),
tailleLot: event.currentTarget.attributes['data-tailleLot']?.value ?? 1, tailleLot: event.currentTarget.attributes['data-tailleLot']?.value ?? 1,

View File

@ -8,7 +8,7 @@ export class DialogItemVente extends Dialog {
const venteData = { const venteData = {
item: itemData, item: itemData,
alias: item.actor?.name ?? game.user.name, alias: item.actor?.name ?? game.user.name,
actorId: item.actor?.id, vendeurId: item.actor?.id,
prixOrigine: itemData.data.cout, prixOrigine: itemData.data.cout,
prixUnitaire: itemData.data.cout, prixUnitaire: itemData.data.cout,
prixLot: itemData.data.cout, prixLot: itemData.data.cout,

View File

@ -1,5 +1,5 @@
<div class="post-item" data-transfer="{{transfer}}"> <div class="post-item" data-transfer="{{transfer}}">
<h3>Acheter {{#if alias}}{{alias}} propose: {{/if}}{{item.name}}</h3> <h3>{{#if alias}}{{alias}} propose:{{else}}Acheter {{/if}}{{item.name}}</h3>
{{#if item.img}} {{#if item.img}}
<img src="{{item.img}}" title="{{item.name}}" /> <img src="{{item.img}}" title="{{item.name}}" />
{{/if}} {{/if}}
@ -26,7 +26,7 @@
<span class="chat-card-button-area"> <span class="chat-card-button-area">
<a class="button-acheter chat-card-button" <a class="button-acheter chat-card-button"
data-jsondata='{{jsondata}}' data-jsondata='{{jsondata}}'
{{#if actorId}}data-actorId='{{actorId}}'{{/if}} {{#if vendeurId}}data-vendeurId='{{vendeurId}}'{{/if}}
data-tailleLot="{{tailleLot}}" data-tailleLot="{{tailleLot}}"
data-quantiteNbLots="{{quantiteNbLots}}" data-quantiteNbLots="{{quantiteNbLots}}"
data-quantiteIllimite="{{#if quantiteIllimite}}true{{else}}false{{/if}}" data-quantiteIllimite="{{#if quantiteIllimite}}true{{else}}false{{/if}}"