@simitgroup/simpleapp-generator 1.0.63 → 1.1.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 (147) hide show
  1. package/README copy.md +9 -9
  2. package/buildinschemas copy/autoincreament.autoinc.jsonschema.json +1 -1
  3. package/buildinschemas copy/docnoformat.docno.jsonschema.json +2 -2
  4. package/dist/buildinschemas/autoincreament.js +6 -6
  5. package/dist/buildinschemas/branch.js +3 -3
  6. package/dist/buildinschemas/branch.js.map +1 -1
  7. package/dist/buildinschemas/docnoformat.js +5 -5
  8. package/dist/buildinschemas/docnoformat.js.map +1 -1
  9. package/dist/buildinschemas/organization.js +3 -3
  10. package/dist/buildinschemas/permission.js +5 -5
  11. package/dist/buildinschemas/permission.js.map +1 -1
  12. package/dist/buildinschemas/tenant.js +2 -2
  13. package/dist/buildinschemas/user.d.ts.map +1 -1
  14. package/dist/buildinschemas/user.js +3 -4
  15. package/dist/buildinschemas/user.js.map +1 -1
  16. package/dist/generate.js +2 -2
  17. package/dist/generate.js.map +1 -1
  18. package/dist/processors/jsonschemabuilder.d.ts.map +1 -1
  19. package/dist/processors/jsonschemabuilder.js +6 -6
  20. package/dist/processors/jsonschemabuilder.js.map +1 -1
  21. package/dist/type.d.ts +7 -19
  22. package/dist/type.d.ts.map +1 -1
  23. package/docs/backend.md +2 -2
  24. package/docs/jsonschema.md +6 -6
  25. package/package.json +1 -1
  26. package/src/buildinschemas/autoincreament.ts +6 -6
  27. package/src/buildinschemas/branch.ts +3 -3
  28. package/src/buildinschemas/docnoformat.ts +5 -5
  29. package/src/buildinschemas/organization.ts +3 -3
  30. package/src/buildinschemas/permission.ts +5 -5
  31. package/src/buildinschemas/tenant.ts +2 -2
  32. package/src/buildinschemas/user.ts +4 -5
  33. package/src/generate.ts +2 -2
  34. package/src/processors/jsonschemabuilder.ts +7 -9
  35. package/src/processors/jsonschemabuilder.ts-old +5 -5
  36. package/src/type.ts +20 -20
  37. package/templates/basic/nest/controller.ts.eta +18 -18
  38. package/templates/basic/nest/processor.ts.eta +1 -1
  39. package/templates/basic/nuxt/pages.[id].vue.eta +1 -1
  40. package/templates/basic/nuxt/pages.landing.vue.eta +12 -17
  41. package/templates/basic/nuxt/{pages.crud.vue.eta → pages.new.vue.eta} +68 -71
  42. package/templates/basic/nuxt/simpleapp.generate.client.ts.eta +6 -6
  43. package/templates/nest/src/simpleapp/generate/commons/interceptors/response.interceptor.ts.eta +1 -1
  44. package/templates/nest/src/simpleapp/generate/commons/user.context.ts.eta +20 -10
  45. package/templates/nest/src/simpleapp/generate/models/apievent.model.ts.eta +1 -1
  46. package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +8 -9
  47. package/templates/nest/src/simpleapp/generate/types/apievent.type.ts.eta +1 -1
  48. package/templates/nest/src/simpleapp/profile/profile.service.ts.eta +16 -7
  49. package/templates/nest/src/simpleapp/services/autoinc.service.ts.eta +10 -7
  50. package/templates/nest/src/simpleapp/services/branch.service.ts.eta +2 -2
  51. package/templates/nuxt/assets/css/style.css._eta +32 -0
  52. package/templates/nuxt/assets/primevue/passthrough.ts._eta +9 -2
  53. package/templates/nuxt/components/{DebugDocumentData.vue.eta → debug/DebugDocumentData.vue.eta} +8 -4
  54. package/templates/nuxt/components/{EventNotification.vue.eta → event/EventNotification.vue.eta} +13 -9
  55. package/templates/nuxt/components/{HeaderBar.vue.eta → header/HeaderBar.vue.eta} +6 -6
  56. package/templates/nuxt/components/{SelectBranch.vue.eta → header/HeaderSelectBranch.vue.eta} +2 -2
  57. package/templates/nuxt/components/{ButtonMenuPicker.vue.eta → header/button/HeaderButtonMenuPicker.vue.eta} +3 -3
  58. package/templates/nuxt/components/list/ListView.vue.eta +64 -0
  59. package/templates/nuxt/components/renderer/RendererForeignKey.vue.eta +11 -0
  60. package/templates/nuxt/components/renderer/index.ts.eta +12 -0
  61. package/templates/nuxt/components/simpleApp/SimpleAppDocumentNo.vue.eta +77 -0
  62. package/templates/nuxt/components/{SimpleFieldContainer.vue.eta → simpleApp/SimpleAppFieldContainer.vue.eta} +12 -11
  63. package/templates/nuxt/components/{SimpleAppForm.vue.eta → simpleApp/SimpleAppForm.vue.eta} +5 -4
  64. package/templates/nuxt/components/simpleApp/SimpleAppInput.vue.eta +288 -0
  65. package/templates/nuxt/components/simpleApp/SimpleAppInputTable.vue.eta +56 -0
  66. package/templates/nuxt/components/{SimpleAppAutocomplete.vue.eta → simpleApp/pending/SimpleAppAutocomplete.vue} +14 -3
  67. package/templates/nuxt/components/{SimpleAppAutocompletemulti.vue.eta → simpleApp/pending/SimpleAppAutocompletemulti.vue} +1 -1
  68. package/templates/nuxt/components/{SimpleAppCalendar.vue.eta → simpleApp/pending/SimpleAppCalendar.vue} +1 -1
  69. package/templates/nuxt/components/{SimpleAppCheckbox.vue.eta → simpleApp/pending/SimpleAppCheckbox.vue} +1 -1
  70. package/templates/nuxt/components/{SimpleAppChip.vue.eta → simpleApp/pending/SimpleAppChip.vue} +1 -1
  71. package/templates/nuxt/components/{SimpleAppColor.vue.eta → simpleApp/pending/SimpleAppColor.vue} +1 -1
  72. package/templates/nuxt/components/{SimpleAppDocumentNo.vue.eta → simpleApp/pending/SimpleAppDocumentNo.vue} +1 -1
  73. package/templates/nuxt/components/{SimpleAppEditor.vue.eta → simpleApp/pending/SimpleAppEditor.vue} +1 -1
  74. package/templates/nuxt/components/{SimpleAppInputTable.vue.eta → simpleApp/pending/SimpleAppInputTable.vue} +1 -22
  75. package/templates/nuxt/components/{SimpleAppList.vue.eta → simpleApp/pending/SimpleAppList.vue} +1 -1
  76. package/templates/nuxt/components/{SimpleAppListmulti.vue.eta → simpleApp/pending/SimpleAppListmulti.vue} +1 -1
  77. package/templates/nuxt/components/{SimpleAppNumber.vue.eta → simpleApp/pending/SimpleAppNumber.vue} +12 -1
  78. package/templates/nuxt/components/{SimpleAppPassword.vue.eta → simpleApp/pending/SimpleAppPassword.vue} +1 -1
  79. package/templates/nuxt/components/{SimpleAppRadio.vue.eta → simpleApp/pending/SimpleAppRadio.vue} +1 -1
  80. package/templates/nuxt/components/{SimpleAppRating.vue.eta → simpleApp/pending/SimpleAppRating.vue} +1 -1
  81. package/templates/nuxt/components/{SimpleAppSelect.vue.eta → simpleApp/pending/SimpleAppSelect.vue} +12 -2
  82. package/templates/nuxt/components/{SimpleAppSelectmulti.vue.eta → simpleApp/pending/SimpleAppSelectmulti.vue} +1 -1
  83. package/templates/nuxt/components/{SimpleAppSlider.vue.eta → simpleApp/pending/SimpleAppSlider.vue} +1 -1
  84. package/templates/nuxt/components/{SimpleAppSwitch.vue.eta → simpleApp/pending/SimpleAppSwitch.vue} +1 -1
  85. package/templates/nuxt/components/{SimpleAppText.vue.eta → simpleApp/pending/SimpleAppText.vue} +13 -4
  86. package/templates/nuxt/components/{SimpleAppTextarea.vue.eta → simpleApp/pending/SimpleAppTextarea.vue} +13 -2
  87. package/templates/nuxt/components/{SimpleAppDatatable.vue.eta → table/TableDocuments.vue.eta} +15 -63
  88. package/templates/nuxt/components/{UserProfileListItem.vue.eta → user/UserProfileListItem.vue.eta} +1 -1
  89. package/templates/nuxt/composables/getMenus.generate.ts.eta +4 -1
  90. package/templates/nuxt/composables/getOpenApi.generate.ts.eta +32 -1
  91. package/templates/nuxt/composables/goTo.generate.ts.eta +7 -0
  92. package/templates/nuxt/composables/notifications.generate.ts.eta +1 -1
  93. package/templates/nuxt/composables/stringHelper.generate.ts.eta +1 -0
  94. package/templates/nuxt/layouts/default.vue.eta +1 -1
  95. package/templates/nuxt/layouts/documentlist.vue.eta +24 -8
  96. package/templates/nuxt/layouts/sidelist.vue.eta +68 -0
  97. package/templates/nuxt/layouts/sidelistcrud.vue.eta +1 -1
  98. package/templates/nuxt/nuxt.config.ts.eta +0 -1
  99. package/templates/nuxt/pages/[xorg]/branch/index.vue.etax +2 -2
  100. package/templates/nuxt/pages/[xorg]/docnoformat/{[id].vue.eta → [doctype]/[id].vue.eta} +2 -5
  101. package/templates/nuxt/pages/[xorg]/docnoformat/[doctype]/new.vue.eta +222 -0
  102. package/templates/nuxt/pages/[xorg]/docnoformat/[doctype].vue.eta +33 -0
  103. package/templates/nuxt/pages/[xorg]/docnoformat/index.vue.eta +4 -294
  104. package/templates/nuxt/pages/[xorg]/docnoformat.vue.eta +100 -0
  105. package/templates/nuxt/pages/[xorg]/organization/[bid].vue.eta +14 -0
  106. package/templates/nuxt/pages/[xorg]/organization/[id]/branches/[bid].vue +13 -0
  107. package/templates/nuxt/pages/[xorg]/organization/[id]/branches/new.vue +149 -0
  108. package/templates/nuxt/pages/[xorg]/organization/[id]/index.vue.eta +1 -0
  109. package/templates/nuxt/pages/[xorg]/organization/new.vue.eta +151 -0
  110. package/templates/nuxt/pages/[xorg]/organization.vue.eta +145 -0
  111. package/templates/nuxt/pages/[xorg]/user/index.vue.eta +23 -23
  112. package/templates/nuxt/pages/[xorg]/user.vue.eta +13 -11
  113. package/templates/nuxt/pages/index.vue._eta +2 -2
  114. package/templates/nuxt/plugins/20.simpleapp-userstore.ts.eta +10 -1
  115. package/templates/nuxt/simpleapp/generate/clients/SimpleAppClient.ts.eta +1 -1
  116. package/templates/nuxt/types/documentlist.ts.eta +2 -2
  117. package/templates/nuxt/types/index.ts.eta +2 -1
  118. package/templates/nuxt/types/simpleappinput.ts.eta +39 -0
  119. package/templates/project/jsonschemas/category.json._eta +5 -5
  120. package/templates/project/jsonschemas/customer.json._eta +5 -5
  121. package/templates/project/jsonschemas/invoice.json._eta +7 -7
  122. package/templates/project/jsonschemas/product.json._eta +5 -5
  123. package/tsconfig.tsbuildinfo +1 -1
  124. package/templates/nuxt/components/ListView.vue.eta +0 -52
  125. package/templates/nuxt/components/renderers/ForeignKeyRender.vue.eta +0 -10
  126. package/templates/nuxt/composables/getAutocomplete.generate.ts.eta +0 -32
  127. package/templates/nuxt/pages/[xorg]/organization/index.vue.eta +0 -168
  128. /package/templates/nuxt/components/{EventDecision.vue.eta → event/EventDecision.vue.eta} +0 -0
  129. /package/templates/nuxt/components/{ButtonHome.vue.eta → header/button/HeaderButtonHome.vue.eta} +0 -0
  130. /package/templates/nuxt/components/{ButtonLogout.vue.eta → header/button/HeaderButtonLogout.vue.eta} +0 -0
  131. /package/templates/nuxt/components/{ButtonProfile.vue.eta → header/button/HeaderButtonProfile.vue.eta} +0 -0
  132. /package/templates/nuxt/components/{renderers/BooleanRender.vue.eta → renderer/RendererBoolean.vue.eta} +0 -0
  133. /package/templates/nuxt/components/{renderers/DateRender.vue.eta → renderer/RendererDate.vue.eta} +0 -0
  134. /package/templates/nuxt/components/{renderers/MoneyRender.vue.eta → renderer/RendererMoney.vue.eta} +0 -0
  135. /package/templates/nuxt/components/{renderers/MultiTextRender.vue.eta → renderer/RendererMultiText.vue.eta} +0 -0
  136. /package/templates/nuxt/components/{SimpleAppDynamicInput.vue.eta → simpleApp/pending/SimpleAppDynamicInput.vue} +0 -0
  137. /package/templates/nuxt/components/{SimpleAppValue.vue.eta → simpleApp/pending/SimpleAppValue.vue} +0 -0
  138. /package/templates/nuxt/components/{helper.ts.eta → simpleApp/pending/helper.ts-backup} +0 -0
  139. /package/templates/nuxt/components/{type.ts.eta → simpleApp/pending/type.ts-backup} +0 -0
  140. /package/templates/nuxt/components/{CrudNestedDoc.vue.eta → suspended/CrudNestedDoc.vue.eta} +0 -0
  141. /package/templates/nuxt/components/{CrudSimple.vue.eta → suspended/CrudSimple.vue.eta} +0 -0
  142. /package/templates/nuxt/components/{Menus.vue.eta → suspended/Menus.vue.eta} +0 -0
  143. /package/templates/nuxt/components/{Spinner.vue.eta → suspended/Spinner.vue.eta} +0 -0
  144. /package/templates/nuxt/components/{ButtonCreateTenant.vue.eta → user/UserButtonCreateTenant.vue.eta} +0 -0
  145. /package/templates/nuxt/components/{ButtonPermissionInfo.vue.eta → user/UserButtonPermissionInfo.vue.eta} +0 -0
  146. /package/templates/nuxt/components/{Invitation.vue.eta → user/UserInvitation.vue.eta} +0 -0
  147. /package/templates/nuxt/components/{TenantPicker.vue.eta → user/UserTenantPicker.vue.eta} +0 -0
@@ -0,0 +1,222 @@
1
+ <script setup lang="ts">
2
+ import {SimpleAppInputType} from '~/types'
3
+ import ConfirmPopup from "primevue/confirmpopup";
4
+ import { useConfirm } from "primevue/useconfirm";
5
+ import moment from "moment";
6
+ const confirm = useConfirm();
7
+ const isReadOnly = ref(true);
8
+ const { $event, $listen, $DocnoformatDoc } = useNuxtApp();
9
+ const doc = $DocnoformatDoc();
10
+ const data = doc.getReactiveData();
11
+ const list = ref([]);
12
+ const sample = ref("");
13
+ const refresh = async () => {
14
+ $event("RefreshDocumentList", { documentName: doc.getDocName() });
15
+ isReadOnly.value = true;
16
+ };
17
+
18
+ const updateSample = () => {
19
+ sample.value = "Example: " + previewDocNo();
20
+ };
21
+ const createData = async () => {
22
+ // disabled.value=true
23
+
24
+ doc
25
+ .create()
26
+ .then((res) => {
27
+ refresh();
28
+ newData();
29
+ })
30
+ .catch((err) => {
31
+ console.error(err);
32
+ });
33
+ };
34
+ const updateData = async () => {
35
+ doc
36
+ .update()
37
+ .then(() => {
38
+ // visible.value=false
39
+ refresh();
40
+ })
41
+ .catch((err) => {
42
+ console.error(err);
43
+ });
44
+ };
45
+ const deleteData = (el: any) => {
46
+ confirm.require({
47
+ target: el.currentTarget as HTMLElement,
48
+ message: "Delete?",
49
+ icon: "pi pi-exclamation-triangle",
50
+ acceptClass: "p-button-danger",
51
+ accept: () => {
52
+ // disabled.value=true
53
+ doc.delete(data.value._id ?? "").then((res) => {
54
+ newData();
55
+ refresh();
56
+ });
57
+ },
58
+ reject: () => {
59
+ console.log("Cancel delete");
60
+ },
61
+ });
62
+ };
63
+ const newData = () => {
64
+ doc.setNew();
65
+ goTo(doc.getDocName(), String(useRoute().params.doctype) + "/new");
66
+ };
67
+
68
+ const id = computed(() => String(useRoute().params.id ?? ""));
69
+
70
+ const fetchRecord = async () => {
71
+ if (id.value) {
72
+ isReadOnly.value = true;
73
+ await doc.getById(id.value);
74
+ } else {
75
+ isReadOnly.value = false;
76
+ data.value.docNoType = String(useRoute().params.doctype);
77
+ }
78
+ };
79
+
80
+ const previewDocNo = (): string => {
81
+ const pattern = data.value.docNoPattern;
82
+ if (pattern) {
83
+ const numberReg: RegExp = /\[(.*?)\]/g;
84
+ const dateReg: RegExp = /\{(.*?)\}/g;
85
+ let newvalue = pattern;
86
+ const numberpattern = pattern.match(numberReg);
87
+ const datepattern = pattern.match(dateReg);
88
+
89
+ if (numberpattern && numberpattern.length > 0) {
90
+ const numberlength = numberpattern[0]
91
+ .replace("[", "")
92
+ .replace("]", "").length;
93
+
94
+ let nextnumber = (data.value.nextNumber ?? 0).toString();
95
+
96
+ const numberdiff = numberlength - nextnumber.length;
97
+
98
+ for (let n = 0; n < numberdiff; n++) {
99
+ nextnumber = "0" + nextnumber;
100
+ }
101
+ newvalue = newvalue.replace(numberpattern[0], nextnumber);
102
+ }
103
+
104
+ if (datepattern && datepattern.length > 0) {
105
+ for (let d = 0; d < datepattern.length; d++) {
106
+ const dpattern = datepattern[d];
107
+ const date = new Date();
108
+ const formatteddate = moment().format(
109
+ dpattern.replace("{", "").replace("}", ""),
110
+ );
111
+ newvalue = newvalue.replace(dpattern, formatteddate);
112
+ }
113
+ }
114
+ return newvalue;
115
+ } else {
116
+ return "";
117
+ }
118
+ };
119
+
120
+ fetchRecord();
121
+ </script>
122
+ <template>
123
+ <DebugDocumentData v-model="data" label="docnoformat" />
124
+ <div class="p-4">
125
+ <div v-if="isReadOnly" class="col-span-4 ">
126
+ <Button
127
+ class="btn-default"
128
+ @click="newData"
129
+ type="button"
130
+ v-if="canPerform(doc.getDocName(), 'create')"
131
+ >New
132
+ </Button>
133
+ <Button class="btn btn-primary" @click="isReadOnly = false">Edit</Button>
134
+ </div>
135
+ <div v-else class="simpleapp-tool-bar col-span-4 text-left gap-4">
136
+ <Button
137
+ class="btn-default"
138
+ @click="newData"
139
+ type="button"
140
+ v-if="canPerform(doc.getDocName(), 'create')"
141
+ >New
142
+ </Button>
143
+ <Button
144
+ class="btn btn-primary"
145
+ @click="createData"
146
+ type="button"
147
+ v-if="canPerform(doc.getDocName(), 'create') && doc.isNew()"
148
+ >
149
+ Create
150
+ </Button>
151
+ <Button
152
+ class="btn btn-primary"
153
+ @click="updateData"
154
+ type="button"
155
+ v-if="canPerform(doc.getDocName(), 'update') && !doc.isNew()"
156
+ >
157
+ Update
158
+ </Button>
159
+ <Button
160
+ class="btn btn-danger"
161
+ @click="deleteData($el)"
162
+ type="button"
163
+ v-if="canPerform(doc.getDocName(), 'delete') && !doc.isNew()"
164
+ >
165
+ Delete
166
+ </Button>
167
+ <ConfirmPopup></ConfirmPopup>
168
+ </div>
169
+ <SimpleAppForm :document="doc" #default="o" :readonly="isReadOnly">
170
+ <div class="grid grid-cols-4 gap-4">
171
+ <SimpleAppInput
172
+ autofocus
173
+ :input-type="SimpleAppInputType.text"
174
+ :setting="o.getField('#/properties/docNoFormatNo')"
175
+ v-model="data.docNoFormatNo"
176
+ />
177
+ <SimpleAppInput
178
+ :input-type="SimpleAppInputType.text"
179
+ :setting="o.getField('#/properties/docNoFormatName')"
180
+ v-model="data.docNoFormatName"
181
+ />
182
+ <SimpleAppInput
183
+ :input-type="SimpleAppInputType.autocomplete"
184
+ v-model="data.branch"
185
+ :setting="o.getField('#/properties/branch')"
186
+ />
187
+ <SimpleAppInput
188
+ :input-type="SimpleAppInputType.checkbox"
189
+ :setting="o.getField('#/properties/active')"
190
+ v-model="data.active"
191
+ />
192
+
193
+ <SimpleAppInput
194
+ :input-type="SimpleAppInputType.checkbox"
195
+ :setting="o.getField('#/properties/default')"
196
+ v-model="data.default"
197
+ />
198
+
199
+ <SimpleAppInput
200
+ :input-type="SimpleAppInputType.text"
201
+ :setting="o.getField('#/properties/docNoPattern')"
202
+ v-model="data.docNoPattern"
203
+ @change="updateSample"
204
+ :description="sample"
205
+ v-tooltip="'Examples: PO-<00000>, SI{YY}/<000>, SI{YYMM}/<000>'"
206
+ />
207
+ <SimpleAppInput
208
+ :readonly="true"
209
+ :input-type="SimpleAppInputType.text"
210
+ :setting="o.getField('#/properties/docNoType')"
211
+ v-model="data.docNoType"
212
+ description="Document Type"
213
+ />
214
+ <SimpleAppInput
215
+ :input-type="SimpleAppInputType.number"
216
+ :setting="o.getField('#/properties/nextNumber')"
217
+ v-model="data.nextNumber"
218
+ />
219
+ </div>
220
+ </SimpleAppForm>
221
+ </div>
222
+ </template>
@@ -0,0 +1,33 @@
1
+ <script setup lang="ts">
2
+
3
+ const {$event,$listen, $DocnoformatDoc} = useNuxtApp()
4
+ const doc = $DocnoformatDoc()
5
+ const data = doc.getReactiveData()
6
+ const list = ref([])
7
+ const refresh = async ()=>{
8
+ list.value = await doc.search({
9
+ filter:{docNoType: useRoute().params.doctype}
10
+ })
11
+ }
12
+
13
+ refresh()
14
+
15
+ $listen('RefreshDocumentList',(data)=>{
16
+ if(data.documentName=="docnoformat"){
17
+ refresh()
18
+ }
19
+ })
20
+ </script>
21
+ <template>
22
+ <div class="grid grid-cols-3 p-4">
23
+ <div>
24
+ <ListView :list="list"
25
+ titleField="docNoFormatName"
26
+ subTitleField="docNoFormatNo"
27
+ :url="`${getDocumentUrl('docnoformat')}/${useRoute().params.doctype}`"></ListView>
28
+ </div>
29
+ <div class="col-span-2">
30
+ <NuxtPage></NuxtPage>
31
+ </div>
32
+ </div>
33
+ </template>
@@ -1,296 +1,6 @@
1
1
  <template>
2
- <Button class="btn-primary" @click="newRecord">New</Button>
3
- <ConfirmPopup></ConfirmPopup>
4
- <DebugDocumentData v-model="data"></DebugDocumentData>
5
- <SimpleAppDatatable
6
- v-model="recordlist"
7
- :setting="{}"
8
- :columns="[
9
- 'branch.label',
10
- 'docNoFormatNo',
11
- 'docNoFormatName',
12
- 'active',
13
- 'docNoPattern',
14
- 'nextNumber',
15
- ]"
16
- >
17
- <Column header="action">
18
- <template #body="{ data, index }">
19
- <Button
20
- class="pi pi-pencil btn-primary"
21
- @click="triggerEdit(data)"
22
- ></Button>
23
- <Button
24
- class="pi pi-times btn-danger"
25
- @click="triggerDelete(data)"
26
- ></Button>
27
- </template>
28
- </Column>
29
- </SimpleAppDatatable>
30
- <Dialog
31
- v-model:visible="visible"
32
- modal
33
- :header="popuptitle"
34
- class="crudsimple-dialog"
35
- :autoZIndex="false"
36
- :style="{ zIndex: 100, width: '80vw' }"
37
- >
38
- <div class="simpleapp-tool-bar col-span-4 text-left gap-4">
39
- <Button
40
- class="btn-default"
41
- :disabled="disabled"
42
- @click="newRecord"
43
- type="button"
44
- v-if="canPerform(resourcename, 'create')"
45
- >
46
- New
47
- </Button>
48
- <Button
49
- class="btn-primary"
50
- :disabled="disabled"
51
- @click="createData"
52
- type="button"
53
- v-if="canPerform(resourcename, 'create') && data.created == ''"
54
- >
55
- Create
56
- </Button>
57
- <Button
58
- class="btn-primary"
59
- :disabled="disabled"
60
- @click="updateData"
61
- type="button"
62
- v-if="canPerform(resourcename, 'update') && data.created != ''"
63
- >
64
- Update
65
- </Button>
66
- <Button
67
- class="btn-danger"
68
- :disabled="disabled"
69
- @click="deleteData($event)"
70
- type="button"
71
- v-if="canPerform(resourcename, 'delete') && data.created != ''"
72
- >
73
- Delete
74
- </Button>
75
- <ProgressSpinner
76
- v-if="disabled == true"
77
- style="width: 2rem; height: 2rem"
78
- ></ProgressSpinner>
79
- <ConfirmPopup></ConfirmPopup>
80
- </div>
81
- <SimpleAppForm :document="doc" #default="o" title="Document No">
82
- <div class="grid grid-cols-4 gap-4">
83
- <SimpleAppText
84
- autofocus
85
- :setting="o.getField('#/properties/docNoFormatNo')"
86
- v-model="data.docNoFormatNo"
87
- />
88
- <SimpleAppText
89
- autofocus
90
- :setting="o.getField('#/properties/docNoFormatName')"
91
- v-model="data.docNoFormatName"
92
- />
93
- <SimpleAppAutocomplete
94
- v-model="data.branch"
95
- :setting="o.getField('#/properties/branch')"
96
- :remoteSrc="getAutocomplete('branch')"
97
- optionLabel="label"
98
- />
99
- <SimpleAppCheckbox
100
- autofocus
101
- :setting="o.getField('#/properties/active')"
102
- v-model="data.active"
103
- />
2
+ <div></div>
3
+ </template>
4
+ <script setup lang="ts">
104
5
 
105
- <SimpleAppCheckbox
106
- autofocus
107
- :setting="o.getField('#/properties/default')"
108
- v-model="data.default"
109
- />
110
-
111
- <SimpleAppText
112
- autofocus
113
- :setting="o.getField('#/properties/docNoPattern')"
114
- v-model="data.docNoPattern"
115
- @change="updateSample"
116
- :description="sample"
117
- v-tooltip="'Examples: PO-<00000>, SI{YY}/<000>, SI{YYMM}/<000>'"
118
- />
119
-
120
- <SimpleAppNumber
121
- autofocus
122
- :setting="o.getField('#/properties/nextNumber')"
123
- v-model="data.nextNumber"
124
- />
125
- </div>
126
- </SimpleAppForm>
127
- </Dialog>
128
- </template>
129
- <script setup lang="ts">
130
- import _ from "lodash";
131
- import moment from "moment";
132
- import Dialog from "primevue/dialog";
133
- import Column from "primevue/column";
134
- import { ListItem } from "@/types/listview";
135
- import ProgressSpinner from "primevue/progressspinner";
136
- import ConfirmPopup from "primevue/confirmpopup";
137
- import { useConfirm } from "primevue/useconfirm";
138
- const { $event, $listen, $DocnoformatDoc } = useNuxtApp();
139
- const doc = $DocnoformatDoc();
140
- const data = doc.getReactiveData();
141
-
142
- const visible = ref(false);
143
- const disabled = ref(false);
144
- const popuptitle = ref("edit");
145
- const recordlist = ref();
146
- const selectedDoctype = ref("");
147
- const havedocdate = ref(false);
148
- const confirm = useConfirm();
149
- // This will work in both `<script setup>` and `<script>`
150
- if(data.value.created==''){
151
- definePageMeta({
152
- layout: "sidelistcrud",
153
- });
154
- }
155
-
156
- const sample = ref("");
157
- const resourcename = ref(_.upperFirst(doc.getDocName()));
158
-
159
- const refresh = async () => {
160
- const filter = { docNoType: selectedDoctype.value };
161
-
162
- console.log("selectedDoctype", selectedDoctype.value);
163
-
164
- const results = await doc.search({ filter: filter });
165
- recordlist.value = results;
166
- };
167
- $listen("itemselected", (item: ListItem) => {
168
- selectedDoctype.value = item.code;
169
- havedocdate.value = item.data.documentDate != "";
170
- refresh();
171
- });
172
-
173
- const updateSample = () => {
174
- sample.value = "Example: " + previewDocNo();
175
- };
176
- onMounted(() => {
177
- const doclist = getDocTypes();
178
- console.log(doclist);
179
- const listdata: ListItem[] = getDocTypes()
180
- .filter((item) => item.docNumber)
181
- .map(
182
- (item) =>
183
- ({ name: item.docName, code: item.docType, data: item }) as ListItem,
184
- );
185
- $event("listloaded", listdata);
186
- });
187
- const newRecord = () => {
188
- // useRouter().push({ path: `${props.path}` })
189
- doc.setNew();
190
- data.value.docNoType = selectedDoctype.value;
191
-
192
- visible.value = true;
193
- $event("newRecord");
194
- };
195
- const createData = () => {
196
- disabled.value = true;
197
-
198
- doc
199
- .create()
200
- .then(() => {
201
- visible.value = false;
202
- refresh();
203
- })
204
- .catch((err) => {
205
- console.error(err);
206
- })
207
- .finally(() => (disabled.value = false));
208
- };
209
- const updateData = () => {
210
- disabled.value = true;
211
-
212
- doc
213
- .update()
214
- .then(() => {
215
- visible.value = false;
216
- refresh();
217
- })
218
- .catch((err) => {
219
- console.error(err);
220
- })
221
- .finally(() => (disabled.value = false));
222
- };
223
- const deleteData = (e: any) => {
224
- confirm.require({
225
- target: e.currentTarget as HTMLElement,
226
- message: "Delete?",
227
- icon: "pi pi-exclamation-triangle",
228
- acceptClass: "p-button-danger",
229
- accept: () => {
230
- disabled.value = true;
231
- doc
232
- .delete(data.value._id ?? "")
233
- .then(() => (visible.value = false))
234
- .finally(() => {
235
- refresh();
236
- });
237
- },
238
- reject: () => {
239
- console.log("Cancel delete");
240
- },
241
- });
242
- };
243
-
244
- const triggerDelete = async (event: any) => {
245
- let id = event._id.toString();
246
- await doc.delete(id);
247
- refresh();
248
- };
249
- const triggerEdit = async (event: any) => {
250
- let id = event._id.toString();
251
- await doc.getById(id);
252
- console.log(id);
253
- visible.value = true;
254
- // useRouter().push({ path: `/${useRoute().params.xorg}/docnoformat/${id}` });
255
- };
256
-
257
- const previewDocNo = (): string => {
258
- const pattern = data.value.docNoPattern;
259
- if (pattern) {
260
- const numberReg: RegExp = /\[(.*?)\]/g;
261
- const dateReg: RegExp = /\{(.*?)\}/g;
262
- let newvalue = pattern;
263
- const numberpattern = pattern.match(numberReg);
264
- const datepattern = pattern.match(dateReg);
265
-
266
- if (numberpattern && numberpattern.length > 0) {
267
- const numberlength = numberpattern[0]
268
- .replace("[", "")
269
- .replace("]", "").length;
270
-
271
- let nextnumber = (data.value.nextNumber ?? 0).toString();
272
-
273
- const numberdiff = numberlength - nextnumber.length;
274
-
275
- for (let n = 0; n < numberdiff; n++) {
276
- nextnumber = "0" + nextnumber;
277
- }
278
- newvalue = newvalue.replace(numberpattern[0], nextnumber);
279
- }
280
-
281
- if (datepattern && datepattern.length > 0) {
282
- for (let d = 0; d < datepattern.length; d++) {
283
- const dpattern = datepattern[d];
284
- const date = new Date();
285
- const formatteddate = moment().format(
286
- dpattern.replace("{", "").replace("}", ""),
287
- );
288
- newvalue = newvalue.replace(dpattern, formatteddate);
289
- }
290
- }
291
- return newvalue;
292
- } else {
293
- return "";
294
- }
295
- };
296
- </script>
6
+ </script>
@@ -0,0 +1,100 @@
1
+ <template>
2
+ <div class="grid grid-cols-5 p-4">
3
+ <ListView :list="getAllDocFormats()"
4
+ idField="docType"
5
+ titleField="docName"
6
+ subTitleField="docType"
7
+ :withFilter="true"
8
+ :url="getDocumentUrl('docnoformat')"></ListView>
9
+ <div class="col-span-4">
10
+ <NuxtPage></NuxtPage>
11
+ </div>
12
+ </div>
13
+
14
+ </template>
15
+ <script setup lang="ts">
16
+
17
+
18
+
19
+ </script>
20
+
21
+ <!-- <script setup lang="ts">
22
+ /**
23
+ * This file was automatically generated by simpleapp everytime regenerate code.
24
+ * delete file "delete-me-for-avoid-override" if you want to modify this file and
25
+ * prevent regenerate code override it.
26
+ * last change 2023-09-09
27
+ * author: Ks Tan
28
+ */
29
+
30
+ import { CellSetting } from "~/types";
31
+ const { $DocnoformatDoc } = useNuxtApp();
32
+ const doc = $DocnoformatDoc();
33
+ const data = doc.getReactiveData();
34
+ const visible = ref(false);
35
+
36
+ definePageMeta({
37
+ name: "Docnoformat",
38
+ layout: "documentlist",
39
+ documentName: "docnoformat",
40
+ columns: [
41
+ {
42
+ title: t("branch"),
43
+ field: "branch",
44
+ rendererName: "RendererForeignKey",
45
+ rendererSetting: { collection: "branch" },
46
+ },
47
+ "docNoFormatNo",
48
+ "docNoFormatName",
49
+ "docNoType",
50
+ "docNoPattern",
51
+ "nextNumber",
52
+ ] as CellSetting[],
53
+ sorts: [["docNoFormatNo", "asc"]],
54
+ });
55
+
56
+ const newData = () => {
57
+ doc.setNew();
58
+ goTo(doc.getDocName(), "new");
59
+ visible.value = true;
60
+ };
61
+
62
+ const exitRecord = () => {
63
+ goTo(doc.getDocName());
64
+ console.log("exitRecord");
65
+ };
66
+
67
+ watch(
68
+ () => useRoute().fullPath,
69
+ (newvalue, oldvalue) => {
70
+ visible.value = useRoute().params.id ? true : false;
71
+ },
72
+ );
73
+
74
+ onNuxtReady(() => {
75
+ visible.value = useRoute().params.id ? true : false;
76
+ });
77
+ </script>
78
+ <template>
79
+ <div>
80
+ <Button
81
+ class="bg-primary-600 hover:bg-primary-400 text-white"
82
+ v-if="canPerform(String(useRoute().meta.name), 'create')"
83
+ @click="newData"
84
+ >New</Button
85
+ >
86
+ <Dialog
87
+ v-model:visible="visible"
88
+ :pt="{
89
+ root: { class: 'w-full h-full bg-white' },
90
+ headertitle: { class: 'm-2 ml-6 text-2xl font-bold' },
91
+ }"
92
+ modal
93
+ :header="t(doc.getDocName())"
94
+ :autoZIndex="false"
95
+ @update:visible="exitRecord"
96
+ >
97
+ <NuxtPage />
98
+ </Dialog>
99
+ </div>
100
+ </template> -->
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ /**
3
+ * This file was automatically generated by simpleapp everytime regenerate code.
4
+ * delete file "delete-me-for-avoid-override" if you want to modify this file and
5
+ * prevent regenerate code override it.
6
+ * last change 2023-09-09
7
+ * author: Ks Tan
8
+ */
9
+ import Crud from "./new.vue";
10
+ </script>
11
+ <template>
12
+ <Crud />
13
+
14
+ </template>
@@ -0,0 +1,13 @@
1
+ <script setup lang="ts">
2
+ /**
3
+ * This file was automatically generated by simpleapp everytime regenerate code.
4
+ * delete file "delete-me-for-avoid-override" if you want to modify this file and
5
+ * prevent regenerate code override it.
6
+ * last change 2023-09-09
7
+ * author: Ks Tan
8
+ */
9
+ import Crud from "./new.vue";
10
+ </script>
11
+ <template>
12
+ <Crud />
13
+ </template>