@things-factory/accounting 8.0.0 → 9.0.0-beta.3

Sign up to get free protection for your applications and to get access to all the features.
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
- }