@cronapp/templates 2.9.2 → 2.9.3-SP.10
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.
- package/file/crud/angular_view_update/__FileName__.view.html.ftl +332 -0
- package/file/crud/angular_view_update/template.properties +8 -0
- package/file/crud/angular_view_update/template_en_US.properties +2 -0
- package/file/crud/angular_view_update/update-web.png +0 -0
- package/package.json +1 -1
- package/project/M/cronapp-lyceum-project-mobile-cordova/template.properties +2 -1
- package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/i18n/locale_en_us.json +3 -0
- package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/i18n/locale_pt_br.json +3 -0
- package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/views/error/403.view.html +9 -6
- package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-autenticacao/views/error/404.view.html +9 -6
- package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-sem-autenticacao/js/blockly/auth/Home.blockly +6 -6
- package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-sem-autenticacao/js/blockly/auth/Home.blockly.js +1 -1
- package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-sem-autenticacao/views/error/403.view.html +9 -6
- package/project/M/cronapp-rad-project-mobile-cordova/src/main/mobileapp/www/www-sem-autenticacao/views/error/404.view.html +9 -6
- package/project/M/cronapp-rad-project-mobile-cordova/template.properties +2 -2
- package/project/W/cronapp-rad-project/Dockerfile +11 -7
- package/project/W/cronapp-rad-project/diagram/app.umlcd +2 -2
- package/project/W/cronapp-rad-project/pom.xml.ftl +0 -32
- package/project/W/cronapp-rad-project/src/main/java/app/entity/ApplicationUser.java +2 -2
- package/project/W/cronapp-rad-project/src/main/java/app/entity/Login.java +1 -1
- package/project/W/cronapp-rad-project/src/main/resources/application.properties +2 -0
- package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/i18n/locale_en_us.json +3 -0
- package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/i18n/locale_pt_br.json +3 -0
- package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/views/error/403.view.html +11 -10
- package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/views/error/404.view.html +11 -10
- package/project/W/cronapp-rad-project/template.properties +2 -1
- package/templates/low-code/data-layer/ENTITIES.ftl +8 -2
- package/templates/low-code/data-layer/ENTITIESPK.ftl +4 -4
- package/templates/low-code/data-layer/SecurityPermission.java.ftl +16 -6
- package/file/view.html/EmptyCrudHtml/__FileName__.view.html.ftl +0 -69
- package/file/view.html/EmptyCrudHtml/template.properties +0 -7
- package/file/view.html/EmptyCrudHtml/template_pt_BR.properties +0 -4
- package/file/view.html/EmptyCrudHtml/view.html.png +0 -0
- /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>
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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="
|
|
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="#
|
|
8
|
-
<mutation
|
|
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;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>
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":
|
|
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":
|
|
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
|
package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/i18n/locale_en_us.json
CHANGED
|
@@ -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",
|
package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/i18n/locale_pt_br.json
CHANGED
|
@@ -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",
|
package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/views/error/403.view.html
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
<div class="container-fluid">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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>
|
package/project/W/cronapp-rad-project/src/main/webapp-autenticacao/webapp/views/error/404.view.html
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
<div class="container-fluid">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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?
|
|
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?
|
|
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?
|
|
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?
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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="{"dataSourceScreen":{},"allowPaging":true,"allowSorting":true,"allowGrouping":false,"allowSelectionTotalPageToShow":true,"allowRefreshGrid":true,"allowSelectionRow":true,"editable":"datasource","columns":[],"toolBarButtons":[{"type":"Native","title":"create"}],"details":[]}" 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 && !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 && !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>
|
|
Binary file
|