@cronapp/templates 2.9.2 → 2.9.3-SP.2

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 (34) hide show
  1. package/file/crud/angular_view_update/__FileName__.view.html.ftl +332 -0
  2. package/file/crud/angular_view_update/template.properties +8 -0
  3. package/file/crud/angular_view_update/template_en_US.properties +2 -0
  4. package/file/crud/angular_view_update/update-web.png +0 -0
  5. package/package.json +1 -1
  6. package/project/M/cronapp-lyceum-project-mobile-cordova/template.properties +2 -1
  7. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/i18n/locale_en_us.json +3 -0
  8. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/i18n/locale_pt_br.json +3 -0
  9. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/views/error/403.view.html +9 -6
  10. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/views/error/404.view.html +9 -6
  11. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-sem-autenticacao/js/blockly/auth/Home.blockly +6 -6
  12. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-sem-autenticacao/js/blockly/auth/Home.blockly.js +1 -1
  13. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-sem-autenticacao/views/error/403.view.html +9 -6
  14. package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-sem-autenticacao/views/error/404.view.html +9 -6
  15. package/project/M/cronapp-rad-project-mobile-cordova/template.properties +2 -2
  16. package/project/W/cronapp-rad-project/Dockerfile +11 -7
  17. package/project/W/cronapp-rad-project/diagram/app.umlcd +2 -2
  18. package/project/W/cronapp-rad-project/pom.xml.ftl +0 -32
  19. package/project/W/cronapp-rad-project/src/main/java/app/entity/ApplicationUser.java +2 -2
  20. package/project/W/cronapp-rad-project/src/main/java/app/entity/Login.java +1 -1
  21. package/project/W/cronapp-rad-project/src/main/resources/application.properties +2 -0
  22. package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/i18n/locale_en_us.json +3 -0
  23. package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/i18n/locale_pt_br.json +3 -0
  24. package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/views/error/403.view.html +11 -10
  25. package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/views/error/404.view.html +11 -10
  26. package/project/W/cronapp-rad-project/template.properties +2 -1
  27. package/templates/low-code/data-layer/ENTITIES.ftl +8 -2
  28. package/templates/low-code/data-layer/ENTITIESPK.ftl +4 -4
  29. package/templates/low-code/data-layer/SecurityPermission.java.ftl +16 -6
  30. package/file/view.html/EmptyCrudHtml/__FileName__.view.html.ftl +0 -69
  31. package/file/view.html/EmptyCrudHtml/template.properties +0 -7
  32. package/file/view.html/EmptyCrudHtml/template_pt_BR.properties +0 -4
  33. package/file/view.html/EmptyCrudHtml/view.html.png +0 -0
  34. /package/project/W/cronapp-rad-project/src/main/webapp-sem-autenticacao/webapp/views/{home.view.html.ftl → public/home.view.html.ftl} +0 -0
@@ -0,0 +1,332 @@
1
+ <div id="starter" ng-init="" ng-destroy="" data-component="crn-start" screen-params="" primary-datasource="${model.dataSourceName}">
2
+ <h1 class="component-holder text-left h3 title" xattr-position="text-left" xattr-type="h3" data-component="crn-text-component" id="crn-text-component-${model.random}">
3
+ <#if model.realName ?has_content >${model.realName}<#else>${model.dataSourceName}</#if>
4
+ </h1>
5
+ <datasource data-component="crn-datasource" filter="" name="${model.dataSourceName}" entity="${model.dataSourceFullName}" keys="${model.dataSourcePrimaryKeys}" rows-per-page="100" class="" schema="${model.getDSSchema(model.dataSourceName)}" condition="${model.getDSCondition(model.dataSourceName)}" lazy="false"></datasource>
6
+ <div data-component="crn-form" id="crn-form-form-${model.dataSourceName}-${model.random}">
7
+ <section >
8
+ <form crn-datasource="${model.dataSourceName}" class="">
9
+ <div class="">
10
+ <div class="component-holder ng-scope text-right" data-component="crn-button" id="btn_crud_post_${model.random}">
11
+ <button class="btn k-button btn-block btn-success btn-fab" ng-click="datasource.post()" aria-label="{{'SaveChanges' | translate}}" xattr-fullsize="btn-block" xattr-theme="btn-success" xattr-disabled="">
12
+ <i class="glyphicon glyphicon-ok" icon-theme=""></i>
13
+ </button>
14
+ </div>
15
+ </div>
16
+ <br/>
17
+ <div class="crn-fieldset">
18
+ <#list model.formFields as field>
19
+ <#assign currentType = "textinput">
20
+ <#if field.getProperty("ngOptions")??>
21
+ <#assign currentType = "enterprise-dynamic-combobox">
22
+ <datasource data-component="crn-datasource" name="${field.name!?cap_first}Combo" entity="${model.namespace}.${field.type}" keys="${model.getDataSourcePrimaryKeys(field)}" schema="${model.getDSSchema(field.type)}" lazy=true></datasource>
23
+ </#if>
24
+ <#assign dataComponentType = "crn-${currentType}">
25
+
26
+ <#if field.isImage()>
27
+ <#assign dataComponentType = "crn-dynamic-image">
28
+ <#elseif field.isFile()>
29
+ <#assign dataComponentType = "crn-dynamic-file">
30
+ <#elseif (field.isBoolean()) >
31
+ <#assign dataComponentType = "crn-enterprise-checkbox">
32
+ </#if>
33
+
34
+ <div data-component="${dataComponentType}" id="crn-${currentType}-${field.name}-${model.random}" class="">
35
+ <div class="form-group">
36
+ <#if !field.isBoolean()>
37
+ <#if field.isImage() || field.isFile()>
38
+ <label for="${currentType}-${field.name}-button" class="">${model.formMapLabels[field.name]!?cap_first}</label>
39
+ <#else>
40
+ <label for="${currentType}-${field.name}" class="">${model.formMapLabels[field.name]!?cap_first}</label>
41
+ </#if>
42
+ </#if>
43
+ <#if field.getProperty("ngOptions")?? >
44
+ <#assign dataSourceName = "${field.name!?cap_first}Combo">
45
+ <cron-dynamic-select
46
+ <#if !field.isNullable()>required="required"</#if>
47
+ id="${currentType}-${field.name}"
48
+ name="${currentType}-${field.name}"
49
+ options="${model.getComboOptions(field.type, field.getProperty("ngOptionsFkName"), field.getProperty("ngOptions").keys, dataSourceName)}"
50
+ ng-model="${model.dataSourceName}.active.${field.name}"
51
+ class="crn-select form-control">
52
+ </cron-dynamic-select>
53
+ <#elseif field.isBoolean() >
54
+ <input type="checkbox" <#if field.isNullable()>crn-allow-null-values="true"<#else>crn-allow-null-values="false"</#if> class="k-checkbox" ng-model="${model.dataSourceName}.active.${field.name}" id="${currentType}-${field.name}" placeholder="<#if field.label?has_content>${field.label}<#else>${field.name}</#if>" <#if !field.isNullable()>required="required"</#if>>
55
+ <label for="${currentType}-${field.name}" class="k-checkbox-label">${model.formMapLabels[field.name]!?cap_first}</label>
56
+ <#elseif field.isImage()>
57
+ <div dynamic-image img-alt-text="${model.formMapLabels[field.name]!?cap_first}" id="${currentType}-${field.name}" ng-model="${model.dataSourceName}.active.${field.name}" max-file-size="5MB" class="dynamic-image-container" <#if !field.isNullable()>ng-required="true"<#else>ng-required="false"</#if>>
58
+ {{"template.crud.clickOrDragAnImage" | translate}}
59
+ </div>
60
+ <#elseif field.isFile()>
61
+ <div dynamic-file id="${currentType}-${field.name}" ng-model="${model.dataSourceName}.active.${field.name}" max-file-size="5MB" class="dynamic-image-container" <#if !field.isNullable()>ng-required="true"<#else>ng-required="false"</#if>>
62
+ {{"template.crud.clickOrDragAnFile" | translate}}
63
+ </div>
64
+ <#else>
65
+ <input
66
+ <#if field.getLength()??>
67
+ maxlength="${field.getLength()?string["0"]}"
68
+ </#if>
69
+ type="<#if field.isEncryption()>password<#else>${field.getHtmlType()}</#if>"
70
+ ng-model="${model.dataSourceName}.active.${field.name}"
71
+ class="form-control k-textbox"
72
+ id="${currentType}-${field.name}"
73
+ placeholder="<#if field.label?has_content>${field.label}<#else>${field.name}</#if>"
74
+ mask="${model.formMapMasks[field.name]}"
75
+ mask-placeholder=""
76
+ <#assign valid = "" >
77
+ <#if model.formMapMasks[field.name] == "999.999.999-99;0" >
78
+ <#assign valid = "cpf" >
79
+ <#elseif model.formMapMasks[field.name] == "99.999.999/9999-99;0">
80
+ <#assign valid = "cnpj" >
81
+ </#if>
82
+ <#if valid?has_content>
83
+ valid="${valid}"
84
+ data-error-message="{{'invalid.${valid}' | translate}}"
85
+ </#if>
86
+ <#if !field.isNullable()>ng-required="true"<#else>ng-required="false"</#if>>
87
+ </#if>
88
+ </div>
89
+ </div>
90
+ </#list>
91
+ <!-- NtoN -->
92
+ <#list model.formFieldsNToN as field>
93
+ <#assign relationClassName = "">
94
+ <#assign dataSourceName = "">
95
+ <#assign keysDs = "">
96
+ <#if model.getManyToManyRelationship(field.getName())?? && model.getManyToManyRelationship(field.getName()).getRelationClassField().getClazz()??>
97
+ <#assign relationClassName = "${model.getManyToManyRelationship(field.getName()).getRelationClassField().getClazz()}">
98
+ <#if model.getManyToManyRelationship(field.getName()).getRelationClassField().getClazz().getAdjustedFullPrimaryKeys()??>
99
+ <#assign keysDs = "${model.getJoinKeys(model.getManyToManyRelationship(field.getName()).getRelationClassField().getClazz().getAdjustedFullPrimaryKeys())}">
100
+ </#if>
101
+ </#if>
102
+
103
+ <datasource
104
+ data-component="crn-datasource"
105
+ name="${relationClassName}"
106
+ entity="${model.namespace}.${relationClassName}"
107
+ keys="${keysDs}"
108
+ dependent-lazy-post="${model.dataSourceName}"
109
+ rows-per-page="100"
110
+ parameters="${model.getParametersDataSource(field)}"
111
+ schema="${model.getDSSchema(relationClassName)}"
112
+ lazy=true
113
+ >
114
+ </datasource>
115
+
116
+ <#if !field.getProperty("NToNOption")?has_content || field.getProperty("NToNOption") == "Lista">
117
+ <datasource data-component="crn-datasource" name="${field.getName()}NCombo" entity="${model.namespace}.${field.getRelationClazz().getName()}" keys="${model.getJoinKeys(field.getRelationClazz().getAdjustedFullPrimaryKeys())}" schema="${model.getDSSchema(field.getName())}" ></datasource>
118
+ <div class="component-holder ng-binding ng-scope " data-component="crn-enterprise-combobox-multiple" >
119
+ <div class="form-group">
120
+ <label for="combobox${field.getName()}-container">${field.getName()?cap_first}</label>
121
+ <cron-multi-select
122
+ options="${model.getMultiSelectOptions(field)}"
123
+ ng-required="false"
124
+ id="combobox${field.getName()}"
125
+ name="combobox${field.getName()}"
126
+ ng-model="${relationClassName}.data"
127
+ class="crn-select form-control" style="">
128
+ </cron-multi-select>
129
+ </div>
130
+ </div>
131
+ <#else>
132
+ <h2 class="lead component-holder text-left" data-component="crn-subtitle" xattr-position="text-left" id="crud-title-${model.random}" >${field.getName()?cap_first}</h2>
133
+ <div class="component-holder ng-binding ng-scope" data-component="crn-cron-grid" id="crn-grid-${field.getName()}-${model.random}">
134
+ <#assign dataSourceName = "${relationClassName}">
135
+ <cron-grid options="${model.getGridOptions(relationClassName, dataSourceName, field)}" ng-model="vars.grid${field.getName()}${model.random}" class="" style=""></cron-grid>
136
+ </div>
137
+ </#if>
138
+ </#list>
139
+ <!-- NtoN end-->
140
+ </div>
141
+ </form>
142
+ </section>
143
+ <section class="form" >
144
+ <form>
145
+ <div>
146
+ <!-- OneToN -->
147
+ <#list model.formFieldsOneToN as field>
148
+ <!--query filter 1toN -->
149
+ <#assign entitySearch = "">
150
+
151
+ <!-- query filter 1toN end-->
152
+ <datasource
153
+ data-component="crn-datasource"
154
+ filter=""
155
+ name="${field.getName()}Grid"
156
+ entity="${model.namespace}.${field.getName()}"
157
+ keys="${model.getDataSourcePrimaryKeys(field)}"
158
+ dependent-lazy-post="${model.dataSourceName}"
159
+ rows-per-page="100"
160
+ parameters="${model.getParametersDataSource(field)}"
161
+ schema="${model.getDSSchema(field.getName())}"
162
+ lazy=true>
163
+ </datasource>
164
+ <!-- teste -->
165
+ <h2 class="lead component-holder text-left" data-component="crn-subtitle"><#if field.getClazz()?? && field.getClazz().getRealName()?? && field.getClazz().getRealName()?has_content>${field.getClazz().getRealName()}<#else>${field.getName()}</#if> </h2>
166
+ <div class="component-holder ng-binding ng-scope" data-component="crn-cron-grid" id="crn-grid-${field.getName()}Grid-${model.random}">
167
+ <#assign classname = "${field.clazz.name}">
168
+ <#assign dataSourceName = "${classname}Grid">
169
+ <cron-grid options="${model.getGridOptions(classname, dataSourceName, field)}" ng-model="vars.${dataSourceName}${model.random}" class="" style=""></cron-grid>
170
+ </div>
171
+ </#list>
172
+ <!-- OneToOne end -->
173
+ </div>
174
+ </form>
175
+ </section>
176
+ </div>
177
+
178
+ <#if model.hasFieldGridNtoN()?? && model.hasFieldGridNtoN()>
179
+ <#list model.formFieldsNToN as field>
180
+ <#assign nomeModal = "modal${field.getName()}Grid">
181
+ <#if field.isNToN() && field.getProperty("NToNOption")?has_content && field.getProperty("NToNOption") == "Grade">
182
+ <div class="modal fade" id="modal${field.getName()}Grid">
183
+ <div class="modal-dialog">
184
+ <div class="modal-content">
185
+ <form>
186
+ <div class="modal-header">
187
+ <button type="button" class="close" data-dismiss="modal" aria-label="{{'Home.view.Close' | translate}}"><span aria-hidden="true">×</span></button>
188
+ <h3 class="modal-title">${field.getName()}</h3>
189
+ </div>
190
+ <div class="modal-body">
191
+ <div class="list-group list-group-sm row">
192
+ <#assign relationClassName = "">
193
+ <#assign dataSourceName = "${field.getClazz().getName()}">
194
+ <#assign dataSourceCombo = "${field.fullType}NCombo">
195
+ <#assign keyField = "">
196
+ <#assign textField = "">
197
+ <#if field.getFullType()?? && model.getManyToManyRelationship(field.getFullType())??>
198
+ <#assign relationClassName = "${model.getManyToManyRelationship(field.getFullType()).getRelationClass().getName()}">
199
+ <#assign keyField = "${model.getJoinKeys(model.getManyToManyRelationship(field.getFullType()).getRelationClass().getPrimaryKeys())}">
200
+ <#assign textField = "${model.getManyToManyRelationship(field.getFullType()).getRelationClass().getFirstStringFieldNonPrimaryKey().getName()}">
201
+ </#if>
202
+
203
+ <datasource data-component="crn-datasource" name="${dataSourceCombo}" entity="${model.namespace}.${relationClassName}" keys="${keyField}" schema="${model.getDSSchema(field.fullType)}" lazy=true></datasource>
204
+ <div data-component="crn-enterprise-dynamic-combobox" id="modal-combo${field.getName()}-${model.random}" class="component-holder ng-binding ng-scope">
205
+ <div class="form-group">
206
+ <label for="combobox-modal-${field.getName()}${model.random}" class=""><#if field.label?has_content>${field.label}<#else>${field.name?capitalize}</#if></label>
207
+ <cron-dynamic-select
208
+ id="combobox-modal-${field.getName()}${model.random}"
209
+ name="combobox-modal-${field.getName()}${model.random}"
210
+ options="${model.getComboOptions(field.fullType, textField, keyField, dataSourceCombo)}"
211
+ ng-model="${dataSourceName}.active.${field.relationField}"
212
+ class="crn-select form-control" <#if !field.isNullable()>required="required"</#if>>
213
+ </cron-dynamic-select>
214
+ </div>
215
+ </div>
216
+ </div>
217
+ </div>
218
+ <div class="modal-footer">
219
+ <div class="component-holder ng-scope" data-component="crn-button" id="crn-button-grid-save-button-modal">
220
+ <button class="btn k-button btn-block btn-success grid-save-button-modal" ng-click="${dataSourceName}.active.${model.getTextRelationField(field)}=${dataSourceCombo}.active.${textField}; ${dataSourceName}.post();" onclick="(!${dataSourceName}.missingRequiredField()?$('#${nomeModal}').modal('hide'):void(0))" xattr-fullsize="btn-block" xattr-theme="btn-success" xattr-disabled="">
221
+ <i class="k-icon k-i-check" icon-theme=""></i>
222
+ </button>
223
+ </div>
224
+ <div class="component-holder ng-scope" data-component="crn-button" id="crn-button-grid-cancel-button-modal">
225
+ <button class="btn k-button btn-block btn-danger" ng-click="${dataSourceName}.active.${model.getTextRelationField(field)}=${dataSourceCombo}.active.${textField}; ${dataSourceName}.post();" onclick="(!${dataSourceName}.missingRequiredField()?$('#${nomeModal}').modal('hide'):void(0))" xattr-fullsize="btn-block" xattr-theme="btn-danger" xattr-disabled="">
226
+ <i class="k-icon k-i-cancel" icon-theme=""></i>
227
+ </button>
228
+ </div>
229
+ </div>
230
+ </form>
231
+ </div>
232
+ </div>
233
+ </div>
234
+
235
+ </#if>
236
+ </#list>
237
+ </#if>
238
+
239
+ <#list model.formFieldsOneToN as field>
240
+ <div class="modal fade" id="modal${field.getName()}Grid">
241
+ <div class="modal-dialog">
242
+ <div class="modal-content">
243
+ <form>
244
+ <div class="modal-header">
245
+ <button type="button" class="close" data-dismiss="modal" aria-label="{{'Home.view.Close' | translate}}"><span aria-hidden="true">×</span></button>
246
+ <h3 class="modal-title">${field.getName()}</h3>
247
+ </div>
248
+ <div class="modal-body">
249
+ <div class="list-group list-group-sm row">
250
+ <#list field.getClazz().getFields() as gField>
251
+ <#if gField.isReverseRelation() || gField.isRelation() >
252
+ <#if (field.getDbFieldName() != gField.getDbFieldName())>
253
+ <#assign dataSourceCombo = "${gField.getRelationClazz().getName()}GridForCombo">
254
+ <datasource name="${dataSourceCombo}" entity="${model.namespace}.${gField.getRelationClazz().getName()}" keys="${model.getDataSourcePrimaryKeys(gField)}" rows-per-page="100" schema="${model.getDSSchema(gField.getRelationClazz().getName())}" lazy=true></datasource>
255
+ <div data-component="crn-enterprise-dynamic-combobox" id="crn-combobox-${field.getName()}Grid.active.${gField.getName()}-${model.random}" class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
256
+ <div class="form-group">
257
+ <label for="combobox-modal-${gField.getName()}-${model.random}" class=""><#if gField.label?has_content>${gField.label}<#else>${gField.name?capitalize}</#if></label>
258
+ <cron-dynamic-select
259
+ <#if !field.isNullable()>required="required"</#if>
260
+ id="combobox-modal-${gField.getName()}-${model.random}"
261
+ name="combobox-modal-${gField.getName()}-${model.random}"
262
+ options="${model.getComboOptions(gField.type, gField.getRelationClazz().getFirstStringFieldNonPrimaryKey().getName(), gField.getRelationClazz().getNameKeys(), dataSourceCombo)}"
263
+ ng-model="${field.getName()}Grid.active.${gField.getName()}"
264
+ class="crn-select form-control">
265
+ </cron-dynamic-select>
266
+ </div>
267
+ </div>
268
+ </#if>
269
+ <#elseif (!gField.isPrimaryKey() || field.getClazz().hasCompositeKey())>
270
+ <#assign dataComponentType = "crn-textinput">
271
+ <#if gField.isImage()>
272
+ <#assign dataComponentType = "crn-dynamic-image">
273
+ <#elseif gField.isFile()>
274
+ <#assign dataComponentType = "crn-dynamic-file">
275
+ <#elseif gField.isBoolean()>
276
+ <#assign dataComponentType = "crn-enterprise-checkbox">
277
+ </#if>
278
+ <div data-component="${dataComponentType}" id="crn-modal-textinput-${gField.getDbFieldName()}-${model.random}" class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
279
+ <div class="form-group">
280
+ <#if !gField.isBoolean()>
281
+ <#if gField.isImage() || gField.isFile()>
282
+ <label for="textinput-modal-${gField.getDbFieldName()}-button"><#if gField.label?has_content>${gField.label?cap_first}<#else>${gField.name?capitalize}</#if></label>
283
+ <#else>
284
+ <label for="textinput-modal-${gField.getDbFieldName()}"><#if gField.label?has_content>${gField.label?cap_first}<#else>${gField.name?capitalize}</#if></label>
285
+ </#if>
286
+ </#if>
287
+ <#if gField.isImage()>
288
+ <div dynamic-image id="textinput-modal-${gField.getDbFieldName()}" ng-model="${field.getName()}Grid.active.${gField.getName()}" max-file-size="5MB" class="dynamic-image-container" <#if !gField.isNullable()>ng-required="true"<#else>ng-required="false"</#if>>
289
+ {{"template.crud.clickOrDragAnImage" | translate}}
290
+ </div>
291
+ <#elseif gField.isBoolean() >
292
+ <input type="checkbox" <#if gField.isNullable()>crn-allow-null-values="true"<#else>crn-allow-null-values="false"</#if> class="k-checkbox" ng-model="${field.getName()}Grid.active.${gField.getName()}" id="cron-modal-checkbox-${gField.name}" <#if !gField.isNullable()>required="required"</#if>>
293
+ <label for="cron-modal-checkbox-${gField.name}" class="k-checkbox-label"><#if gField.label?has_content>${gField.label?cap_first}<#else>${gField.name?capitalize}</#if></label>
294
+ <#elseif gField.isFile()>
295
+ <div dynamic-file id="textinput-modal-${gField.getDbFieldName()}" ng-model="${field.getName()}Grid.active.${gField.getName()}" max-file-size="5MB" class="dynamic-image-container" <#if !gField.isNullable()>ng-required="true"<#else>ng-required="false"</#if>>
296
+ {{"template.crud.clickOrDragAnFile" | translate}}
297
+ </div>
298
+ <#else>
299
+ <input type="<#if gField.isEncryption()>password<#else>${gField.getHtmlType()}</#if>"
300
+ <#if gField.getLength()??>
301
+ maxlength="${gField.getLength()?string["0"]}"
302
+ </#if>
303
+ ng-model="${field.getName()}Grid.active.${gField.getName()}" class="form-control k-textbox"
304
+ id="textinput-modal-${gField.getDbFieldName()}"
305
+ placeholder="<#if gField.label?has_content>${gField.label}<#else>${gField.name?capitalize}</#if>"
306
+ mask="${model.formMapRelationFieldMasks[gField.name]}"
307
+ mask-placeholder=""
308
+ <#if model.formMapRelationFieldMasks[gField.name] == "999.999.999-99;0" >
309
+ <#assign valid = "cpf" >
310
+ <#elseif model.formMapRelationFieldMasks[gField.name] == "99.999.999/9999-99;0">
311
+ <#assign valid = "cnpj" >
312
+ </#if>
313
+ <#if valid?has_content>
314
+ valid="${valid}"
315
+ data-error-message="{{'invalid.${valid}' | translate}}"
316
+ </#if>
317
+ <#if !gField.isNullable()>ng-required="true"<#else>ng-required="false"</#if>>
318
+ </#if>
319
+ </div>
320
+ </div>
321
+ </#if>
322
+ </#list>
323
+ </div>
324
+ </div>
325
+ <div class="modal-footer">
326
+ </div>
327
+ </form>
328
+ </div>
329
+ </div>
330
+ </div>
331
+ </#list>
332
+ </div>
@@ -0,0 +1,8 @@
1
+ icon=update-web.png
2
+ name=Formulário de Atualização Web
3
+ description=Formulário para atualizar registros de uma fonte de dados
4
+ projectType=W,M
5
+ extension=.view.html
6
+ preferedFolder=${webFolder}/views
7
+ condition=webFolder
8
+ order=0
@@ -0,0 +1,2 @@
1
+ name=Web Form Update
2
+ description=Form to update records from a data source
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@cronapp/templates",
3
- "version": "2.9.2",
3
+ "version": "2.9.3-SP.2",
4
4
  "cronapp-ide-minimum-version": "2.5.0"
5
5
  }
@@ -11,10 +11,11 @@ mimetype.src.main.mobileapp.www=folder/web
11
11
  mimetype.src.main.webapp=folder/web
12
12
  mimetype.src.test.java=folder/regular
13
13
  mimetype.config=folder/servercontext
14
- billingPlan=developer,techne
14
+ planTypes=techne,cronapp
15
15
 
16
16
  template.id=cronapp-lyceum-project-mobile-cordova
17
17
  features=ionic|angularjs|eclipselink|jpa|maven|springboot|cordova
18
+ authenticationTypes=SSO
18
19
 
19
20
  parameter.page.1.string.0.appid=${generateAppId}
20
21
  parameter.page.1.boolean.1.frontend=true
@@ -1,5 +1,7 @@
1
1
  {
2
+ "Back": "Back",
2
3
  "directives.language-select.Language": "Language",
4
+ "Go.Home": "Go Home",
3
5
  "Login.view.Login": "Login",
4
6
  "Home.view.Admin": "Admin",
5
7
  "Home.view.Cidade": "City",
@@ -21,6 +23,7 @@
21
23
  "Permission.view.Remove": "Remove",
22
24
  "Permission.view.Edit": "Edit",
23
25
  "Permission.view.Select Person": "Select person",
26
+ "Retry": "Retry",
24
27
  "Roles.view.Name": "Name",
25
28
  "Roles.view.Remove": "Remove",
26
29
  "Roles.view.Load More": "Load more",
@@ -1,5 +1,7 @@
1
1
  {
2
+ "Back": "Voltar",
2
3
  "directives.language-select.Language": "Idioma",
4
+ "Go.Home": "Ir Ao Início",
3
5
  "Login.view.Login": "Entrar",
4
6
  "Home.view.Admin": "Admin",
5
7
  "Home.view.Cidade": "Cidade",
@@ -21,6 +23,7 @@
21
23
  "Permission.view.Remove": "Remover",
22
24
  "Permission.view.Edit": "Editar",
23
25
  "Permission.view.Select Person": "Selecione uma pessoa",
26
+ "Retry": "Tentar Novamente",
24
27
  "Roles.view.Name": "Nome",
25
28
  "Roles.view.Remove": "Remover",
26
29
  "Roles.view.Load More": "Carregar mais",
@@ -1,7 +1,10 @@
1
- <div class="card">
2
- <div style="text-align : center !important;">
3
- <i class=" ion-android-hand "></i>
4
- <h3>403</h3>
5
- <h5>{{'Forbidden' | translate}}</h5>
6
- </div>
1
+ <div class="card">
2
+ <div style="text-align : center !important;">
3
+ <i class=" ion-android-hand "></i>
4
+ <h3>403</h3>
5
+ <h5>{{'Forbidden' | translate}}</h5>
6
+ <button onclick="location.reload()">{{'Retry' | translate}}</button>
7
+ <button onclick="history.back()">{{'Back' | translate}}</button>
8
+ <button onclick="window.location.href = window.location.origin">{{'Go.Home' | translate}}</button>
9
+ </div>
7
10
  </div>
@@ -1,7 +1,10 @@
1
- <div class="card">
2
- <div style="text-align : center !important;">
3
- <i class=" ion-android-hand "></i>
4
- <h3>404</h3>
5
- <h5>{{'PageNotFound' | translate}}</h5>
6
- </div>
1
+ <div class="card">
2
+ <div style="text-align : center !important;">
3
+ <i class=" ion-android-hand "></i>
4
+ <h3>404</h3>
5
+ <h5>{{'PageNotFound' | translate}}</h5>
6
+ <button onclick="location.reload()">{{'Retry' | translate}}</button>
7
+ <button onclick="history.back()">{{'Back' | translate}}</button>
8
+ <button onclick="window.location.href = window.location.origin">{{'Go.Home' | translate}}</button>
9
+ </div>
7
10
  </div>
@@ -1,11 +1,11 @@
1
- <?xml version="1.0" encoding="UTF-8"?><blockly formTarget="" resourceType="JS" ruleDescription="Home" ruleName="Home" ruleSynchronous="false" ruleTimeout="" ruleType="I">
2
- <metadata scale="1" scrollx="357.0000000000002" scrolly="-123" target="Anb:u5+^,0vLkL9QIqn5"/>
3
- <block colour="#995ba5" id="Anb:u5+^,0vLkL9QIqn5" origintype="procedures_defreturn" output="false" tooltip="Cria uma função que possui um valor de retorno." type="procedures_defreturn" x="-350" y="130">
4
- <field name="NAME">change</field>
1
+ <?xml version="1.0" encoding="UTF-8"?><blockly audit="false" blocklyType="" bpmnAble="false" formTarget="" library="false" resourceType="JS" ruleDescription="Home" ruleName="Home" ruleSynchronous="false" ruleTimeout="" ruleType="I" soap="false" swagger="false">
2
+ <metadata scale="1" scrollx="487.4999999999998" scrolly="-63.30000000000007" target="Anb:u5+^,0vLkL9QIqn5"/>
3
+ <block asynccall="false" colour="#995ba5" id="Anb:u5+^,0vLkL9QIqn5" origintype="procedures_defreturn" output="false" tooltip="Cria uma função que possui um valor de retorno." type="procedures_defreturn" x="-350" y="130">
4
+ <field customattributes="" name="NAME">change</field>
5
5
  <comment h="80" pinned="false" w="160">Home</comment>
6
6
  <statement name="STACK">
7
- <block colour="#934848" dependencyby="Anb:u5+^,0vLkL9QIqn5" id="UQv[vJ.WyM+7,(wj:Mw|" multilayer="true" namespace="cronapi.screen.changeView" origintype="procedures_open_form_callnoreturn" output="false" returntype="ObjectType.VOID" tooltip="%3Cdiv%20class=%22name%22%3E%3Cstrong%3ENome:%3C/strong%3E%3Cdiv%3EMudar%20formul%C3%A1rio%3C/div%3E%3C/div%3E%3Cdiv%20class=%22description%22%3E%3Cstrong%3EDescri%C3%A7%C3%A3o:%3C/strong%3E%3Cdiv%3EFun%C3%A7%C3%A3o%20para%20mudar%20o%20formul%C3%A1rio%20corrente%3C/div%3E%3C/div%3E%3Cdiv%20class=%22params%22%3E%3Cstrong%3EParam%C3%AAtro:%3C/strong%3E%3Cdiv%3E%3Cspan%3E%20-%20Formul%C3%A1rio%20de%20destino%20:%20Texto%3C/span%3E%3Cbr%3E%3Cspan%3E%20-%20Par%C3%A2metros%20:%20Lista%3C/span%3E%3Cbr%3E%3C/div%3E%3C/div%3E%3Cdiv%20class=%22link%22%3E%3Cstrong%3EAjuda:%3C/strong%3E%3Cdiv%20class=%22tooltip-link%22%3E%3Ca%20target=%22_blank%22%20href=%22https://docs.cronapp.io/display/CRON2/cronapi.screen.changeView%22%3Ehttps://docs.cronapp.io/display/CRON2/cronapi.screen.changeView%3C/a%3E%3C/div%3E%3C/div%3E" type="procedures_open_form_callnoreturn">
8
- <mutation data="%7B%22form%22:%22#/app/public/home%22,%22params%22:%22%5B%5D%22%7D" name="{{cronapi.screen.changeView}}"/>
7
+ <block asynccall="false" colour="#487f7f" dependencyby="Anb:u5+^,0vLkL9QIqn5" id="CaY}*Wwy6hi.D$j_/QB`" multilayer="true" namespace="cronapi.util.changeViewMain" origintype="procedures_callnoreturn" output="false" returntype="ObjectType.VOID" tooltip="%3Cdiv%20class=%22name%22%3E%3Cstrong%3ENome:%3C/strong%3E%3Cdiv%3EAlterar%20para%20rota%20padr%C3%A3o%3C/div%3E%3C/div%3E%3Cdiv%20class=%22description%22%3E%3Cstrong%3EDescri%C3%A7%C3%A3o:%3C/strong%3E%3Cdiv%3EAlterar%20para%20rota%20padr%C3%A3o%20que%20est%C3%A1%20definido%20no%20projeto%3C/div%3E%3C/div%3E%3Cdiv%20class=%22link%22%3E%3Cstrong%3EAjuda:%3C/strong%3E%3Cdiv%20class=%22tooltip-link%22%3E%3Ca%20target=%22_blank%22%20href=%22http://localhost:8080/help?type=blockly&amp;amp;id=cronapi.util.changeViewMain%22%3EAjuda%3C/a%3E%3C/div%3E%3C/div%3E" type="procedures_callnoreturn">
8
+ <mutation name="{{cronapi.util.changeViewMain}}" return-raw-type="undefined"/>
9
9
  </block>
10
10
  </statement>
11
11
  </block>
@@ -9,5 +9,5 @@ window.blockly.js.blockly.auth.Home = window.blockly.js.blockly.auth.Home || {};
9
9
  */
10
10
  window.blockly.js.blockly.auth.Home.change = function() {
11
11
 
12
- this.cronapi.screen.changeView("#/app/public/home",[ ]);
12
+ this.cronapi.util.changeViewMain();
13
13
  }
@@ -1,7 +1,10 @@
1
- <div class="card">
2
- <div style="text-align : center !important;">
3
- <i class=" ion-android-hand "></i>
4
- <h3>403</h3>
5
- <h5>{{'Forbidden' | translate}}</h5>
6
- </div>
1
+ <div class="card">
2
+ <div style="text-align : center !important;">
3
+ <i class=" ion-android-hand "></i>
4
+ <h3>403</h3>
5
+ <h5>{{'Forbidden' | translate}}</h5>
6
+ <button onclick="location.reload()">{{'Retry' | translate}}</button>
7
+ <button onclick="history.back()">{{'Back' | translate}}</button>
8
+ <button onclick="window.location.href = window.location.origin">{{'Go.Home' | translate}}</button>
9
+ </div>
7
10
  </div>
@@ -1,7 +1,10 @@
1
- <div class="card">
2
- <div style="text-align : center !important;">
3
- <i class=" ion-android-hand "></i>
4
- <h3>404</h3>
5
- <h5>{{'PageNotFound' | translate}}</h5>
6
- </div>
1
+ <div class="card">
2
+ <div style="text-align : center !important;">
3
+ <i class=" ion-android-hand "></i>
4
+ <h3>404</h3>
5
+ <h5>{{'PageNotFound' | translate}}</h5>
6
+ <button onclick="location.reload()">{{'Retry' | translate}}</button>
7
+ <button onclick="history.back()">{{'Back' | translate}}</button>
8
+ <button onclick="window.location.href = window.location.origin">{{'Go.Home' | translate}}</button>
9
+ </div>
7
10
  </div>
@@ -96,7 +96,7 @@ maven.dependecies.new.dependency.14.artifactId=gson
96
96
  maven.dependecies.new.dependency.14.version=2.8.0
97
97
 
98
98
  features=ionic|angularjs|eclipselink|jpa|maven|springboot|cordova
99
-
99
+ authenticationTypes=Nenhuma|Normal|Token|activeDirectory|ldap|SSO|Saml
100
100
 
101
101
  parameter.page.1.string.0.appid=${generateAppId}
102
102
  parameter.page.1.boolean.1.frontend=true
@@ -104,8 +104,8 @@ parameter.page.1.boolean.2.backend=true
104
104
  parameter.page.1.list.3.authentication=Token|SSO|Saml|Nenhuma
105
105
  parameter.page.1.list.6.social=Não|Sim
106
106
  parameter.page.1.list.7.mutual=Não|Sim
107
-
108
107
  parameter.page.2.theme.6.theme=Material|Aquamarine|Fuse|DsGov|Cerulean|Cosmo|Cyborg|Darkly|Flatly|Journal|Lumen|Paper|Readable|Sandstone|Simplex|Slate|Spacelab|Superhero|United|Yeti
108
+
109
109
  themeDescription.Aquamarine=O tema Aquamarine utiliza o padrão de HTML e CSS do Bootstrap 🆕
110
110
  themeDescription.Fuse=O tema Fuse utiliza o padrão de HTML e CSS do Bootstrap 🆕
111
111
  themeDescription.DsGov=O tema DsGov utiliza o padrão de HTML e CSS do Gov.br 🆕
@@ -1,22 +1,26 @@
1
+ ## Consulte a documentação do Docker em https://docs.cronapp.io para informações sobre o conteúdo desse arquivo.
2
+
1
3
  FROM alpine:3.12.0 as maven_builder
2
4
  RUN apk add --no-cache --update-cache maven openjdk11 npm git bash
3
5
  WORKDIR /app
4
6
  ADD pom.xml /app/pom.xml
5
7
  RUN git config --global url."https://".insteadOf git://
6
- # Usando repositórios externo - JAR e NPM
7
- RUN mvn dependency:go-offline -B
8
- ADD . /app
9
- # Consulte https://docs.cronapp.io e busque por Novos parâmetros para gerar .war para mais informações sobre o TIER e CONTEXT_USE
10
8
  ARG TIER
11
9
  ARG CONTEXT_USE
12
10
  ARG MOBILE_APP
11
+
12
+ ## Para repositório EXTERNO não é necessário alterações.
13
+ ## Para repositório INTERNO comente as linhas 16, 17 e 18 e retire os comentários nas linhas 21, 22, 23 e 24.
14
+
15
+ ## Usando repositórios externo - JAR e NPM
16
+ RUN mvn dependency:go-offline -B
17
+ ADD . /app
13
18
  RUN cd /app && mvn package -X -Dcronapp.profile=${TIER} -Dcronapp.useContext=${CONTEXT_USE} -Dcronapp.mobileapp=${MOBILE_APP}
14
- # Usando repositórios JAR e NPM interno, comente as linhas equivalente acima, e logo após descomente do ADD até o último comando RUN
19
+
20
+ ## Usando repositórios interno - JAR e NPM
15
21
  #ADD settings.xml $HOME/.m2/settings.xml
16
22
  #RUN npm config set registry https://my.registry.com/your-repository/name && mvn -s /app/settings.xml dependency:go-offline -B
17
23
  #ADD . /app
18
- #ARG TIER
19
- #ARG CONTEXT_USE
20
24
  #RUN cd /app && mvn -s /app/settings.xml package -X -Dcronapp.profile=${TIER} -Dcronapp.useContext=${CONTEXT_USE} -Dcronapp.mobileapp=${MOBILE_APP}
21
25
 
22
26
  FROM tomcat:9.0.17-jre11
@@ -359,7 +359,7 @@
359
359
  "referencedColumnName": "",
360
360
  "isSearchable": false,
361
361
  "sequence": "",
362
- "isCascade": false,
362
+ "isCascade": true,
363
363
  "isVersion": false,
364
364
  "storageId": "",
365
365
  "storageKey": "",
@@ -1308,7 +1308,7 @@
1308
1308
  "referencedColumnName": "",
1309
1309
  "isSearchable": false,
1310
1310
  "sequence": "",
1311
- "isCascade": false
1311
+ "isCascade": true
1312
1312
  }
1313
1313
  ],
1314
1314
  "id": "2016ad54-a0f9-4337-ad10-694a48f0435c",
@@ -197,38 +197,6 @@
197
197
  </dependency>
198
198
  </#if>
199
199
  </dependencies>
200
- <repositories>
201
- <repository>
202
- <snapshots>
203
- <enabled>false</enabled>
204
- </snapshots>
205
- <id>central</id>
206
- <name>libs-release</name>
207
- <url>https://artifactory.cronapp.io/libs-release</url>
208
- </repository>
209
- <repository>
210
- <snapshots />
211
- <id>snapshots</id>
212
- <name>libs-snapshot</name>
213
- <url>https://artifactory.cronapp.io/libs-snapshot</url>
214
- </repository>
215
- </repositories>
216
- <pluginRepositories>
217
- <pluginRepository>
218
- <snapshots>
219
- <enabled>false</enabled>
220
- </snapshots>
221
- <id>central</id>
222
- <name>plugins-release</name>
223
- <url>https://artifactory.cronapp.io/plugins-release</url>
224
- </pluginRepository>
225
- <pluginRepository>
226
- <snapshots />
227
- <id>snapshots</id>
228
- <name>plugins-snapshot</name>
229
- <url>https://artifactory.cronapp.io/plugins-snapshot</url>
230
- </pluginRepository>
231
- </pluginRepositories>
232
200
  <properties>
233
201
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
234
202
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@@ -37,7 +37,7 @@ public class ApplicationUser implements Serializable {
37
37
  * @generated
38
38
  */
39
39
  @ManyToOne
40
- @JoinColumn(name="application_id", nullable = true, referencedColumnName = "id", insertable=true, updatable=true, foreignKey = @ForeignKey(name = "", foreignKeyDefinition = "FOREIGN KEY (application_id) REFERENCES APPLICATION (id)"))
40
+ @JoinColumn(name = "application_id", nullable = true, referencedColumnName = "id", insertable = true, updatable = true, foreignKey = @ForeignKey(name = "APPLICATION_USER_APPLICATION_ID_APPLICATION_ID", foreignKeyDefinition = "FOREIGN KEY (application_id) REFERENCES APPLICATION (id) ON DELETE CASCADE"))
41
41
 
42
42
  private Application application;
43
43
 
@@ -45,7 +45,7 @@ public class ApplicationUser implements Serializable {
45
45
  * @generated
46
46
  */
47
47
  @ManyToOne
48
- @JoinColumn(name="user_id", nullable = true, referencedColumnName = "id", insertable=true, updatable=true, foreignKey = @ForeignKey(name = "", foreignKeyDefinition = "FOREIGN KEY (user_id) REFERENCES USER (id)"))
48
+ @JoinColumn(name = "user_id", nullable = true, referencedColumnName = "id", insertable = true, updatable = true, foreignKey = @ForeignKey(name = "APPLICATION_USER_USER_ID_USER_ID", foreignKeyDefinition = "FOREIGN KEY (user_id) REFERENCES USER (id) ON DELETE CASCADE"))
49
49
 
50
50
  private User user;
51
51
 
@@ -58,7 +58,7 @@ public class Login implements Serializable {
58
58
  * @generated
59
59
  */
60
60
  @ManyToOne
61
- @JoinColumn(name="user_id", nullable = false, referencedColumnName = "id", insertable=true, updatable=true)
61
+ @JoinColumn(name = "user_id", nullable = false, referencedColumnName = "id", insertable = true, updatable = true, foreignKey = @ForeignKey(name = "LOGIN_USER_ID_USER_ID", foreignKeyDefinition = "FOREIGN KEY (user_id) REFERENCES USER (id) ON DELETE CASCADE"))
62
62
 
63
63
  private User user;
64
64
 
@@ -21,5 +21,7 @@ security.oauth2.saml.privateKey=privateKey
21
21
  security.oauth2.saml.privateKeyPass=privateKeyPass
22
22
  security.oauth2.saml.storeFile=storeFile
23
23
  security.oauth2.saml.storePass=storePass
24
+ security.oauth2.saml.maxAuthenticationAge=7200
25
+ security.oauth2.saml.forceAuthN=false
24
26
  security.oauth2.sso.login-path=/login
25
27
  spring.output.ansi.enabled=ALWAYS
@@ -1,5 +1,7 @@
1
1
  {
2
+ "Back": "Back",
2
3
  "directives.language-select.Language": "Language",
4
+ "Go.Home": "Go Home",
3
5
  "Login.view.Login": "Login",
4
6
  "Home.view.Admin": "Admin",
5
7
  "Home.view.Cidade": "City",
@@ -21,6 +23,7 @@
21
23
  "Permission.view.Remove": "Remove",
22
24
  "Permission.view.Edit": "Edit",
23
25
  "Permission.view.Select Person": "Select person",
26
+ "Retry": "Retry",
24
27
  "Roles.view.Name": "Name",
25
28
  "Roles.view.Remove": "Remove",
26
29
  "Roles.view.Load More": "Load more",
@@ -1,5 +1,7 @@
1
1
  {
2
+ "Back": "Voltar",
2
3
  "directives.language-select.Language": "Idioma",
4
+ "Go.Home": "Ir Ao Início",
3
5
  "Login.view.Login": "Entrar",
4
6
  "Home.view.Admin": "Admin",
5
7
  "Home.view.Cidade": "Cidade",
@@ -21,6 +23,7 @@
21
23
  "Permission.view.Remove": "Remover",
22
24
  "Permission.view.Edit": "Editar",
23
25
  "Permission.view.Select Person": "Selecione uma pessoa",
26
+ "Retry": "Tentar Novamente",
24
27
  "Roles.view.Name": "Nome",
25
28
  "Roles.view.Remove": "Remover",
26
29
  "Roles.view.Load More": "Carregar mais",
@@ -1,13 +1,14 @@
1
1
  <div class="container-fluid">
2
- <div class="row">
3
- <div class="col-xs-8 col-sm-6 col-sm-offset-3 col-xs-offset-2 text-center">
4
- <div class="">
5
-
6
- <i class="fa fa-hand-paper-o fa-5x"></i>
7
- <h3>403</h3>
8
- <h5>{{'Forbidden' | translate}}</h5>
9
-
10
- </div>
11
- </div>
2
+ <div class="row">
3
+ <div class="col-xs-8 col-sm-6 col-sm-offset-3 col-xs-offset-2 text-center">
4
+ <div class="">
5
+ <i class="fa fa-hand-paper-o fa-5x"></i>
6
+ <h3>403</h3>
7
+ <h5>{{'Forbidden' | translate}}</h5>
8
+ <button onclick="location.reload()">{{'Retry' | translate}}</button>
9
+ <button onclick="history.back()">{{'Back' | translate}}</button>
10
+ <button onclick="window.location.href = window.location.origin">{{'Go.Home' | translate}}</button>
11
+ </div>
12
12
  </div>
13
+ </div>
13
14
  </div>
@@ -1,13 +1,14 @@
1
1
  <div class="container-fluid">
2
- <div class="row">
3
- <div class="col-xs-8 col-sm-6 col-sm-offset-3 col-xs-offset-2 text-center">
4
- <div class="">
5
-
6
- <i class="fa fa-exclamation-circle fa-5x"></i>
7
- <h3>404</h3>
8
- <h5>{{'PageNotFound' | translate}}</h5>
9
-
10
- </div>
11
- </div>
2
+ <div class="row">
3
+ <div class="col-xs-8 col-sm-6 col-sm-offset-3 col-xs-offset-2 text-center">
4
+ <div class="">
5
+ <i class="fa fa-exclamation-circle fa-5x"></i>
6
+ <h3>404</h3>
7
+ <h5>{{'PageNotFound' | translate}}</h5>
8
+ <button onclick="location.reload()">{{'Retry' | translate}}</button>
9
+ <button onclick="history.back()">{{'Back' | translate}}</button>
10
+ <button onclick="window.location.href = window.location.origin">{{'Go.Home' | translate}}</button>
11
+ </div>
12
12
  </div>
13
+ </div>
13
14
  </div>
@@ -70,7 +70,7 @@ maven.dependecies.new.dependency.10.version=1.3.5.RELEASE
70
70
  maven.dependecies.new.dependency.10.scope=provided
71
71
 
72
72
  features=angularjs|eclipselink|jpa|maven|springboot
73
-
73
+ authenticationTypes=Nenhuma|Normal|Token|activeDirectory|ldap|SSO|Saml
74
74
 
75
75
  parameter.page.1.string.0.appid=${generateAppId}
76
76
  parameter.page.1.boolean.1.frontend=true
@@ -80,6 +80,7 @@ parameter.page.1.list.4.menuPosition=Horizontal|Vertical
80
80
  parameter.page.1.list.6.social=Não|Sim
81
81
  parameter.page.1.list.7.mutual=Não|Sim
82
82
  parameter.page.2.theme.6.theme=Material|Aquamarine|Fuse|DsGov|Cosmo|Cyborg|Darkly|Flatly|Journal|Lumen|Paper|Readable|Sandstone|Simplex|Slate|Spacelab|Superhero|United|Yeti
83
+
83
84
  themeDescription.Aquamarine=O tema Aquamarine utiliza o padrão de HTML e CSS do Bootstrap 🆕
84
85
  themeDescription.Fuse=O tema Fuse utiliza o padrão de HTML e CSS do Bootstrap 🆕
85
86
  themeDescription.DsGov=O tema DsGov utiliza o padrão de HTML e CSS do Gov.br 🆕
@@ -223,7 +223,10 @@ public class ${clazz.name} implements Serializable {
223
223
  </#list>
224
224
  })
225
225
  <#else>
226
- @Column(name = "${field.dbFieldName?replace("\"", "\\\"")}", nullable = ${field.nullable?c}<#if !field.primaryKey>, unique = ${field.unique?c}</#if><#if field.length??>, length=${field.length?c}</#if><#if field.precision??>, precision=${field.precision?c}</#if><#if field.scale??>, scale=${field.scale?c}</#if>, insertable=${field.insertable?c}, updatable=${field.updatable?c}<#if field.columnDefinition??>, columnDefinition = "${field.columnDefinition}"</#if>)
226
+ <#if field.columnDefinition?? && field.columnDefinition == "TEXT" && persistenceProvider?upper_case == "ORACLE">
227
+ @Lob
228
+ </#if>
229
+ @Column(name = "${field.dbFieldName?replace("\"", "\\\"")}", nullable = ${field.nullable?c}<#if !field.primaryKey>, unique = ${field.unique?c}</#if><#if field.length??>, length=${field.length?c}</#if><#if field.precision??>, precision=${field.precision?c}</#if><#if field.scale??>, scale=${field.scale?c}</#if>, insertable=${field.insertable?c}, updatable=${field.updatable?c}<#if field.columnDefinition?? && (field.columnDefinition != "TEXT" || persistenceProvider?upper_case != "ORACLE")>, columnDefinition = "${field.columnDefinition}"</#if>)
227
230
  </#if>
228
231
  ${field.modifier} <#if field.arrayRelation>${field.type}<#else>${field.type}</#if> ${name}<#if field.defaultValue?has_content> = ${field.defaultValue}<#elseif field.primaryKey && field.generationType?? && field.generationType == "UUID"> = UUID.randomUUID().toString().toUpperCase()</#if>;
229
232
  </#if>
@@ -280,7 +283,10 @@ public class ${clazz.name} implements Serializable {
280
283
  <#elseif field.isTimestamp()>
281
284
  @Temporal(TemporalType.TIMESTAMP)
282
285
  </#if>
283
- @Column(name = "${field.dbFieldName?replace("\"", "\\\"")}", nullable = ${field.nullable?c}<#if !field.primaryKey>, unique = ${field.unique?c}</#if><#if field.length??>, length=${field.length?c}</#if><#if field.precision??>, precision=${field.precision?c}</#if><#if field.scale??>, scale=${field.scale?c}</#if>, insertable=${field.insertable?c}, updatable=${field.updatable?c}<#if field.columnDefinition??>, columnDefinition = "${field.columnDefinition}"</#if>)
286
+ <#if field.columnDefinition?? && field.columnDefinition == "TEXT" && persistenceProvider?upper_case == "ORACLE">
287
+ @Lob
288
+ </#if>
289
+ @Column(name = "${field.dbFieldName?replace("\"", "\\\"")}", nullable = ${field.nullable?c}<#if !field.primaryKey>, unique = ${field.unique?c}</#if><#if field.length??>, length=${field.length?c}</#if><#if field.precision??>, precision=${field.precision?c}</#if><#if field.scale??>, scale=${field.scale?c}</#if>, insertable=${field.insertable?c}, updatable=${field.updatable?c}<#if field.columnDefinition?? && (field.columnDefinition != "TEXT" || persistenceProvider?upper_case != "ORACLE")>, columnDefinition = "${field.columnDefinition}"</#if>)
284
290
  </#if>
285
291
  </#if>
286
292
  <#if field.getUseOuterJoin()>
@@ -32,7 +32,7 @@ public class ${clazz.name + "PK"} implements Serializable {
32
32
  <#assign name = "${field.name}">
33
33
  <#if field.getProperty("FOREIGN")??>
34
34
  <#if name?contains('_')>
35
- <#assign name = "${field.name?string[0..field.name?index_of('_') - 1]}">
35
+ <#assign name = "${field.name?string[0..field.name?last_index_of('_') - 1]}">
36
36
  </#if>
37
37
  </#if>
38
38
 
@@ -53,7 +53,7 @@ public class ${clazz.name + "PK"} implements Serializable {
53
53
  <#assign name = "${field.name}">
54
54
  <#if field.getProperty("FOREIGN")??>
55
55
  <#if name?contains('_')>
56
- <#assign name = "${field.name?string[0..field.name?index_of('_') - 1]}">
56
+ <#assign name = "${field.name?string[0..field.name?last_index_of('_') - 1]}">
57
57
  </#if>
58
58
  </#if>
59
59
  /**
@@ -88,7 +88,7 @@ ${clazz.name + "PK"} object = (${clazz.name + "PK"})obj;
88
88
  <#assign name = "${field.name}">
89
89
  <#if field.getProperty("FOREIGN")??>
90
90
  <#if name?contains('_')>
91
- <#assign name = "${field.name?string[0..field.name?index_of('_') - 1]}">
91
+ <#assign name = "${field.name?string[0..field.name?last_index_of('_') - 1]}">
92
92
  </#if>
93
93
  </#if>
94
94
  if (${name} != null ? !${name}.equals(object.${name}) : object.${name} != null) return false;
@@ -106,7 +106,7 @@ ${clazz.name + "PK"} object = (${clazz.name + "PK"})obj;
106
106
  <#assign name = "${field.name}">
107
107
  <#if field.getProperty("FOREIGN")??>
108
108
  <#if name?contains('_')>
109
- <#assign name = "${field.name?string[0..field.name?index_of('_') - 1]}">
109
+ <#assign name = "${field.name?string[0..field.name?last_index_of('_') - 1]}">
110
110
  </#if>
111
111
  </#if>
112
112
  <#if !field.isTypePrimitive()>
@@ -16,28 +16,38 @@ public class SecurityPermission implements Permission {
16
16
  public void loadSecurityPermission(HttpSecurity http) throws Exception {
17
17
 
18
18
  // public
19
+ <#if listPermitAll??>
19
20
  <#list listPermitAll as role>
20
21
  ${role}
21
22
  </#list>
22
-
23
+ </#if>
24
+
23
25
  // role hasAuthority permission
26
+ <#if listHasAuthority??>
24
27
  <#list listHasAuthority as role>
25
28
  ${role}
26
29
  </#list>
27
-
30
+ </#if>
31
+
28
32
  // role hasAnyAuthority permission
33
+ <#if listHasAnyAuthority??>
29
34
  <#list listHasAnyAuthority as role>
30
35
  ${role}
31
36
  </#list>
37
+ </#if>
32
38
 
33
39
  // autenticated
40
+ <#if listAutenticated??>
34
41
  <#list listAutenticated as role>
35
42
  ${role}
36
43
  </#list>
44
+ </#if>
37
45
 
38
46
  // deny all
39
- <#list listDenyAll as role>
40
- ${role}
41
- </#list>
47
+ <#if listDenyAll??>
48
+ <#list listDenyAll as role>
49
+ ${role}
50
+ </#list>
51
+ </#if>
42
52
  }
43
- }
53
+ }
@@ -1,69 +0,0 @@
1
- <h2 class="component-holder text-left h3 title">Title</h2>
2
-
3
- <datasource data-component="crn-datasource" filter="" name="MainDatasource" entity="" keys="" rows-per-page="100" class="" schema="" lazy=""></datasource>
4
-
5
- <div role="search" ng-hide="MainDatasource.inserting || MainDatasource.editing" data-component="crn-datasource-filter" id="crn-datasource-filter" class="">
6
- <div class="form-group">
7
- <label for="textinput-filter" class="">{{"template.crud.search" | translate}}</label>
8
- <input type="text" ng-model="vars.search" id="textinput-filter" class="form-control k-textbox" cronapp-filter="" cronapp-filter-operator="" cronapp-filter-caseinsensitive="false" cronapp-filter-autopost="true" crn-datasource="MainDatasource" value="" placeholder="{{'template.crud.search' | translate}}">
9
- </div>
10
- </div>
11
-
12
- <section ng-hide="MainDatasource.editing || MainDatasource.inserting" class="component-holder ng-binding ng-scope" data-component="crn-cron-grid" id="cron-crn-grid-search">
13
- <cron-grid options="{&quot;dataSourceScreen&quot;:{},&quot;allowPaging&quot;:true,&quot;allowSorting&quot;:true,&quot;allowGrouping&quot;:false,&quot;allowSelectionTotalPageToShow&quot;:true,&quot;allowRefreshGrid&quot;:true,&quot;allowSelectionRow&quot;:true,&quot;editable&quot;:&quot;datasource&quot;,&quot;columns&quot;:[],&quot;toolBarButtons&quot;:[{&quot;type&quot;:&quot;Native&quot;,&quot;title&quot;:&quot;create&quot;}],&quot;details&quot;:[]}" ng-model="vars.gridmain" class="" style="">
14
- </cron-grid>
15
- </section>
16
- <div data-component="crn-form" id="crn-form-form">
17
- <section class="form" ng-show="MainDatasource.editing || MainDatasource.inserting">
18
- <form crn-datasource="MainDatasource" class="">
19
- <div class="tool-bar" ng-hide="datasource.editing || datasource.inserting">
20
- <div class="component-holder ng-scope" data-component="crn-button" id="crn-button-startInserting">
21
- <button class="btn k-button btn-block btn-default btn-fab" ng-click="datasource.startInserting()" aria-label="{{'StartInserting' | translate}}" xattr-fullsize="btn-block" xattr-theme="btn-default" xattr-disabled="">
22
- <i class="glyphicon glyphicon-plus" icon-theme=""></i>
23
- </button>
24
- </div>
25
- <div class="component-holder ng-scope" data-component="crn-button" id="crn-button-startEditing">
26
- <button class="btn k-button btn-block btn-default btn-fab" ng-click="datasource.startEditing()" aria-label="{{'startEditing' | translate}}" xattr-fullsize="btn-block" xattr-theme="btn-default" xattr-disabled="">
27
- <i class="glyphicon glyphicon-pencil" icon-theme=""></i>
28
- </button>
29
- </div>
30
- <div class="component-holder ng-scope" data-component="crn-button" id="crn-button-previous">
31
- <button class="btn k-button btn-block btn-default btn-fab" ng-click="datasource.previous()" ng-disabled="!datasource.hasPrevious()" aria-label="{{'Before' | translate}}" xattr-fullsize="btn-block" xattr-theme="btn-default" xattr-disabled="">
32
- <i class="glyphicon glyphicon-chevron-left" icon-theme=""></i>
33
- </button>
34
- </div>
35
- <div class="component-holder ng-scope" data-component="crn-button" id="crn-button-next">
36
- <button class="btn k-button btn-block btn-default btn-fab" ng-click="datasource.next()" ng-disabled="!datasource.hasNext()" aria-label="{{'Next' | translate}}" xattr-fullsize="btn-block" xattr-theme="btn-default" xattr-disabled="">
37
- <i class="glyphicon glyphicon-chevron-right" icon-theme=""></i>
38
- </button>
39
- </div>
40
- <div class="component-holder ng-scope" data-component="crn-button" id="crn-button-remove">
41
- <button class="btn k-button btn-block btn-danger btn-fab" ng-click="datasource.remove()" aria-label="{{'Remove' | translate}}" xattr-fullsize="btn-block" xattr-theme="btn-danger" xattr-disabled="">
42
- <i class="glyphicon glyphicon-remove" icon-theme=""></i>
43
- </button>
44
- </div>
45
- </div>
46
- <div class="active-bar" ng-hide="!datasource.editing &amp;&amp; !datasource.inserting">
47
- <div class="component-holder ng-scope" data-component="crn-button" id="btn_crud_post_${model.random}">
48
- <button class="btn k-button btn-block btn-success btn-fab" ng-click="datasource.post()" aria-label="{{'SaveChanges' | translate}}" xattr-fullsize="btn-block" xattr-theme="btn-success" xattr-disabled="">
49
- <i class="glyphicon glyphicon-ok" icon-theme=""></i>
50
- </button>
51
- </div>
52
- <div class="component-holder ng-scope" data-component="crn-button" id="btn_crud_cancel_${model.random}">
53
- <button class="btn k-button btn-block btn-danger btn-fab" ng-click="datasource.cancel()" aria-label="{{'CancelChanges' | translate}}" xattr-fullsize="btn-block" xattr-theme="btn-danger" xattr-disabled="">
54
- <i class="glyphicon glyphicon-ban-circle" icon-theme=""></i>
55
- </button>
56
- </div>
57
- </div>
58
- <br>
59
- <fieldset ng-disabled="!datasource.editing &amp;&amp; !datasource.inserting">
60
- <div class="component-holder ng-binding ng-scope" data-component="crn-textinput" id="crn-textinput-98075">
61
- <div class="form-group">
62
- <label for="input5045">Label</label>
63
- <input type="text" mask="" mask-placeholder="" ng-required="false" ng-model="vars.input5045" class="form-control k-textbox" id="input5045" placeholder="Placeholder text">
64
- </div>
65
- </div>
66
- </fieldset>
67
- </form>
68
- </section>
69
- </div>
@@ -1,7 +0,0 @@
1
- icon=view.html.png
2
- underFolders=webapp
3
- name=Crud From
4
- encoding=UTF-8
5
- parameter.string.FileName=File Name
6
- parameter.string.FileName.value=crud
7
- projectType=W
@@ -1,4 +0,0 @@
1
- icon=view.html.png
2
- name=Formulário Crud
3
- encoding=UTF-8
4
- parameter.string.FileName=Nome do Arquivo