1
+ import { MonksEnhancedJournal , log , setting , i18n } from '../monks-enhanced-journal.js' ;
2
+ import { MEJHelpers } from '../helpers.js' ;
3
+
4
+ export class AdjustPrice extends FormApplication {
5
+ constructor ( object , options = { } ) {
6
+ super ( options ) ;
7
+
8
+ this . object = object ;
9
+ }
10
+
11
+ /** @override */
12
+ static get defaultOptions ( ) {
13
+ return mergeObject ( super . defaultOptions , {
14
+ id : "adjust-price" ,
15
+ classes : [ "adjust-price" , "monks-journal-sheet" , "dialog" ] ,
16
+ title : i18n ( "MonksEnhancedJournal.AdjustPrices" ) ,
17
+ template : "modules/monks-enhanced-journal/templates/adjust-price.html" ,
18
+ width : 400 ,
19
+ height : 'auto' ,
20
+ closeOnSubmit : true ,
21
+ submitOnClose : false ,
22
+ submitOnChange : false
23
+ } ) ;
24
+ }
25
+
26
+ getData ( options ) {
27
+ const original = game . system ?. documentTypes ?. Item || [ ] ;
28
+ let types = original . filter ( x => MonksEnhancedJournal . includedTypes . includes ( x ) ) ;
29
+ types = types . reduce ( ( obj , t ) => {
30
+ const label = CONFIG . Item ?. typeLabels ?. [ t ] ?? t ;
31
+ obj [ t ] = game . i18n . has ( label ) ? game . i18n . localize ( label ) : t ;
32
+ return obj ;
33
+ } , { } ) ;
34
+ let defaultAdjustment = setting ( "adjustment-defaults" ) ;
35
+ let adjustment = duplicate ( defaultAdjustment ) ;
36
+ if ( this . object )
37
+ adjustment = this . object . getFlag ( 'monks-enhanced-journal' , 'adjustment' ) || { } ;
38
+ else
39
+ defaultAdjustment = { } ;
40
+ let data = {
41
+ adjustment,
42
+ types,
43
+ defaultAdjustment
44
+ }
45
+ data . showConvert = ! ! this . object ;
46
+
47
+ return mergeObject ( super . getData ( options ) , data ) ;
48
+ }
49
+
50
+ activateListeners ( html ) {
51
+ super . activateListeners ( html ) ;
52
+
53
+ $ ( '.convert-button' , html ) . on ( "click" , this . convertItems . bind ( this , html ) ) ;
54
+ $ ( '.cancel' , html ) . on ( "click" , this . close . bind ( this ) ) ;
55
+ $ ( '.reset' , html ) . on ( "click" , this . resetValues . bind ( this ) ) ;
56
+
57
+ $ ( '.sell-field' , html ) . on ( "blur" , this . validateField . bind ( this ) ) ;
58
+ }
59
+
60
+ resetValues ( event ) {
61
+ event . stopPropagation ( ) ;
62
+ event . preventDefault ( ) ;
63
+
64
+ $ ( '.sell-field' , this . element ) . val ( '' ) ;
65
+ $ ( '.buy-field' , this . element ) . val ( '' ) ;
66
+ }
67
+
68
+ validateField ( event ) {
69
+ let val = parseFloat ( $ ( event . currentTarget ) . val ( ) ) ;
70
+ if ( ! isNaN ( val ) && val < 0 ) {
71
+ $ ( event . currentTarget ) . val ( '' ) ;
72
+ }
73
+ }
74
+
75
+ async _updateObject ( event , formData ) {
76
+ let data = foundry . utils . expandObject ( formData ) ;
77
+
78
+ for ( let [ k , v ] of Object . entries ( data . adjustment ) ) {
79
+ if ( v . sell == undefined )
80
+ delete data . adjustment [ k ] . sell ;
81
+ if ( v . buy == undefined )
82
+ delete data . adjustment [ k ] . buy ;
83
+
84
+ if ( Object . keys ( data . adjustment [ k ] ) . length == 0 )
85
+ delete data . adjustment [ k ] ;
86
+ }
87
+
88
+ if ( this . object ) {
89
+ await this . object . unsetFlag ( 'monks-enhanced-journal' , 'adjustment' ) ;
90
+ await this . object . setFlag ( 'monks-enhanced-journal' , 'adjustment' , data . adjustment ) ;
91
+ } else
92
+ await game . settings . set ( "monks-enhanced-journal" , "adjustment-defaults" , data . adjustment , { diff : false } ) ;
93
+ }
94
+
95
+ async convertItems ( html , event ) {
96
+ event . stopPropagation ( ) ;
97
+ event . preventDefault ( ) ;
98
+
99
+ const fd = new FormDataExtended ( html [ 0 ] ) ;
100
+ let data = foundry . utils . expandObject ( fd . object ) ;
101
+
102
+ for ( let [ k , v ] of Object . entries ( data . adjustment ) ) {
103
+ if ( v . sell == undefined )
104
+ delete data . adjustment [ k ] . sell ;
105
+ if ( v . buy == undefined )
106
+ delete data . adjustment [ k ] . buy ;
107
+
108
+ if ( Object . keys ( data . adjustment [ k ] ) . length == 0 )
109
+ delete data . adjustment [ k ] ;
110
+ }
111
+
112
+ let adjustment = Object . assign ( { } , setting ( "adjustment-defaults" ) , data . adjustment || { } ) ;
113
+
114
+ let items = this . object . getFlag ( 'monks-enhanced-journal' , 'items' ) || [ ] ;
115
+
116
+ for ( let item of items ) {
117
+ let sell = adjustment [ item . type ] ?. sell ?? adjustment . default . sell ?? 1 ;
118
+ let price = MEJHelpers . getPrice ( getProperty ( item , "flags.monks-enhanced-journal.price" ) ) ;
119
+ let cost = Math . max ( Math . ceil ( ( price . value * sell ) , 1 ) ) + " " + price . currency ;
120
+ setProperty ( item , "flags.monks-enhanced-journal.cost" , cost ) ;
121
+ }
122
+
123
+ await this . object . update ( { "flags.monks-enhanced-journal.items" : items } , { focus : false } ) ;
124
+ }
125
+ }
0 commit comments