forked from public/foundryvtt-reve-de-dragon
		
	
		
			
				
	
	
		
			110 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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.hbs`, 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)
 | |
|   }
 | |
| } |