@things-factory/accounting 8.0.40 → 9.0.0-9.0.0-beta.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/dist-client/pages/accounting-category/accounting-category-tree-page.js +1 -1
  2. package/dist-client/pages/accounting-category/accounting-category-tree-page.js.map +1 -1
  3. package/dist-client/pages/bank/bank-importer.d.ts +23 -0
  4. package/dist-client/pages/bank/bank-importer.js +93 -0
  5. package/dist-client/pages/bank/bank-importer.js.map +1 -0
  6. package/dist-client/pages/bank/bank-list-page.d.ts +66 -0
  7. package/dist-client/pages/bank/bank-list-page.js +370 -0
  8. package/dist-client/pages/bank/bank-list-page.js.map +1 -0
  9. package/dist-client/pages/bank-account/bank-account-importer.d.ts +23 -0
  10. package/dist-client/pages/bank-account/bank-account-importer.js +93 -0
  11. package/dist-client/pages/bank-account/bank-account-importer.js.map +1 -0
  12. package/dist-client/pages/bank-account/bank-account-list-page.d.ts +66 -0
  13. package/dist-client/pages/bank-account/bank-account-list-page.js +370 -0
  14. package/dist-client/pages/bank-account/bank-account-list-page.js.map +1 -0
  15. package/dist-client/pages/financial-institution/financial-institution-importer.d.ts +23 -0
  16. package/dist-client/pages/financial-institution/financial-institution-importer.js +93 -0
  17. package/dist-client/pages/financial-institution/financial-institution-importer.js.map +1 -0
  18. package/dist-client/pages/financial-institution/financial-institution-list-page.d.ts +66 -0
  19. package/dist-client/pages/financial-institution/financial-institution-list-page.js +370 -0
  20. package/dist-client/pages/financial-institution/financial-institution-list-page.js.map +1 -0
  21. package/dist-client/tsconfig.tsbuildinfo +1 -1
  22. package/dist-server/migrations/1725201567284-seed-country-codes.d.ts +5 -0
  23. package/dist-server/migrations/1725201567284-seed-country-codes.js +248 -0
  24. package/dist-server/migrations/1725201567284-seed-country-codes.js.map +1 -0
  25. package/dist-server/migrations/1725201667385-seed-financial-institutions.d.ts +5 -0
  26. package/dist-server/migrations/1725201667385-seed-financial-institutions.js +348 -0
  27. package/dist-server/migrations/1725201667385-seed-financial-institutions.js.map +1 -0
  28. package/dist-server/service/bank-account/bank-account-history.d.ts +34 -0
  29. package/dist-server/service/bank-account/bank-account-history.js +172 -0
  30. package/dist-server/service/bank-account/bank-account-history.js.map +1 -0
  31. package/dist-server/service/bank-account/bank-account-mutation.d.ts +10 -0
  32. package/dist-server/service/bank-account/bank-account-mutation.js +128 -0
  33. package/dist-server/service/bank-account/bank-account-mutation.js.map +1 -0
  34. package/dist-server/service/bank-account/bank-account-query.d.ts +11 -0
  35. package/dist-server/service/bank-account/bank-account-query.js +79 -0
  36. package/dist-server/service/bank-account/bank-account-query.js.map +1 -0
  37. package/dist-server/service/bank-account/bank-account-type.d.ts +39 -0
  38. package/dist-server/service/bank-account/bank-account-type.js +153 -0
  39. package/dist-server/service/bank-account/bank-account-type.js.map +1 -0
  40. package/dist-server/service/bank-account/bank-account.d.ts +38 -0
  41. package/dist-server/service/bank-account/bank-account.js +164 -0
  42. package/dist-server/service/bank-account/bank-account.js.map +1 -0
  43. package/dist-server/service/bank-account/event-subscriber.d.ts +7 -0
  44. package/dist-server/service/bank-account/event-subscriber.js +21 -0
  45. package/dist-server/service/bank-account/event-subscriber.js.map +1 -0
  46. package/dist-server/service/bank-account/index.d.ts +7 -0
  47. package/dist-server/service/bank-account/index.js +12 -0
  48. package/dist-server/service/bank-account/index.js.map +1 -0
  49. package/dist-server/service/financial-institution/financial-institution-mutation.d.ts +10 -0
  50. package/dist-server/service/financial-institution/financial-institution-mutation.js +169 -0
  51. package/dist-server/service/financial-institution/financial-institution-mutation.js.map +1 -0
  52. package/dist-server/service/financial-institution/financial-institution-query.d.ts +12 -0
  53. package/dist-server/service/financial-institution/financial-institution-query.js +97 -0
  54. package/dist-server/service/financial-institution/financial-institution-query.js.map +1 -0
  55. package/dist-server/service/financial-institution/financial-institution-type.d.ts +32 -0
  56. package/dist-server/service/financial-institution/financial-institution-type.js +126 -0
  57. package/dist-server/service/financial-institution/financial-institution-type.js.map +1 -0
  58. package/dist-server/service/financial-institution/financial-institution.d.ts +34 -0
  59. package/dist-server/service/financial-institution/financial-institution.js +137 -0
  60. package/dist-server/service/financial-institution/financial-institution.js.map +1 -0
  61. package/dist-server/service/financial-institution/index.d.ts +6 -0
  62. package/dist-server/service/financial-institution/index.js +10 -0
  63. package/dist-server/service/financial-institution/index.js.map +1 -0
  64. package/dist-server/service/index.d.ts +3 -2
  65. package/dist-server/service/index.js +5 -0
  66. package/dist-server/service/index.js.map +1 -1
  67. package/dist-server/service/payment/index.d.ts +1 -2
  68. package/dist-server/service/payment/payment-history.d.ts +8 -1
  69. package/dist-server/service/payment/payment-history.js +41 -10
  70. package/dist-server/service/payment/payment-history.js.map +1 -1
  71. package/dist-server/service/payment/payment-type.d.ts +7 -1
  72. package/dist-server/service/payment/payment-type.js +24 -0
  73. package/dist-server/service/payment/payment-type.js.map +1 -1
  74. package/dist-server/service/payment/payment.d.ts +12 -0
  75. package/dist-server/service/payment/payment.js +36 -1
  76. package/dist-server/service/payment/payment.js.map +1 -1
  77. package/dist-server/tsconfig.tsbuildinfo +1 -1
  78. package/helps/accounting/bank-account.md +160 -0
  79. package/helps/accounting/bank.md +160 -0
  80. package/helps/accounting/financial-institution.md +160 -0
  81. package/package.json +7 -7
  82. package/client/activities/activity-book-edit.ts +0 -88
  83. package/client/activities/activity-book-view.ts +0 -88
  84. package/client/activities/activity-expense-edit.ts +0 -88
  85. package/client/activities/activity-expense-view.ts +0 -88
  86. package/client/bootstrap.ts +0 -10
  87. package/client/components/accounting-category-selector.ts +0 -136
  88. package/client/components/accounting-category-view.ts +0 -75
  89. package/client/grist-editors/grist-editor-accounting-category-object.ts +0 -83
  90. package/client/grist-editors/grist-renderer-accounting-category-object.ts +0 -13
  91. package/client/index.ts +0 -0
  92. package/client/pages/account/account-importer.ts +0 -97
  93. package/client/pages/account/account-list-page.ts +0 -364
  94. package/client/pages/accounting-category/accounting-category-importer.ts +0 -97
  95. package/client/pages/accounting-category/accounting-category-list-page.ts +0 -368
  96. package/client/pages/accounting-category/accounting-category-tree-page.ts +0 -338
  97. package/client/pages/accounting-document/accounting-document-importer.ts +0 -90
  98. package/client/pages/accounting-document/accounting-document-list-page.ts +0 -398
  99. package/client/pages/financial-statement/financial-statement-importer.ts +0 -97
  100. package/client/pages/financial-statement/financial-statement-list-page.ts +0 -338
  101. package/client/pages/fiscal-month/fiscal-month-importer.ts +0 -90
  102. package/client/pages/fiscal-month/fiscal-month-list-page.ts +0 -398
  103. package/client/pages/fiscal-quarter/fiscal-quarter-importer.ts +0 -90
  104. package/client/pages/fiscal-quarter/fiscal-quarter-list-page.ts +0 -398
  105. package/client/pages/fiscal-year/fiscal-year-importer.ts +0 -90
  106. package/client/pages/fiscal-year/fiscal-year-list-page.ts +0 -398
  107. package/client/pages/income-statement/income-statement-importer.ts +0 -97
  108. package/client/pages/income-statement/income-statement-list-page.ts +0 -338
  109. package/client/pages/payment/payment-importer.ts +0 -90
  110. package/client/pages/payment/payment-list-page.ts +0 -398
  111. package/client/pages/transaction/transaction-importer.ts +0 -97
  112. package/client/pages/transaction/transaction-list-page.ts +0 -338
  113. package/client/route.ts +0 -35
  114. package/client/tsconfig.json +0 -13
  115. package/client/types/accounting-category.ts +0 -23
  116. package/client/types/index.ts +0 -1
  117. package/server/activities/activity-book.ts +0 -172
  118. package/server/activities/activity-expense.ts +0 -149
  119. package/server/activities/index.ts +0 -18
  120. package/server/controllers/index.ts +0 -1
  121. package/server/controllers/summary-statements.ts +0 -166
  122. package/server/index.ts +0 -6
  123. package/server/middlewares/index.ts +0 -3
  124. package/server/migrations/1725200507196-seed-fiscal-entities.ts +0 -106
  125. package/server/migrations/1725201467183-seed-accounts.ts +0 -339
  126. package/server/migrations/index.ts +0 -9
  127. package/server/routes.ts +0 -26
  128. package/server/service/account/account-history.ts +0 -117
  129. package/server/service/account/account-mutation.ts +0 -140
  130. package/server/service/account/account-query.ts +0 -51
  131. package/server/service/account/account-type.ts +0 -44
  132. package/server/service/account/account.ts +0 -97
  133. package/server/service/account/event-subscriber.ts +0 -17
  134. package/server/service/account/index.ts +0 -9
  135. package/server/service/accounting-category/accounting-category-history.ts +0 -129
  136. package/server/service/accounting-category/accounting-category-mutation.ts +0 -148
  137. package/server/service/accounting-category/accounting-category-query.ts +0 -74
  138. package/server/service/accounting-category/accounting-category-type.ts +0 -48
  139. package/server/service/accounting-category/accounting-category.ts +0 -100
  140. package/server/service/accounting-category/event-subscriber.ts +0 -20
  141. package/server/service/accounting-category/index.ts +0 -9
  142. package/server/service/accounting-document/accounting-document-history.ts +0 -123
  143. package/server/service/accounting-document/accounting-document-mutation.ts +0 -137
  144. package/server/service/accounting-document/accounting-document-query.ts +0 -48
  145. package/server/service/accounting-document/accounting-document-type.ts +0 -52
  146. package/server/service/accounting-document/accounting-document.ts +0 -93
  147. package/server/service/accounting-document/event-subscriber.ts +0 -17
  148. package/server/service/accounting-document/index.ts +0 -9
  149. package/server/service/common-type.ts +0 -12
  150. package/server/service/financial-statement/event-subscriber.ts +0 -17
  151. package/server/service/financial-statement/financial-statement-history.ts +0 -129
  152. package/server/service/financial-statement/financial-statement-line-item.ts +0 -82
  153. package/server/service/financial-statement/financial-statement-mutation.ts +0 -148
  154. package/server/service/financial-statement/financial-statement-query.ts +0 -53
  155. package/server/service/financial-statement/financial-statement-type.ts +0 -51
  156. package/server/service/financial-statement/financial-statement.ts +0 -116
  157. package/server/service/financial-statement/index.ts +0 -10
  158. package/server/service/fiscal-month/fiscal-month-mutation.ts +0 -145
  159. package/server/service/fiscal-month/fiscal-month-query.ts +0 -58
  160. package/server/service/fiscal-month/fiscal-month-type.ts +0 -66
  161. package/server/service/fiscal-month/fiscal-month.ts +0 -84
  162. package/server/service/fiscal-month/index.ts +0 -7
  163. package/server/service/fiscal-quarter/fiscal-quarter-mutation.ts +0 -148
  164. package/server/service/fiscal-quarter/fiscal-quarter-query.ts +0 -60
  165. package/server/service/fiscal-quarter/fiscal-quarter-type.ts +0 -60
  166. package/server/service/fiscal-quarter/fiscal-quarter.ts +0 -80
  167. package/server/service/fiscal-quarter/index.ts +0 -7
  168. package/server/service/fiscal-year/fiscal-year-mutation.ts +0 -145
  169. package/server/service/fiscal-year/fiscal-year-query.ts +0 -53
  170. package/server/service/fiscal-year/fiscal-year-type.ts +0 -54
  171. package/server/service/fiscal-year/fiscal-year.ts +0 -76
  172. package/server/service/fiscal-year/index.ts +0 -7
  173. package/server/service/income-statement/event-subscriber.ts +0 -17
  174. package/server/service/income-statement/income-statement-history.ts +0 -133
  175. package/server/service/income-statement/income-statement-line-item.ts +0 -84
  176. package/server/service/income-statement/income-statement-mutation.ts +0 -147
  177. package/server/service/income-statement/income-statement-query.ts +0 -50
  178. package/server/service/income-statement/income-statement-type.ts +0 -51
  179. package/server/service/income-statement/income-statement.ts +0 -120
  180. package/server/service/income-statement/index.ts +0 -10
  181. package/server/service/index.ts +0 -108
  182. package/server/service/payment/event-subscriber.ts +0 -17
  183. package/server/service/payment/index.ts +0 -9
  184. package/server/service/payment/payment-history.ts +0 -132
  185. package/server/service/payment/payment-mutation.ts +0 -139
  186. package/server/service/payment/payment-query.ts +0 -50
  187. package/server/service/payment/payment-type.ts +0 -64
  188. package/server/service/payment/payment.ts +0 -123
  189. package/server/service/transaction/event-subscriber.ts +0 -17
  190. package/server/service/transaction/index.ts +0 -9
  191. package/server/service/transaction/transaction-history.ts +0 -161
  192. package/server/service/transaction/transaction-mutation.ts +0 -146
  193. package/server/service/transaction/transaction-query.ts +0 -50
  194. package/server/service/transaction/transaction-type.ts +0 -48
  195. package/server/service/transaction/transaction.ts +0 -230
  196. package/server/tsconfig.json +0 -10
@@ -1,368 +0,0 @@
1
- import '@operato/data-grist'
2
-
3
- import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'
4
- import { PageView, store } from '@operato/shell'
5
- import { css, html } from 'lit'
6
- import { customElement, property, query } from 'lit/decorators.js'
7
- import { ScopedElementsMixin } from '@open-wc/scoped-elements'
8
- import { ColumnConfig, DataGrist, FetchOption, SortersControl } from '@operato/data-grist'
9
- import { client } from '@operato/graphql'
10
- import { i18next, localize } from '@operato/i18n'
11
- import { notify, openPopup } from '@operato/layout'
12
- import { OxPopup } from '@operato/popup'
13
- import { isMobileDevice } from '@operato/utils'
14
-
15
- import { connect } from 'pwa-helpers/connect-mixin'
16
- import gql from 'graphql-tag'
17
-
18
- import { AccountingCategoryImporter } from './accounting-category-importer'
19
-
20
- @customElement('accounting-category-list-page')
21
- export class AccountingCategoryListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
22
- static styles = [
23
- ScrollbarStyles,
24
- CommonGristStyles,
25
- css`
26
- :host {
27
- display: flex;
28
-
29
- width: 100%;
30
-
31
- --grid-record-emphasized-background-color: #8b0000;
32
- --grid-record-emphasized-color: #ff6b6b;
33
- }
34
-
35
- ox-grist {
36
- overflow-y: auto;
37
- flex: 1;
38
- }
39
- `
40
- ]
41
-
42
- static get scopedElements() {
43
- return {
44
- 'accounting-category-importer': AccountingCategoryImporter
45
- }
46
- }
47
-
48
- @property({ type: Object }) gristConfig: any
49
- @property({ type: String }) mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'
50
-
51
- @query('ox-grist') private grist!: DataGrist
52
- @query('#sorter-control') private sortersControl!: OxPopup
53
-
54
- get context() {
55
- return {
56
- title: i18next.t('title.accounting-category list'),
57
- search: {
58
- handler: (search: string) => {
59
- this.grist.searchText = search
60
- },
61
- value: this.grist?.searchText || '',
62
- autofocus: true
63
- },
64
- filter: {
65
- handler: () => {
66
- this.grist.toggleHeadroom()
67
- }
68
- },
69
- help: 'accounting/accounting-category',
70
- actions: [
71
- {
72
- title: i18next.t('button.save'),
73
- action: this._updateAccountingCategory.bind(this),
74
- ...CommonButtonStyles.save
75
- },
76
- {
77
- title: i18next.t('button.delete'),
78
- action: this._deleteAccountingCategory.bind(this),
79
- ...CommonButtonStyles.delete
80
- }
81
- ],
82
- exportable: {
83
- name: i18next.t('title.accounting-category list'),
84
- data: this.exportHandler.bind(this)
85
- },
86
- importable: {
87
- handler: this.importHandler.bind(this)
88
- }
89
- }
90
- }
91
-
92
- render() {
93
- const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
94
-
95
- return html`
96
- <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
97
- <div slot="headroom">
98
- <div id="filters">
99
- <ox-filters-form autofocus></ox-filters-form>
100
- </div>
101
-
102
- <div id="sorters">
103
- Sort
104
- <mwc-icon
105
- @click=${e => {
106
- const target = e.currentTarget
107
- this.sortersControl.open({
108
- right: 0,
109
- top: target.offsetTop + target.offsetHeight
110
- })
111
- }}
112
- >expand_more</mwc-icon
113
- >
114
- <ox-popup id="sorter-control">
115
- <ox-sorters-control> </ox-sorters-control>
116
- </ox-popup>
117
- </div>
118
-
119
- <div id="modes">
120
- <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
121
- <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
122
- <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
123
- </div>
124
- </div>
125
- </ox-grist>
126
- `
127
- }
128
-
129
- async pageInitialized(lifecycle: any) {
130
- this.gristConfig = {
131
- list: {
132
- fields: ['name', 'description'],
133
- details: ['active', 'updatedAt']
134
- },
135
- columns: [
136
- { type: 'gutter', gutterName: 'sequence' },
137
- { type: 'gutter', gutterName: 'row-selector', multiple: true },
138
- {
139
- type: 'string',
140
- name: 'code',
141
- header: i18next.t('field.code'),
142
- record: {
143
- editable: true,
144
- mandatory: true
145
- },
146
- filter: 'search',
147
- sortable: true,
148
- width: 150
149
- },
150
- {
151
- type: 'string',
152
- name: 'name',
153
- header: i18next.t('field.name'),
154
- record: {
155
- editable: true,
156
- mandatory: true
157
- },
158
- filter: 'search',
159
- sortable: true,
160
- width: 150
161
- },
162
- {
163
- type: 'resource-object',
164
- name: 'parent',
165
- header: i18next.t('field.parent'),
166
- record: {
167
- editable: true
168
- },
169
- filter: true,
170
- sortable: true,
171
- width: 150
172
- },
173
- {
174
- type: 'string',
175
- name: 'description',
176
- header: i18next.t('field.description'),
177
- record: {
178
- editable: true
179
- },
180
- filter: 'search',
181
- width: 200
182
- },
183
- {
184
- type: 'checkbox',
185
- name: 'active',
186
- label: true,
187
- header: i18next.t('field.active'),
188
- record: {
189
- editable: true
190
- },
191
- filter: true,
192
- sortable: true,
193
- width: 60
194
- },
195
- {
196
- type: 'resource-object',
197
- name: 'updater',
198
- header: i18next.t('field.updater'),
199
- record: {
200
- editable: false
201
- },
202
- sortable: true,
203
- width: 120
204
- },
205
- {
206
- type: 'datetime',
207
- name: 'updatedAt',
208
- header: i18next.t('field.updated_at'),
209
- record: {
210
- editable: false
211
- },
212
- sortable: true,
213
- width: 180
214
- }
215
- ],
216
- rows: {
217
- selectable: {
218
- multiple: true
219
- }
220
- },
221
- sorters: [
222
- {
223
- name: 'name'
224
- }
225
- ]
226
- }
227
- }
228
-
229
- async pageUpdated(changes: any, lifecycle: any) {
230
- if (this.active) {
231
- // do something here when this page just became as active
232
- }
233
- }
234
-
235
- async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) {
236
- const response = await client.query({
237
- query: gql`
238
- query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
239
- responses: accountingCategories(filters: $filters, pagination: $pagination, sortings: $sortings) {
240
- items {
241
- id
242
- code
243
- name
244
- description
245
- active
246
- parent {
247
- code
248
- name
249
- description
250
- }
251
- updater {
252
- id
253
- name
254
- }
255
- updatedAt
256
- }
257
- total
258
- }
259
- }
260
- `,
261
- variables: {
262
- filters,
263
- pagination: { page, limit },
264
- sortings
265
- }
266
- })
267
-
268
- return {
269
- total: response.data.responses.total || 0,
270
- records: response.data.responses.items || []
271
- }
272
- }
273
-
274
- async _deleteAccountingCategory() {
275
- if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {
276
- const ids = this.grist.selected.map(record => record.id)
277
- if (ids && ids.length > 0) {
278
- const response = await client.mutate({
279
- mutation: gql`
280
- mutation ($ids: [String!]!) {
281
- deleteAccountingCategories(ids: $ids)
282
- }
283
- `,
284
- variables: {
285
- ids
286
- }
287
- })
288
-
289
- if (!response.errors) {
290
- this.grist.fetch()
291
- notify({
292
- message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
293
- })
294
- }
295
- }
296
- }
297
- }
298
-
299
- async _updateAccountingCategory() {
300
- let patches = this.grist.dirtyRecords
301
- if (patches && patches.length) {
302
- patches = patches.map(patch => {
303
- let patchField: any = patch.id ? { id: patch.id } : {}
304
- const dirtyFields = patch.__dirtyfields__
305
- for (let key in dirtyFields) {
306
- patchField[key] = dirtyFields[key].after
307
- }
308
- patchField.cuFlag = patch.__dirty__
309
-
310
- return patchField
311
- })
312
-
313
- const response = await client.mutate({
314
- mutation: gql`
315
- mutation ($patches: [AccountingCategoryPatch!]!) {
316
- updateMultipleAccountingCategory(patches: $patches) {
317
- name
318
- }
319
- }
320
- `,
321
- variables: {
322
- patches
323
- }
324
- })
325
-
326
- if (!response.errors) {
327
- this.grist.fetch()
328
- }
329
- }
330
- }
331
-
332
- async exportHandler() {
333
- const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
334
- const targetFieldSet = new Set(['id', 'name', 'description', 'active'])
335
-
336
- return exportTargets.map(accountingCategory => {
337
- let tempObj = {}
338
- for (const field of targetFieldSet) {
339
- tempObj[field] = accountingCategory[field]
340
- }
341
-
342
- return tempObj
343
- })
344
- }
345
-
346
- async importHandler(records) {
347
- const popup = openPopup(
348
- html`
349
- <accounting-category-importer
350
- .accountingCategories=${records}
351
- @imported=${() => {
352
- history.back()
353
- this.grist.fetch()
354
- }}
355
- ></accounting-category-importer>
356
- `,
357
- {
358
- backdrop: true,
359
- size: 'large',
360
- title: i18next.t('title.import accounting-category')
361
- }
362
- )
363
-
364
- popup.onclosed = () => {
365
- this.grist.fetch()
366
- }
367
- }
368
- }
@@ -1,338 +0,0 @@
1
- import '@operato/data-tree'
2
- import '@operato/context/ox-context-page-toolbar.js'
3
-
4
- import { css, html, PropertyValues } from 'lit'
5
- import { customElement, property, query, state } from 'lit/decorators.js'
6
- import { ScopedElementsMixin } from '@open-wc/scoped-elements'
7
- import { client } from '@operato/graphql'
8
- import { i18next, localize } from '@operato/i18n'
9
- import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
10
- import { CustomAlert, PageView, store } from '@operato/shell'
11
-
12
- import { connect } from 'pwa-helpers/connect-mixin'
13
- import gql from 'graphql-tag'
14
-
15
- import { AccountingCategory } from '../../types/accounting-category'
16
-
17
- import { AccountingCategoryView } from '../../components/accounting-category-view'
18
-
19
- const SubAccountingCategoryFragment = gql`
20
- fragment SubAccountingCategoryFragment on AccountingCategory {
21
- id
22
- code
23
- name
24
- description
25
- active
26
- updater {
27
- id
28
- name
29
- }
30
- updatedAt
31
- }
32
- `
33
-
34
- @customElement('accounting-category-tree-page')
35
- export class AccountingCategoryTreePage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
36
- static styles = [
37
- CommonHeaderStyles,
38
- ScrollbarStyles,
39
- css`
40
- :host {
41
- display: flex;
42
- flex-direction: column;
43
-
44
- width: 100%;
45
- overflow: auto;
46
- }
47
-
48
- content {
49
- flex: 1;
50
- display: flex;
51
- flex-direction: row;
52
- }
53
-
54
- div[editor] {
55
- width: 300px;
56
- display: flex;
57
- flex-direction: column;
58
- }
59
-
60
- ox-tree-vertical {
61
- flex: 1;
62
- overflow: auto;
63
- }
64
-
65
- accounting-category-view {
66
- flex: 1;
67
- padding: var(--spacing-medium);
68
- background-color: var(--md-sys-color-surface-variant);
69
- overflow: auto;
70
- }
71
-
72
- .footer button[disabled] {
73
- color: var(--md-sys-color-surface-dim);
74
- background-color: transparent;
75
- }
76
- `
77
- ]
78
-
79
- @state() root?: AccountingCategory
80
- @state() selected?: AccountingCategory
81
- @state() accountingCategory?: AccountingCategory
82
- @state() modified: boolean = false
83
- @state() appendable: boolean = false
84
-
85
- @query('accounting-category-view') accountingCategoryView!: AccountingCategoryView
86
-
87
- get context() {
88
- return {
89
- title: i18next.t('title.accounting-category list'),
90
- help: 'accounting/accounting-category',
91
- actions: [
92
- {
93
- icon: 'delete',
94
- title: i18next.t('button.delete'),
95
- action: this.delete.bind(this),
96
- emphasis: {
97
- danger: true
98
- }
99
- }
100
- ].filter(Boolean),
101
- toolbar: false
102
- }
103
- }
104
-
105
- render() {
106
- return html`
107
- <div class="header">
108
- <ox-context-page-toolbar class="actions" .context=${this.context}></ox-context-page-toolbar>
109
- </div>
110
-
111
- <content>
112
- <ox-tree-vertical
113
- .data=${this.root}
114
- .selected=${this.selected}
115
- @select=${this.onSelect.bind(this)}
116
- id-property="code"
117
- label-property="name"
118
- description-property="description"
119
- ></ox-tree-vertical>
120
-
121
- <div editor>
122
- <accounting-category-view
123
- .accountingCategory=${this.accountingCategory}
124
- @property-change=${(e: CustomEvent) => {
125
- const { code, name } = e.detail || {}
126
-
127
- this.modified = true
128
- this.appendable = code && code !== this.selected?.code && name !== this.selected?.name
129
- }}
130
- ></accounting-category-view>
131
- <div class="footer">
132
- <button @click=${this.reset.bind(this)}><md-icon>restart_alt</md-icon>${i18next.t('button.reset')}</button>
133
- <div filler></div>
134
- <button @click=${this.create.bind(this)} ?disabled=${!this.appendable}>
135
- <md-icon>add</md-icon>${i18next.t('button.add')}
136
- </button>
137
- <button @click=${this.save.bind(this)} ?disabled=${!this.modified} done>
138
- <md-icon>save</md-icon>${i18next.t('button.save')}
139
- </button>
140
- </div>
141
- </div>
142
- </content>
143
- `
144
- }
145
-
146
- updated(changes: PropertyValues<this>) {
147
- if (changes.has('selected')) {
148
- this.modified = false
149
- this.accountingCategory = { ...this.selected }
150
- }
151
- }
152
-
153
- onSelect(e: CustomEvent) {
154
- this.selected = e.detail as AccountingCategory
155
- this.updateContext()
156
- }
157
-
158
- reset() {
159
- this.accountingCategoryView.accountingCategory = {}
160
- }
161
-
162
- async create() {
163
- const { id: parentId } = this.accountingCategory || {}
164
- const { code, name, description, active } = this.accountingCategory || {}
165
-
166
- var accountingCategory = {
167
- code,
168
- name,
169
- description,
170
- active
171
- } as any
172
-
173
- if (parentId) {
174
- accountingCategory.parent = { id: parentId }
175
- }
176
-
177
- const response = await client.mutate({
178
- mutation: gql`
179
- mutation ($accountingCategory: NewAccountingCategory!) {
180
- createAccountingCategory(accountingCategory: $accountingCategory) {
181
- ...SubAccountingCategoryFragment
182
- }
183
- }
184
-
185
- ${SubAccountingCategoryFragment}
186
- `,
187
- variables: {
188
- accountingCategory
189
- }
190
- })
191
-
192
- this.selected = response.data.createAccountingCategory
193
- this.updateContext()
194
-
195
- await this.fetch()
196
- }
197
-
198
- async save() {
199
- const { id, code, name, description, active } = this.accountingCategory || {}
200
-
201
- if (!id) {
202
- await CustomAlert({
203
- type: 'warning',
204
- title: 'accounting-category not selected',
205
- text: 'Please select accounting-category first.',
206
- confirmButton: { text: i18next.t('button.confirm') }
207
- })
208
-
209
- return
210
- }
211
-
212
- var patch = {
213
- code,
214
- name,
215
- description,
216
- active
217
- } as any
218
-
219
- const response = await client.mutate({
220
- mutation: gql`
221
- mutation ($id: String!, $patch: AccountingCategoryPatch!) {
222
- updateAccountingCategory(id: $id, patch: $patch) {
223
- ...SubAccountingCategoryFragment
224
- }
225
- }
226
-
227
- ${SubAccountingCategoryFragment}
228
- `,
229
- variables: {
230
- id,
231
- patch
232
- },
233
- context: {
234
- hasUpload: true
235
- }
236
- })
237
-
238
- this.selected = response.data.updateAccountingCategory
239
-
240
- this.fetch()
241
- }
242
-
243
- async delete() {
244
- if (!this.selected) {
245
- await CustomAlert({
246
- type: 'warning',
247
- title: 'accounting category not selected',
248
- text: 'Please select accounting category first.',
249
- confirmButton: { text: i18next.t('button.confirm') }
250
- })
251
-
252
- return
253
- }
254
-
255
- const children = this.selected?.children
256
- if (children && children.length > 0) {
257
- await CustomAlert({
258
- type: 'warning',
259
- title: 'AccountingCategorys with subordinates cannot be deleted.',
260
- text: 'AccountingCategory having children cannot be deleted.',
261
- confirmButton: { text: i18next.t('button.confirm') }
262
- })
263
-
264
- return
265
- }
266
-
267
- if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {
268
- const { id } = this.selected || {}
269
-
270
- const response = await client.mutate({
271
- mutation: gql`
272
- mutation ($id: String!) {
273
- deleteAccountingCategory(id: $id)
274
- }
275
- `,
276
- variables: {
277
- id
278
- }
279
- })
280
-
281
- this.selected = {}
282
- this.updateContext()
283
-
284
- await this.fetch()
285
- }
286
- }
287
-
288
- async pageInitialized(lifecycle: any) {
289
- this.fetch()
290
- }
291
-
292
- async pageUpdated(changes: any, lifecycle: any) {
293
- if (this.active) {
294
- // do something here when this page just became as active
295
- }
296
- }
297
-
298
- async fetch() {
299
- const response = await client.query({
300
- query: gql`
301
- query {
302
- responses: accountingCategoryRoots {
303
- total
304
- items {
305
- ...SubAccountingCategoryFragment
306
- children {
307
- ...SubAccountingCategoryFragment
308
- children {
309
- ...SubAccountingCategoryFragment
310
- children {
311
- ...SubAccountingCategoryFragment
312
- children {
313
- ...SubAccountingCategoryFragment
314
- children {
315
- ...SubAccountingCategoryFragment
316
- children {
317
- ...SubAccountingCategoryFragment
318
- children {
319
- ...SubAccountingCategoryFragment
320
- }
321
- }
322
- }
323
- }
324
- }
325
- }
326
- }
327
- }
328
- }
329
- }
330
-
331
- ${SubAccountingCategoryFragment}
332
- `
333
- })
334
- const { items: records, total } = response.data.responses
335
-
336
- this.root = records[0]
337
- }
338
- }