@eqproject/eqp-dynamic-module 2.3.32 → 2.3.34
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/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +3 -3
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +4 -8
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +3 -11
- package/esm2020/lib/components/private/dynamic-module-field/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +4 -12
- package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +3 -12
- package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +3 -17
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +4 -12
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +3 -11
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +20 -165
- package/esm2020/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +4 -12
- package/esm2020/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.mjs +3 -11
- package/esm2020/lib/components/private/form-records/view-form-record/view-form-record.component.mjs +3 -11
- package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +3 -11
- package/esm2020/lib/components/private/graphs/graphs.component.mjs +3 -11
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +265 -509
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +264 -508
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +0 -1
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +1 -3
- package/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.d.ts +1 -3
- package/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.d.ts +1 -3
- package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +1 -2
- package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +1 -3
- package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +1 -3
- package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +4 -19
- package/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.d.ts +1 -3
- package/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.d.ts +1 -3
- package/lib/components/private/form-records/view-form-record/view-form-record.component.d.ts +1 -3
- package/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.d.ts +1 -3
- package/lib/components/private/graphs/graphs.component.d.ts +1 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eqproject-eqp-dynamic-module.mjs","sources":["../../../projects/eqp-dynamic-module/src/lib/models/context.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleCompileConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleListFormRecordActionsDefault.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleListConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleRepairConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleViewModeEnum.ts","../../../projects/eqp-dynamic-module/src/lib/models/endPointConfiguration.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/baseObj.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/form.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/eqp-dynamic-module-dialog.service.ts","../../../projects/eqp-dynamic-module/src/lib/models/baseField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/textField.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/custom-form-validators.service.ts","../../../projects/eqp-dynamic-module/src/lib/services/spinner.service.ts","../../../projects/eqp-dynamic-module/src/lib/services/utilityHelper.services.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleFilterResultViewModeEnum.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/global.service.ts","../../../projects/eqp-dynamic-module/src/lib/models/record.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/dateField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-form-record/list-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-form-record/list-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/services/voice-recognition.service.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/text-field-template/text-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/text-field-template/text-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/booleanField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/date-field-template/date-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/date-field-template/date-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/listValueField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/attachmentField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-template/image-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-template/image-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/add-form-record/add-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/add-form-record/add-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/view-form-record/view-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/view-form-record/view-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/spinner/spinner.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/spinner/spinner.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.html","../../../projects/eqp-dynamic-module/src/lib/models/statistic.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/logicOperator.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.html","../../../projects/eqp-dynamic-module/src/lib/models/graph.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graph/graph.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graph/graph.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graphs.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graphs.component.html","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.html","../../../projects/eqp-dynamic-module/src/lib/modules/material.module.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfiguratorSpecificConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleGeneralConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfiguratorConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/modules/formula.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/add-formula-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/add-formula-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/dialog-data-example.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/add-form-field/add-form-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-form-field/add-form-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field/dynamic-module-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field/dynamic-module-field.component.html","../../../projects/eqp-dynamic-module/src/lib/eqp-dynamic-module.module.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/entity.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/imageField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/lookupField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/numericField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/textareaField.model.ts","../../../projects/eqp-dynamic-module/src/public-api.ts","../../../projects/eqp-dynamic-module/src/eqproject-eqp-dynamic-module.ts"],"sourcesContent":["export class Context {\r\n User: ContextUser = new ContextUser();\r\n Organizzation: string;\r\n}\r\n\r\nexport class ContextUser {\r\n Name: string;\r\n Surname: string;\r\n Role: string;\r\n}","export class DynamicModuleCompileConfig {\r\n /**\r\n * Show/Hide module name in COMPILE/LIST\r\n */\r\n showTitle: boolean;\r\n\r\n /**\r\n * Show/Hide form save button\r\n */\r\n showSaveButton: boolean;\r\n /**\r\n * Show/Hide form back/annulla button\r\n */\r\n showBackButton: boolean;\r\n /**\r\n * Set id for save\r\n */\r\n userID: string;\r\n /**\r\n * Additional Params for filtering\r\n */\r\n additionalParams: any;\r\n /**\r\n * Prefilter Params for filtering\r\n */\r\n prefilterParams: any; \r\n /**\r\n * Mostra bottone \"nuova ricerca\"\r\n */\r\n showNewSearchButton: boolean;\r\n\r\n constructor(\r\n showTitle: boolean = true,\r\n showSaveButton: boolean = true,\r\n showBackButton: boolean = true,\r\n userID: string = \"0\",\r\n additionalParams: any = null,\r\n prefilterParams: any = null,\r\n showNewSearchButton: boolean = true\r\n ) {\r\n this.showTitle = showTitle;\r\n this.showSaveButton = showSaveButton;\r\n this.showBackButton = showBackButton;\r\n this.userID = userID;\r\n this.additionalParams = additionalParams;\r\n this.prefilterParams = prefilterParams;\r\n this.showNewSearchButton = showNewSearchButton;\r\n }\r\n}\r\n","export class DynamicModuleListFormRecordActionsDefault {\r\n /*\r\n * pulsante aggiungi in alto\r\n */\r\n add: boolean\r\n /*\r\n * pulsante visualizza nel menu della risposta\r\n */\r\n view: boolean\r\n /*\r\n * pulsante modifica nel menu della risposta\r\n */\r\n edit: boolean\r\n /*\r\n * pulsante duplica nel menu della risposta\r\n */\r\n duplicate: boolean\r\n /*\r\n * pulsante elimina nel menu della risposta\r\n */\r\n delete: boolean\r\n /*\r\n * pulsante elimina nel menu della risposta\r\n */\r\n graphs: boolean \r\n\r\n constructor(add: boolean = true, view: boolean = true, edit: boolean = true, duplicate: boolean = true, del: boolean = true, graphs: boolean = true){\r\n this.add = add\r\n this.view = view\r\n this.edit = edit\r\n this.duplicate = duplicate\r\n this.delete = del\r\n this.graphs = graphs\r\n }\r\n\r\n}\r\n","import { DynamicModuleListFormRecordActionsDefault } from \"./dynamicModuleListFormRecordActionsDefault\";\r\nimport { Record, RecordButton } from \"./record.model\";\r\n\r\nexport class DynamicModuleListConfig {\r\n /**\r\n * Show/Hide module name in COMPILE/LIST\r\n */\r\n showTitle: boolean = true;\r\n\r\n /**\r\n * Lista delle azioni di default da mostrare per visualizzare/modificare/duplicare/eliminare in LIST MODE\r\n */\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault\r\n\r\n /**\r\n * Lista dei record da mostrare in LIST MODE\r\n */\r\n values: Array<Record>;\r\n\r\n /**\r\n * Lista degli eventuali bottoni esterni dipendenti dall'applicazione utilizzatrice in aggiunta ai defaultListActions\r\n */\r\n externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n \r\n /**\r\n * L'Id utente per filtrare le risposte\r\n */\r\n userID: string = \"0\";\r\n constructor(\r\n showTitle: boolean = true,\r\n values: Array<Record> = null,\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault(),\r\n userID: string = \"0\",\r\n externalButtons: Array<RecordButton> = new Array<RecordButton>()\r\n ) {\r\n this.showTitle = showTitle;\r\n this.values = values;\r\n this.defaultListActions = defaultListActions;\r\n this.userID = userID;\r\n this.externalButtons = externalButtons;\r\n }\r\n}\r\n","export class DynamicModuleRepairConfig {\r\n /*\r\n * stringa da passare in REPAIR MODE\r\n */\r\n FormJSON: string = \"\";\r\n\r\n constructor(formJson: string){\r\n this.FormJSON = formJson;\r\n }\r\n}\r\n","export enum DynamicModuleViewModeEnum {\r\n NONE = 0,\r\n VIEW = 1,\r\n COMPILE = 2,\r\n LIST = 3,\r\n REPAIR = 4,\r\n LISTWIEW = 5,\r\n FILTER = 6,\r\n GRAPHS = 7\r\n}","export class EndPointConfiguration {\r\n Records: {\r\n GetByFormIDEndPoint?: EndPointData;\r\n GetAllByEntAndUserIDEndPoint?: EndPointData;\r\n GetByIDEndPoint?: EndPointData;\r\n SaveEndPoint?: EndPointData;\r\n DuplicateEndPoint?: EndPointData;\r\n DeleteEndPoint?: EndPointData;\r\n RepairEndPoint?: EndPointData;\r\n ApplyFilter?:EndPointData;\r\n };\r\n Forms: {\r\n GetByIDEndPoint: EndPointData;\r\n GetByIDAndVersionEndPoint: EndPointData;\r\n SaveEndPoint: EndPointData;\r\n };\r\n\r\n constructor(baseUrl: string = null, userToken: string = null) {\r\n if (baseUrl != null) {\r\n this.Records = {\r\n GetByFormIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/getall\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"test\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n GetAllByEntAndUserIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/GetAllByUserID\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n GetByIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/getByID\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n SaveEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/save\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n Params: [\r\n {\r\n ParamName: \"CompanyID\",\r\n ParamValue: 3,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n {\r\n ParamName: \"sendNotification\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n DuplicateEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/duplicate\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n DeleteEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/delete\",\r\n RequestMethod: RequestMethodEnum.DELETE,\r\n },\r\n ApplyFilter: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/applyfilter\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n Params: [\r\n {\r\n ParamName: \"filter\",\r\n ParamValue:3,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ],\r\n },\r\n };\r\n this.Forms = {\r\n GetByIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/form\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n GetByIDAndVersionEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/getbyidadnversion\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n SaveEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/form\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n },\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport class EndPointData {\r\n Url: string;\r\n Token?: string;\r\n RequestMethod: RequestMethodEnum;\r\n Params?: EndPointDataParams[];\r\n}\r\n\r\nexport class EndPointDataParams {\r\n ParamName: string;\r\n ParamValue: any = null;\r\n ParamType: ParamTypeEnum;\r\n}\r\n\r\nexport enum ParamTypeEnum {\r\n \"Query param\" = 1,\r\n \"In route\" = 2,\r\n \"In Body\" = 3,\r\n}\r\n\r\nexport enum RequestMethodEnum {\r\n GET = \"GET\",\r\n POST = \"POST\",\r\n PUT = \"PUT\",\r\n DELETE = \"DELETE\",\r\n}\r\n","/**\r\n * Classe base che implementa la valorizzazione dell'ID (se null) con una nuova GUID \r\n * in creazione dell'oggetto.\r\n * Per scelta architetturale, visto che non possiamo assumere la persistenza su DB relazionale o su NOSQL, ogni\r\n * oggetto della configurazione viene persistito, e gestito con ID di tipo stringa creato da una GUID.\r\n */\r\nexport class BaseObj {\r\n ID: string;\r\n}","import { BaseObj } from \"./baseObj.model\";\r\nimport { IRootObject } from \"../interfaces/iRootObject.interface\";\r\nimport { BaseField } from \"./baseField.model\";\r\n\r\n/**\r\n * Classe che rappresenta una Form completa.\r\n * Si tratta dell'oggetto che viene rappresentato a video e con cui l'utente interagisce.\r\n */\r\nexport class Form extends BaseObj implements IRootObject {\r\n Code: string;\r\n Name: string;\r\n Description: string;\r\n Version: number;\r\n OrgaID: string;\r\n // FormType: FormTypeEnum;\r\n FormScalarType: FormScalarTypeEnum;\r\n FormFieldsGroups: Array<FormFieldGroup>;\r\n\r\n /**\r\n * Elenco dei campi rappresentati nella form\r\n * possono appartenere ad una sola entità\r\n */\r\n\r\n Fields: Array<BaseField>;\r\n ActionsOnRecord: Array<ActionOnRecord>;\r\n\r\n /**\r\n * Elenco delle form contenute nella form base, ad esempio possono essere le varie form di\r\n * dettaglio\r\n */\r\n\r\n InnerForms: Array<Form>;\r\n CreationDate: Date;\r\n CreationUser: number;\r\n ModifyDate: Date;\r\n ModifyUser: number;\r\n RootEntityID: string;\r\n\r\n // Proprietà client\r\n OldName?: string;\r\n ObjectFields: any[];\r\n}\r\n\r\nexport class FormFieldGroup {\r\n Name: string;\r\n OrdinalPosition?: number;\r\n}\r\n\r\nexport class ActionOnRecord {\r\n Name: string;\r\n Icon: string;\r\n Action: string; //Codice js\r\n OrdinalPosition: number;\r\n}\r\n\r\nexport enum FormTypeEnum {\r\n SCALAR = 1, /* form di tipo scalare */\r\n LIST = 2 /* form di tipo lista che viene rappresentata con molti record */\r\n}\r\n\r\nexport enum FormScalarTypeEnum {\r\n \"Semplice\" = 1, //FLAT\r\n \"A step\" = 2, //STEPPER\r\n \"In tab\" = 3, //GROUPED_BY_TAB\r\n \"In accordion\" = 4 //GROUPED_BY_ACCORDION\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport Swal from 'sweetalert2';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EqpDynamicModuleDialogService {\r\n\r\n constructor() { }\r\n \r\n /**\r\n * Mostra uno sweet alert di tipo SUCCESS con il messaggio passato come parametro.\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Operazione completata')\r\n */\r\n static Success(message: string, title: string = null) {\r\n let currentTitle = title != null ? title : 'Operazione completata con successo.';\r\n Swal.fire(currentTitle, message, 'success');\r\n }\r\n\r\n /**\r\n * Mostra uno sweet alert di tipo ERROR con il messaggio passato come parametro.\r\n * @param message Messaggio d'errore da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Errore')\r\n */\r\n static Error(message: string | string[], title: string = null) {\r\n let currentTitle = title != null ? title : 'Errore';\r\n if (Array.isArray(message)) {\r\n currentTitle = title != null ? title : 'Errore';\r\n let htmlErrors: string = message.join(\"<br>\");\r\n Swal.fire({\r\n title: currentTitle,\r\n html: htmlErrors,\r\n icon: 'error'\r\n });\r\n }\r\n else {\r\n Swal.fire(currentTitle, message, 'error');\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Mostra uno sweetalert di tipo CONFIRM con il messaggio passato come parametro e se viene premuto\r\n * CONFERMA lancia la funzione di callback passata come parametro\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Info')\r\n */\r\n static Confirm(message: string | string[], confirmCallback: any, isWarning: boolean = false, title: string = null, customWidth: string = null) {\r\n\r\n let currentTitle = title != null ? title : 'Sei sicuro di voler procedere?';\r\n if (Array.isArray(message)) {\r\n let htmlErrors: string = message.join(\"<br>\");\r\n Swal.fire({\r\n title: currentTitle,\r\n html: htmlErrors,\r\n width: customWidth ? customWidth : '32rem',\r\n icon: !isWarning ? 'question' : 'warning',\r\n showCancelButton: true,\r\n allowOutsideClick: false,\r\n allowEscapeKey: false\r\n }).then((result) => {\r\n if (result.value && confirmCallback) {\r\n confirmCallback();\r\n }\r\n });\r\n }\r\n else {\r\n Swal.fire({\r\n title: currentTitle,\r\n text: message,\r\n width: customWidth ? customWidth : '32rem',\r\n icon: !isWarning ? 'question' : 'warning',\r\n showCancelButton: true,\r\n allowOutsideClick: false,\r\n allowEscapeKey: false\r\n }).then((result) => {\r\n if (result.value && confirmCallback) {\r\n confirmCallback();\r\n }\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Mostra uno sweetalert di tipo INFO con il messaggio passato come parametro\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Info')\r\n */\r\n static Info(message: string, title: string = null, isToast: boolean = null) {\r\n let currentTitle = title != null ? title : \"Informazione:\";\r\n Swal.fire(currentTitle, message, 'info');\r\n }\r\n\r\n /**\r\n * Mostra uno sweetalert di tipo WARNING con il messaggio passato come parametro\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Attenzione!')\r\n */\r\n static Warning(message: string | string[], title: string = null, isToast: boolean = null) {\r\n let currentTitle = title != null ? title : \"Attenzione!\";\r\n\r\n if (Array.isArray(message)) {\r\n let htmlWarnings: string = message.join(\"<br>\");\r\n Swal.fire({\r\n title: currentTitle,\r\n html: htmlWarnings,\r\n icon: 'warning'\r\n });\r\n } else {\r\n Swal.fire(currentTitle, message, 'warning');\r\n }\r\n }\r\n}\r\n","import { UntypedFormGroup } from '@angular/forms';\r\nimport { BaseObj } from './baseObj.model';\r\n\r\n/**\r\n * Contiene le informazioni di base del campo, indipendentemente dal tipo.\r\n * Questa classe è volutamente astratta perché il tipo di campo è dettato dal tipo\r\n */\r\nexport class BaseField extends BaseObj {\r\n /**\r\n * Nome del campo che per progettazione è una sostituzione della label\r\n * Il vero identificativo del campo è l'ID\r\n */\r\n Name: string;\r\n Label: string;\r\n Description: string;\r\n Required: boolean;\r\n Formula: string;\r\n Tooltip: string;\r\n OrdinalPosition: number;\r\n Disabled: boolean;\r\n Readonly: boolean;\r\n VisibleIf: string;\r\n FieldstyleCSS: string;\r\n LabelstyleCSS: string;\r\n\r\n // rappresentazione grafica di default per gli elementi di risposta\r\n AnswerStyle: AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: \"\", LabelstyleCSS: \"\", ColSpanSizes: [] };\r\n\r\n\r\n /**\r\n * Entità a cui appartiene il campo. Si tenga presente che sono ammessi anche campi\r\n * di sola visualizzazione e calcolati, da utilizzare nelle form, \r\n * e per questo motivo possono essere con Entity == null\r\n */\r\n EntityID: string;\r\n\r\n FieldGroup: string;\r\n ColSpanSizes: Array<ColSpanSizesEnum>;\r\n InListView: boolean;\r\n\r\n // Proprità client\r\n FieldType: FieldTypeEnum;\r\n FieldValue: any;\r\n FormFormGroup: UntypedFormGroup;\r\n}\r\n\r\n\r\nexport class AnswerStyle {\r\n InListView: boolean // visible\r\n VisibleIf: string // formula visible\r\n FieldstyleCSS: string\r\n LabelstyleCSS: string\r\n ColSpanSizes: Array<ColSpanSizesEnum>\r\n};\r\n\r\nexport enum FieldTypeEnum {\r\n 'Campo di testo' = 1,\r\n 'Area di testo' = 2,\r\n 'Booleano' = 3,\r\n 'Data e/o ora' = 4,\r\n 'Campo numerico' = 5,\r\n 'Allegato' = 6,\r\n 'Immagine' = 7,\r\n 'Elenco generico' = 8,\r\n 'Lookup' = 9,\r\n 'Form di dettaglio' = 10\r\n}\r\n\r\nexport enum ColSpanSizesEnum {\r\n 'col-sm-3' = 1,\r\n 'col-sm-4' = 2,\r\n 'col-sm-6' = 3,\r\n 'col-sm-12' = 4,\r\n\r\n 'col-md-3' = 5,\r\n 'col-md-4' = 6,\r\n 'col-md-6' = 7,\r\n 'col-md-12' = 8,\r\n\r\n 'col-lg-3' = 9,\r\n 'col-lg-4' = 10,\r\n 'col-lg-6' = 11,\r\n 'col-lg-12' = 12,\r\n\r\n 'align-self-start' = 13,\r\n 'align-self-center' = 14,\r\n 'align-self-end' = 15,\r\n\r\n 'col-sm-1' = 16,\r\n 'col-sm-2' = 17,\r\n 'col-sm-5' = 18,\r\n 'col-sm-7' = 19,\r\n 'col-sm-8' = 20,\r\n 'col-sm-9' = 21,\r\n 'col-sm-10' = 22,\r\n 'col-sm-11' = 23,\r\n \r\n 'col-md-1' = 24,\r\n 'col-md-2' = 25,\r\n 'col-md-5' = 26,\r\n 'col-md-7' = 27,\r\n 'col-md-8' = 28,\r\n 'col-md-9' = 29,\r\n 'col-md-10' = 30,\r\n 'col-md-11' = 31,\r\n \r\n 'col-lg-1' = 32,\r\n 'col-lg-2' = 33,\r\n 'col-lg-5' = 34,\r\n 'col-lg-7' = 35,\r\n 'col-lg-8' = 36,\r\n 'col-lg-9' = 37,\r\n 'col-lg-10' = 38,\r\n 'col-lg-11' = 39\r\n}\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Campo di testo */\r\nexport class TextField extends BaseField {\r\n TextMask: TextMaskEnum;\r\n MaxLenght: number;\r\n MinLenght: number;\r\n Microphone: boolean;\r\n}\r\n\r\nexport enum TextMaskEnum {\r\n 'Password' = 1,\r\n 'Email' = 2,\r\n 'Telefono' = 3,\r\n 'Url' = 4\r\n}\r\n\r\nexport const UrlRegex = '(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?';\r\nexport const TelRegex = '([+]?[0-9]{10,14})';","import { AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport class ArrayValidators {\r\n public static minLenght(minLenght: number): (AbstractControl) => ValidationErrors | null {\r\n var validationFunction = (control: AbstractControl): ValidationErrors | null => {\r\n return !!control && !!control.value && Array.isArray(control.value) && control.value.length >= minLenght\r\n ? null\r\n : { hasMinLenght: false };\r\n };\r\n return validationFunction;\r\n }\r\n\r\n public static maxLenght(maxLenght: number): (AbstractControl) => ValidationErrors | null {\r\n var validationFunction = (control: AbstractControl): ValidationErrors | null => {\r\n return !!control && !!control.value && Array.isArray(control.value) && control.value.length <= maxLenght\r\n ? null\r\n : { hasMinLenght: false };\r\n };\r\n return validationFunction;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SpinnerService {\r\n isLoading = new Subject<boolean>();\r\n\r\n private requestsCount: number = 0;\r\n\r\n /**\r\n * Mostra lo spinner\r\n */\r\n show() {\r\n setTimeout(() => {\r\n this.isLoading.next(true);\r\n }, 100);\r\n }\r\n\r\n /**\r\n * Nasconde lo spinner\r\n */\r\n hide() {\r\n setTimeout(() => {\r\n this.isLoading.next(false);\r\n }, 100);\r\n }\r\n\r\n addRequestCounter() {\r\n this.requestsCount++;\r\n this.show();\r\n }\r\n\r\n removeRequestCounter() {\r\n this.requestsCount--;\r\n if (this.requestsCount == 0)\r\n this.hide();\r\n }\r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n ValidatorFn,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport {\r\n BaseField,\r\n ColSpanSizesEnum,\r\n FieldTypeEnum,\r\n} from \"../models/baseField.model\";\r\nimport { Context } from \"../models/context.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointData,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n RequestMethodEnum,\r\n} from \"../models/endPointConfiguration.model\";\r\nimport { AttachmentField } from \"../models/fields/attachmentField.model\";\r\nimport { ImageField } from \"../models/fields/imageField.model\";\r\nimport { ListValueField } from \"../models/fields/listValueField.model\";\r\nimport { TextareaField } from \"../models/fields/textareaField.model\";\r\nimport {\r\n TextMaskEnum,\r\n TextField,\r\n UrlRegex,\r\n TelRegex,\r\n} from \"../models/fields/textField.model\";\r\nimport { Form } from \"../models/form.model\";\r\nimport { Record } from \"../models/record.model\";\r\nimport { ArrayValidators } from \"./custom-form-validators.service\";\r\nimport { EqpDynamicModuleDialogService } from \"./eqp-dynamic-module-dialog.service\";\r\nimport { SpinnerService } from \"./spinner.service\";\r\nimport { GlobalService } from \"./global.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class UtilityHelperService {\r\n public static context: Context = new Context();\r\n\r\n debugMode: boolean = false;\r\n debugLog(message: string, item?: any){\r\n if(this.debugMode){\r\n if(item){\r\n console.log(message, item)\r\n }else{\r\n console.log(message)\r\n }\r\n }\r\n }\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private http: HttpClient,\r\n private spinnerService: SpinnerService\r\n ) {}\r\n\r\n public static EvaluateFieldFormula(\r\n formula: string,\r\n rec: Record,\r\n ctx: any\r\n ): any {\r\n const evaluatedValue = eval(formula);\r\n return evaluatedValue ? evaluatedValue : null;\r\n }\r\n\r\n public static SetContext(ctx: Context) {\r\n this.context = ctx;\r\n }\r\n public static isNumeric(n) {\r\n return !isNaN(n);\r\n }\r\n\r\n public static initStyles(stylecss) {\r\n return stylecss.split(\";\").reduce((a, b) => {\r\n const keypar = b.split(\":\");\r\n if (keypar.length > 1) a[keypar[0].trim()] = keypar[1].trim();\r\n return a;\r\n }, {});\r\n }\r\n\r\n public static GetFieldType(field: BaseField) {\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Campo di testo\"]: {\r\n const t: TextField = Object.assign(new TextField(), field);\r\n return t;\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per impostare i valori da suggerire nell'autocomplete per i campi in cui l'utente deve scrivere comandi javascript.\r\n * In base all'ultimo carattere digitato viene impostato un elenco di oggetti o proprietà che l'utente ha a disposizione in quel momento.\r\n * @param fields Array di BaseField aggiunti alla Form\r\n * @param typedFormula Stringa digitata dall'utente\r\n * @summary Il metodo imposta i suggerimenti basandosi su 3 casi:\r\n * 1) l'utente non ha digitato nulla o la stringa digitata dall'utente finisce con uno spazio vuoto\r\n * 2) la stringa digitata dall'utente finisce con un \".\"\r\n * 3) la stringa digitata dall'utente non coincide con nessun altro caso sopra (finisce con un carattere qualunque)\r\n */\r\n public static GetAutocompleteOptions(\r\n fields: Array<BaseField>,\r\n typedFormula: string\r\n ): Array<{ label: string; value: string }> {\r\n let autocompleteOptions: Array<{ label: string; value: string }> = [];\r\n\r\n // Recupero i nomi di tutti i campi creati fino ad ora nella form.\r\n const availableRecProperties: Array<string> = fields.map((f) =>\r\n f.Label.split(\" \").join(\"_\")\r\n );\r\n\r\n // Nel casi in cui l'utente non ha inserito nulla oppure la stringa finisce con uno spazio vuoto o un simbolo diverso da \".\"\r\n // (un carattere non alfanumerico) imposto come suggerimenti solo \"rec\" e \"ctx\", ovvero gli unici due oggetti a cui l'utente ha accesso.\r\n if (\r\n !typedFormula ||\r\n (!typedFormula.endsWith(\".\") &&\r\n new RegExp(\"[^0-9a-zA-Z_]\").test(\r\n typedFormula.substring(typedFormula.length - 1, typedFormula.length)\r\n ))\r\n ) {\r\n autocompleteOptions = [\r\n { label: \"rec\", value: (typedFormula ? typedFormula : \"\") + \"rec\" },\r\n { label: \"ctx\", value: (typedFormula ? typedFormula : \"\") + \"ctx\" },\r\n ];\r\n }\r\n // Se la stringa finisce con un \".\" vuol dire che l'utente sta cercando di accedere ad una proprietà di un oggetto\r\n // a sua disposizione. Recupero il nome dell'ultimo oggetto digitato dall'utente e se l'oggetto scelto è \"rec\" o \"ctx\"\r\n // allora suggerisco le proprietà che esistono all'interno di questi oggetti altrimenti non mostro nulla.\r\n else if (typedFormula.endsWith(\".\")) {\r\n const formulaPieces: Array<string> = typedFormula\r\n .split(\" \")\r\n [typedFormula.split(\" \").length - 1].split(\".\");\r\n if (formulaPieces[formulaPieces.length - 2] === \"rec\") {\r\n autocompleteOptions = availableRecProperties.map((f) => {\r\n return { label: f, value: typedFormula + f };\r\n });\r\n } else if (formulaPieces[formulaPieces.length - 2] === \"ctx\") {\r\n autocompleteOptions = Object.keys(UtilityHelperService.context).map(\r\n (f) => {\r\n return { label: f, value: typedFormula + f };\r\n }\r\n );\r\n } else if (\r\n formulaPieces.length > 2 &&\r\n formulaPieces[formulaPieces.length - 3] === \"ctx\" &&\r\n formulaPieces[formulaPieces.length - 2] === \"User\"\r\n ) {\r\n autocompleteOptions = Object.keys(\r\n UtilityHelperService.context.User\r\n ).map((f) => {\r\n return { label: f, value: typedFormula + f };\r\n });\r\n } else {\r\n autocompleteOptions = [];\r\n }\r\n }\r\n // In tutti gli altri casi, ovvero quando la stringa digitata finisce con un carattere diverso da quelli\r\n // controllati finora, vuol dire che l'utente sta digitanto il nome di un oggetto, una proprietà o una\r\n // funzione javascript. Controllo la parola che l'utente sta digitando e se fa parte di uno degli oggetti a disposizione\r\n // o una proprietà di essi allora suggerisco i possibili match.\r\n else {\r\n const availableOptions: Array<{ label: string; value: string }> = [];\r\n\r\n // Prendo tutti i blocchi di caratteri digitati dall'utente\r\n const allFormulaWords: Array<string> = typedFormula.split(\" \");\r\n // Prendo l'ultimo blocco di caratteri digitato dall'utente\r\n const lastTypedString: string =\r\n allFormulaWords[allFormulaWords.length - 1];\r\n\r\n // Se la l'ultima stringa digitata non contiene caratteri speciali allora splitto la stringa\r\n // sui \".\" e imposto i suggerimenti in base al path della prorpietà che si sta digitando.\r\n if (!new RegExp(\"[^0-9a-zA-Z_.]\").test(lastTypedString)) {\r\n const propertyPath = lastTypedString.split(\".\");\r\n const lastTypedWork = propertyPath[propertyPath.length - 1];\r\n\r\n let propertiesToCheck: Array<string> = [];\r\n\r\n if (propertyPath.length == 1) {\r\n propertiesToCheck = [\"rec\", \"ctx\"];\r\n } else if (\r\n propertyPath.length > 1 &&\r\n propertyPath[propertyPath.length - 2] === \"ctx\"\r\n ) {\r\n propertiesToCheck = Object.keys(UtilityHelperService.context);\r\n } else if (\r\n propertyPath.length > 2 &&\r\n propertyPath[propertyPath.length - 3] === \"ctx\" &&\r\n propertyPath[propertyPath.length - 2] === \"User\"\r\n ) {\r\n propertiesToCheck = Object.keys(UtilityHelperService.context.User);\r\n } else if (\r\n propertyPath.length > 1 &&\r\n propertyPath[propertyPath.length - 2] === \"rec\"\r\n ) {\r\n propertiesToCheck = availableRecProperties;\r\n }\r\n\r\n // Eseguo il controllo sulle proprietà recuperate, aggiungo ai suggerimenti tutti i nomi che iniziano con\r\n // quello che sta digitando l'utente.\r\n propertiesToCheck.forEach((prop) => {\r\n if (prop.startsWith(lastTypedWork)) {\r\n availableOptions.push({\r\n label: prop,\r\n value:\r\n typedFormula +\r\n prop.substring(lastTypedWork.length, prop.length),\r\n });\r\n }\r\n });\r\n }\r\n\r\n autocompleteOptions = availableOptions;\r\n }\r\n\r\n return autocompleteOptions;\r\n }\r\n\r\n /**\r\n * Metodo invocato dall'html per impostare le classi css per visualizzare il campo all'interno della form.\r\n * Se per il field sono state specificate delle classi allora vengono applcate quelle, altrimenti vengono usate\r\n * delle classi di default.\r\n * @param field BaseField da visualizzare.\r\n * @returns Restituisce una stringa contenente le classi css da applicare.\r\n */\r\n getFieldSyleClass(field: BaseField): string {\r\n \r\n if (field.ColSpanSizes && field.ColSpanSizes.length > 0){\r\n ////GlobalService.debugLog('field', field)\r\n\r\n return field.ColSpanSizes.map((size) =>\r\n ColSpanSizesEnum[size].toString()\r\n ).join(\" \");\r\n }\r\n\r\n return this.getDefaultStyleClass(field);\r\n }\r\n\r\n /**\r\n * Metodo invocato dall'html per impostare le classi css per visualizzare il campo all'interno della form.\r\n * Se per il field sono state specificate delle classi allora vengono applcate quelle, altrimenti vengono usate\r\n * delle classi di default.\r\n * @param field BaseField da visualizzare.\r\n * @returns Restituisce una stringa contenente le classi css da applicare.\r\n */\r\n getFieldAnswerStyleClass(field: BaseField): string {\r\n \r\n if (field.AnswerStyle && field.AnswerStyle.ColSpanSizes && field.AnswerStyle.ColSpanSizes.length > 0){\r\n ////GlobalService.debugLog('field', field)\r\n\r\n return field.AnswerStyle.ColSpanSizes.map((size) =>\r\n ColSpanSizesEnum[size].toString()\r\n ).join(\" \");\r\n }\r\n\r\n return this.getDefaultStyleClass(field);\r\n }\r\n\r\n private getDefaultStyleClass(field: BaseField): string{\r\n \r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Campo di testo\"]:\r\n //GlobalService.debugLog('Campo di testo')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Area di testo\"]:\r\n //GlobalService.debugLog('Area di testo')\r\n return \"col-sm-12 col-md-12 col-lg-12 align-self-end\";\r\n case FieldTypeEnum[\"Booleano\"]:\r\n //GlobalService.debugLog('Booleano')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-center\";\r\n case FieldTypeEnum[\"Data e/o ora\"]:\r\n //GlobalService.debugLog('Data e/o ora')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Campo numerico\"]:\r\n //GlobalService.debugLog('Campo numerico')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Allegato\"]:\r\n //GlobalService.debugLog('Allegato')\r\n if (\r\n (field as AttachmentField).IsMultiAttach ||\r\n ((field as AttachmentField).MetadataFields &&\r\n (field as AttachmentField).MetadataFields.length > 0)\r\n ) {\r\n return \"col-sm-12 col-md-12 col-lg-12 align-self-end\";\r\n } else {\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n }\r\n case FieldTypeEnum[\"Immagine\"]:\r\n //GlobalService.debugLog('Immagine')\r\n if (\r\n (field as ImageField).AttachDefinition.IsMultiAttach ||\r\n ((field as ImageField).AttachDefinition.MetadataFields &&\r\n (field as ImageField).AttachDefinition.MetadataFields.length > 0)\r\n ) {\r\n return \"col-sm-12 col-md-12 col-lg-12 align-self-end\";\r\n } else {\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n }\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n //GlobalService.debugLog('Elenco generico')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Lookup\"]:\r\n //GlobalService.debugLog('Lookup')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Form di dettaglio\"]:\r\n //GlobalService.debugLog('Form di dettaglio')\r\n return \"col-sm-12 col-md-12 col-lg-12 align-self-end\";\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta una Form a partire dai suoi BaseField.\r\n * @param formFields Lista dei BaseField che compongono la form.\r\n * @param record Oggetto di tipo Record che contiene i valori dei campi.\r\n * @param onlyView Se TRUE disabilita la form per renderla in sola lettura.\r\n * @param includeCurrentFormInField Se TRUE popola la proprietà FormFormGroup all'interno di ogni BaseField con il FormGroup corrente.\r\n * @returns Restituisce un FormGroup rappresentate la Form a cui appartengono i BaseField ricevuti in input.\r\n */\r\n public CreateFormFormGroup(\r\n formFields: Array<BaseField>,\r\n record: Record,\r\n onlyView = false,\r\n includeCurrentFormInField = true\r\n ): UntypedFormGroup {\r\n // //GlobalService.debugLog(\"formFields\", formFields);\r\n // //GlobalService.debugLog(\"record\", record);\r\n // //GlobalService.debugLog(\"onlyView\", onlyView);\r\n // //GlobalService.debugLog(\"includeCurrentFormInField\", includeCurrentFormInField);\r\n\r\n const formForm: UntypedFormGroup = this.formBuilder.group([]);\r\n\r\n formFields.forEach((field) => {\r\n // //GlobalService.debugLog(field);\r\n formForm.addControl(\r\n field.Name,\r\n this.createFieldFormControl(field, record)\r\n );\r\n if (includeCurrentFormInField) {\r\n // //GlobalService.debugLog(field);\r\n \r\n field.FormFormGroup = formForm;\r\n }\r\n });\r\n if (onlyView) {\r\n formForm.disable();\r\n }\r\n\r\n return formForm;\r\n }\r\n\r\n /**\r\n * Funzione per creare e aggiungere al FormGroup rappresentante la form un nuovo FormControl a partire da un Field.\r\n * In nuovo FormControl avrà il nome del campo passato e verranno impostati i Validators in base al tipo del campo stesso.\r\n * @param field BaseField per cui creare il FormControl da inserire nel FormGroup dela form.\r\n */\r\n private createFieldFormControl(\r\n field: BaseField,\r\n record: Record\r\n ): AbstractControl {\r\n const validators: Array<ValidatorFn> = [];\r\n\r\n if (field.Required) validators.push(Validators.required);\r\n\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Campo di testo\"]:\r\n if ((field as TextField).MaxLenght) {\r\n validators.push(Validators.maxLength((field as TextField).MaxLenght));\r\n }\r\n if ((field as TextField).MinLenght) {\r\n validators.push(Validators.minLength((field as TextField).MinLenght));\r\n }\r\n switch ((field as TextField).TextMask) {\r\n case TextMaskEnum.Url:\r\n validators.push(Validators.pattern(UrlRegex));\r\n break;\r\n case TextMaskEnum.Email:\r\n validators.push(Validators.email);\r\n break;\r\n case TextMaskEnum.Telefono:\r\n validators.push(Validators.pattern(TelRegex));\r\n break;\r\n }\r\n break;\r\n case FieldTypeEnum[\"Area di testo\"]:\r\n if ((field as TextareaField).MaxLenght) {\r\n validators.push(\r\n Validators.maxLength((field as TextareaField).MaxLenght)\r\n );\r\n }\r\n if ((field as TextareaField).MinLenght) {\r\n validators.push(\r\n Validators.minLength((field as TextareaField).MinLenght)\r\n );\r\n }\r\n break;\r\n case FieldTypeEnum.Allegato:\r\n case FieldTypeEnum.Immagine:\r\n if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n break;\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if ((field as ListValueField).IsMultiChoiche)\r\n if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n break;\r\n }\r\n\r\n return new UntypedFormControl(record[field.Name], validators);\r\n }\r\n\r\n /**\r\n * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n * a cui si deve connettere e al token da passare per autenticarsi.\r\n * @param baseServerUrl Stringa dell'url base del server (es: \"http://localhost:5000\").\r\n * @param userToken Token dell'utente loggato da usare per autenticarsi se necessario.\r\n * @returns Resituisce la configurazione completa degli endPoint da usare di default.\r\n */\r\n public ConfigureDefaultEndPoints(\r\n baseServerUrl: string,\r\n userToken: string\r\n ): EndPointConfiguration {\r\n let endPointConfiguration: EndPointConfiguration =\r\n new EndPointConfiguration(baseServerUrl, userToken);\r\n\r\n // endPointConfiguration.Records = {\r\n // GetByFormIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/getall\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // GetAllByEntAndUserIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/GetAllByUserID\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // GetByIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/getByID\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // SaveEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/save\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.POST,\r\n // },\r\n // DuplicateEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/duplicate\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // DeleteEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/delete\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.DELETE,\r\n // },\r\n // };\r\n // endPointConfiguration.Forms = {\r\n // GetByIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/conf/form\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // GetByIDAndVersionEndPoint: {\r\n // Url: baseServerUrl + \"/api/conf/GetByIDAndVersion\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // SaveEndPoint: {\r\n // Url: baseServerUrl + \"/api/conf/form\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.POST,\r\n // },\r\n // };\r\n return endPointConfiguration;\r\n }\r\n /**\r\n *\r\n * @param expression prende una stringa in input e verifica che ogni parentesi aperta venga anche chiusa\r\n * @returns true se le parentesi sono pari e ogni parentesi chiude se stessa, false se mancano parentesi o non vengono chiuse\r\n */\r\n public static stringCheckParentesis(expression, required = false) {\r\n if (expression == undefined || expression == null) {\r\n return required ? false : true;\r\n }\r\n let stack = [];\r\n let current;\r\n const matchLookup = {\r\n \"(\": \")\",\r\n \"[\": \"]\",\r\n \"{\": \"}\",\r\n };\r\n\r\n for (let i = 0; i < expression.length; i++) {\r\n current = expression[i]; //easier than writing it over and over\r\n\r\n if (current === \"(\" || current === \"[\" || current === \"{\") {\r\n stack.push(current);\r\n } else if (current === \")\" || current === \"]\" || current === \"}\") {\r\n const lastBracket = stack.pop();\r\n\r\n if (matchLookup[lastBracket] !== current) {\r\n //if the stack is empty, .pop() returns undefined, so this expression is still correct\r\n\r\n return false; //terminate immediately - no need to continue scanning the string\r\n }\r\n }\r\n }\r\n\r\n return stack.length === 0; //any elements mean brackets left open\r\n }\r\n\r\n /**\r\n * Metodo che data la configurazione di un endpoint costruisce l'url da chiamare, gli eventuali parametri\r\n * da passare (nel body o nella rotta) ed effettua la chiamata. Al termine della chiamata esegue le eventuali\r\n * funzioni di callback (sia in caso di successo che in caso di errore) passate in input.\r\n * @param endPointData Cofigurazione dell'endpoint da chiamare.\r\n * @param dynamicModuleParams Array dei parametri aggiunti dal modulo dinamico a quelli già configurati\r\n * (ad esempio il record o la form da salvare oppure l'ID per recuperare una particolare entità).\r\n * @param callback Metodo da eseguire in caso di successo dopo la chiamata http.\r\n * NOTA: in input viene passata la risposta della chiamata stessa.\r\n * @param errorCallBack Metodo da eseguire in caso di errore dopo la chiamata http.\r\n * NOTA: in input viene passato l'errore generato della chiamata stessa.\r\n */\r\n public RunEndPointCall(\r\n endPointData: EndPointData,\r\n dynamicModuleParams: Array<EndPointDataParams> = null,\r\n callback: (e: Form | Record | Array<Record>) => void = null,\r\n errorCallBack: (err: unknown) => void = null\r\n ): void {\r\n this.spinnerService.addRequestCounter();\r\n\r\n let url = `${endPointData.Url}`;\r\n let queryParams: string = null;\r\n const bodyParams = {\r\n AdditionalParams: {},\r\n };\r\n\r\n //#region mergeParam\r\n // unisco i dati di default definiti nella configurazione della chiamata con i dati che imposto nella chiamata specifica\r\n if (endPointData.Params == undefined || endPointData.Params == null) {\r\n endPointData.Params = [];\r\n }\r\n if (dynamicModuleParams == undefined || dynamicModuleParams == null) {\r\n dynamicModuleParams = [];\r\n }\r\n\r\n const mergedParams: Array<EndPointDataParams> = [...endPointData.Params];\r\n\r\n dynamicModuleParams.forEach((obj) => {\r\n const existingIndex = mergedParams.findIndex(\r\n (item) => item.ParamName === obj.ParamName\r\n );\r\n\r\n if (existingIndex !== -1) {\r\n mergedParams[existingIndex].ParamValue = obj.ParamValue;\r\n mergedParams[existingIndex].ParamType = obj.ParamType;\r\n } else {\r\n mergedParams.push(obj);\r\n }\r\n });\r\n\r\n if (mergedParams) {\r\n mergedParams.forEach((param) => {\r\n switch (param.ParamType) {\r\n case ParamTypeEnum[\"Query param\"]: {\r\n const stringParam: string =\r\n param.ParamName + \"=\" + param.ParamValue;\r\n queryParams =\r\n (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n break;\r\n }\r\n case ParamTypeEnum[\"In route\"]: {\r\n url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n break;\r\n }\r\n case ParamTypeEnum[\"In Body\"]: {\r\n bodyParams[param.ParamName] = param.ParamValue;\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n //#endregion mergeParam\r\n\r\n //#region addDefaultParams\r\n // Se nella configurazione sono stati definiti parametri da aggiungere alla chiamata questi vengono ciclati\r\n // e aggiunti nel punto in cui devono essere usati.\r\n // if (endPointData.Params) {\r\n // endPointData.Params.forEach(param => {\r\n // switch (param.ParamType) {\r\n // case ParamTypeEnum['Query param']: {\r\n // const stringParam: string = param.ParamName + \"=\" + param.ParamValue;\r\n // queryParams = (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In route']: {\r\n // url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In Body']: {\r\n // bodyParams.AdditionalParams[param.ParamName] = param.ParamValue;\r\n // break;\r\n // }\r\n // }\r\n // });\r\n // }\r\n //#endregion addDefaultParams\r\n\r\n //#region addSpecificParams\r\n // Se sono stati passati parametri da aggiungere alla chiamata definiti all'interno del modulo dinamico\r\n // vengono ciclati e aggiunti nel punto in cui devono essere usati dopo quelli definiti nella configurazione.\r\n // if (dynamicModuleParams) {\r\n // dynamicModuleParams.forEach(param => {\r\n // switch (param.ParamType) {\r\n // case ParamTypeEnum['Query param']: {\r\n // const stringParam: string = param.ParamName + \"=\" + param.ParamValue;\r\n // queryParams = (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In route']: {\r\n // url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In Body']: {\r\n // bodyParams[param.ParamName] = param.ParamValue;\r\n // break;\r\n // }\r\n // }\r\n // })\r\n // }\r\n //#endregion addSpecificParams\r\n\r\n if (queryParams != null) {\r\n url =\r\n (url.endsWith(\"/\") ? url.substring(0, url.length - 1) : url) +\r\n \"?\" +\r\n queryParams;\r\n }\r\n\r\n this.http\r\n .request(endPointData.RequestMethod, url, {\r\n headers: endPointData.Token\r\n ? { Authorization: endPointData.Token }\r\n : null,\r\n body: ![RequestMethodEnum.DELETE, RequestMethodEnum.GET].includes(\r\n endPointData.RequestMethod\r\n )\r\n ? bodyParams\r\n : null,\r\n })\r\n .subscribe(\r\n (res: Form | Record | Array<Record>) => {\r\n this.spinnerService.removeRequestCounter();\r\n if (callback) {\r\n callback(res);\r\n }\r\n },\r\n (error) => {\r\n this.spinnerService.removeRequestCounter();\r\n if (errorCallBack) {\r\n errorCallBack(error);\r\n }\r\n EqpDynamicModuleDialogService.Error(error.message);\r\n throw new Error(error.message);\r\n //GlobalService.debugLog(\"RunEndPointCall - subscribe - end\");\r\n }\r\n );\r\n\r\n }\r\n}\r\n","export enum DynamicModuleFilterResultViewModeEnum {\r\n EXTERNAL_ONLY = 0,\r\n INTERNAL_LISTVIEW = 1,\r\n INTERNAL_EQPTABLE = 2\r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GlobalService {\r\n\r\n public static debugMode = false;\r\n\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n static debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element);\r\n }\r\n }\r\n\r\n}\r\n","export class Record {\r\n ID: string;\r\n EntID: string;\r\n Version: number;\r\n userID: string;\r\n AnswerDate: string;\r\n HTMLreadableValues: string;\r\n AdditionalParams: any;\r\n [key: string]: any;\r\n}\r\n\r\nexport class DynRecord {\r\n ID: string;\r\n EntID: string;\r\n Version: number;\r\n userID: string;\r\n Values: { [key: string]: any; } = {};\r\n SerializedValues: string;\r\n HTMLreadableValues: string;\r\n AnswerDate: string;\r\n AdditionalParams: string;\r\n PrefilterParams: string;\r\n}\r\n\r\nexport class RecordButton {\r\n\tpublic icon: string;\r\n\tpublic text: string;\r\n\tpublic visible: boolean;\r\n\tpublic fn: Function;\r\n\tpublic extraClass: string; \r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Rappresenta la configurazione di un campo Data o Data e ora, o solo ora */\r\nexport class DateField extends BaseField {\r\n IsOnlyDate: DateTimeTypeEnum;\r\n MinDate: Date;\r\n MaxDate: Date;\r\n DateFormat: string;\r\n}\r\n\r\nexport enum DateTimeTypeEnum {\r\n \"Solo data\" = 1,\r\n \"Solo orario\" = 2,\r\n \"Data e ora\" = 3\r\n}","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n SimpleChanges,\r\n ɵɵNgOnChangesFeature,\r\n ChangeDetectorRef,\r\n} from \"@angular/core\";\r\nimport { IAttachmentDTO } from \"@eqproject/eqp-attachments\";\r\nimport {\r\n CellAlignmentEnum,\r\n ConfigColumn,\r\n EqpTableComponent,\r\n NumberColumnPipe,\r\n TypeColumn,\r\n} from \"@eqproject/eqp-table\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { BaseField, FieldTypeEnum } from \"../../../../models/baseField.model\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../../models/record.model\";\r\nimport { AttachmentField } from \"../../../../models/fields/attachmentField.model\";\r\nimport {\r\n DateField,\r\n DateTimeTypeEnum,\r\n} from \"../../../../models/fields/dateField.model\";\r\nimport { ImageField } from \"../../../../models/fields/imageField.model\";\r\nimport { ListValueField } from \"../../../../models/fields/listValueField.model\";\r\nimport { NumericField } from \"../../../../models/fields/numericField.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynamicModuleListConfig } from \"../../../../models/dynamicModuleListConfig.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"../../../../models/endPointConfiguration.model\";\r\nimport { EqpDynamicModuleDialogService } from \"./../../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\n\r\n\r\n@Component({\r\n selector: \"list-form-record\",\r\n templateUrl: \"list-form-record.component.html\",\r\n styleUrls: [\"./list-form-record.component.scss\"],\r\n})\r\nexport class ListFormRecordComponent implements OnInit, OnChanges {\r\n\r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element)\r\n }\r\n }\r\n\r\n @Input() configurations: DynamicModuleListConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n // l'una o l'altra per due modalità d'uso\r\n @Input() formID: string;\r\n @Input() form: Form = null; // boh ma c'era prima\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault =\r\n new DynamicModuleListFormRecordActionsDefault();\r\n showTitle = true;\r\n // values: Array<Record>;\r\n @ViewChild(\"tableRecords\", { static: true }) tableRecords: EqpTableComponent;\r\n\r\n columns = new Array<ConfigColumn>();\r\n loader: boolean = false;\r\n\r\n @Output() onViewRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() onAddViewEditRecord: EventEmitter<{record: Record;onlyView: boolean;}> = new EventEmitter<{ record: Record; onlyView: boolean }>();\r\n \r\n @Output() onDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() onAfterDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService,\r\n private changeDetector: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit(): void { \r\n this.defaultListActions = this.configurations.defaultListActions;\r\n this.showTitle = this.configurations.showTitle;\r\n // this.values = this.configurations.values\r\n GlobalService.debugLog('list-form-record - ngOnInit - configurations', this.configurations);\r\n\r\n this.getFormByID();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n GlobalService.debugLog('list-form-record - changes', changes);\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n // if (changes['configurations'] != undefined && changes['configurations'].firstChange == false) {\r\n // this.configurations.values = changes['configurations'].currentValue;\r\n // this.reloadTables();\r\n // }\r\n }\r\n\r\n async getFormByID(id: string = this.formID) {\r\n GlobalService.debugLog('list-form-record - getFormByID', this.form);\r\n\r\n if (this.form == null) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.configureColumns();\r\n },\r\n (err) => {}\r\n );\r\n } else {\r\n this.configureColumns();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n * a partire dai quali vengono ricreati i Record usati nel client.\r\n */\r\n async getRecordsByFormID() {\r\n try{\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n ) {\r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n if(this.configurations.userID == null){ \r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.configurations.values = new Array<Record>();\r\n res.forEach((r) => {\r\n var tmpRec: Record = new Record();\r\n tmpRec = JSON.parse(r.SerializedValues);\r\n tmpRec.ID = r.ID;\r\n tmpRec.EntID = r.EntID;\r\n tmpRec.Version = r.Version;\r\n tmpRec.userID = r.userID;\r\n tmpRec.AnswerDate = r.AnswerDate;\r\n this.configurations.values.push(tmpRec);\r\n });\r\n \r\n this.loader = true;\r\n setTimeout((_) => {\r\n this.changeDetector.detectChanges();\r\n }, 0); // refresh ui\r\n }\r\n );\r\n } else { \r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: this.configurations.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n }\r\n ];\r\n \r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.configurations.values = new Array<Record>();\r\n res.forEach((r) => {\r\n var tmpRec: Record = new Record();\r\n tmpRec = JSON.parse(r.SerializedValues);\r\n tmpRec.ID = r.ID;\r\n tmpRec.EntID = r.EntID;\r\n tmpRec.Version = r.Version;\r\n tmpRec.userID = r.userID;\r\n tmpRec.AnswerDate = r.AnswerDate;\r\n this.configurations.values.push(tmpRec);\r\n });\r\n \r\n this.loader = true;\r\n setTimeout((_) => {\r\n this.changeDetector.detectChanges();\r\n }, 0); // refresh ui\r\n }\r\n );\r\n \r\n }\r\n }\r\n } catch(e){\r\n console.error('exception', e)\r\n }\r\n }\r\n\r\n \r\n /**\r\n * Metodo per configurare le colonne della eqp-table.\r\n */\r\n private configureColumns() {\r\n this.columns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 6%\" },\r\n actions: [],\r\n },\r\n ];\r\n\r\n if (this.defaultListActions.view == true) {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Visualizza\",\r\n icon: \"info\",\r\n fn: (element, index, col) => this.viewRecord(element),\r\n });\r\n }\r\n if (this.defaultListActions.edit == true) {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.viewOrEditRecord(element, false),\r\n });\r\n }\r\n if (this.defaultListActions.duplicate == true) {\r\n /*this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Duplica\",\r\n icon: \"file_copy\",\r\n fn: (element, index, col) => this.duplicateRecord(element),\r\n });*/\r\n }\r\n if (this.defaultListActions.delete == true) {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) => this.deleteRecord(element),\r\n });\r\n }\r\n\r\n this.externalButtons.forEach((button) => {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: button.text,\r\n icon: button.icon,\r\n fn: (element, index, col) => button.fn(),\r\n });\r\n });\r\n\r\n this.createAdditionalActions();\r\n this.createColumnsFromFormFields();\r\n this.getRecordsByFormID();\r\n }\r\n\r\n /**\r\n * Metodo per aggiungere nella colonna \"action\" della eqp-table le azioni sui record\r\n * definite dall'utente all'interno della Form.\r\n */\r\n private createAdditionalActions() {\r\n GlobalService.debugLog('list-form-record - createAdditionalActions', this.form);\r\n\r\n if (this.form.ActionsOnRecord && this.form.ActionsOnRecord.length > 0) {\r\n this.form.ActionsOnRecord.sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition\r\n ? 1\r\n : b.OrdinalPosition > a.OrdinalPosition\r\n ? -1\r\n : 0\r\n ).forEach((action) => {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: action.Name,\r\n icon: action.Icon,\r\n fn: (element, index, col) => {\r\n const rec = element;\r\n const ctx = UtilityHelperService.context;\r\n eval(action.Action);\r\n // TODO: salvare le modifiche\r\n },\r\n });\r\n });\r\n }\r\n }\r\n\r\n \r\n /**\r\n * Metodo per creare la configurazione delle colonne per la eqp-table.\r\n * Individua i BaseField da mostrare e li usa per creare le ConfigColumn.\r\n * Le colonne vengono create per i BaseField con il flag InListView a TRUE\r\n * oppure, nel caso non siano stati specificati i campi da visualizzare,\r\n * seleziona i primi 6.\r\n */\r\n private createColumnsFromFormFields() {\r\n GlobalService.debugLog('list-form-record - createColumnsFromFormFields', this.form);\r\n\r\n var fieldsForColumns: Array<BaseField>;\r\n if (this.form.Fields.find((f) => f.InListView)) {\r\n fieldsForColumns = this.form.Fields.filter((f) => f.InListView);\r\n } else {\r\n fieldsForColumns = this.form.Fields.filter((f) => f.OrdinalPosition < 6);\r\n }\r\n fieldsForColumns\r\n .sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition\r\n ? 1\r\n : b.OrdinalPosition > a.OrdinalPosition\r\n ? -1\r\n : 0\r\n )\r\n .forEach((field) => {\r\n this.columns.push(this.createFieldColumn(field));\r\n });\r\n }\r\n\r\n /**\r\n * Metodo per creare l'oggetto ConfigureColumn che rappresenta il BaseField passato in input.\r\n * @param field BaseField per cui creare la colonna nella eqp-table\r\n * @returns Restituisce una ConfigColumn per la eqp-table\r\n */\r\n private createFieldColumn(field: BaseField): ConfigColumn {\r\n var column: ConfigColumn = { key: field.Name, display: field.Label };\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Booleano\"]:\r\n column.type = TypeColumn.Boolean;\r\n column.booleanValues = {\r\n false: '<i class=\"fa fa-times error-color\"></i>',\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n };\r\n column.styles = {\r\n flex: \"0 0 7%\",\r\n cellAlignment: CellAlignmentEnum.CENTER,\r\n };\r\n break;\r\n case FieldTypeEnum[\"Data e/o ora\"]:\r\n if (\r\n (field as DateField).IsOnlyDate != DateTimeTypeEnum[\"Solo orario\"]\r\n ) {\r\n column.type = TypeColumn.Date;\r\n if (\r\n (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Data e ora\"]\r\n ) {\r\n column.format = \"dd/MM/yyyy HH:mm\";\r\n } else if (\r\n (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Solo data\"]\r\n ) {\r\n column.format = (field as DateField).DateFormat\r\n ? (field as DateField).DateFormat.replace(\"DD\", \"dd\")\r\n : \"dd/MM/yyyy\";\r\n }\r\n }\r\n break;\r\n case FieldTypeEnum[\"Campo numerico\"]:\r\n if ((field as NumericField).CurrencySymbol) {\r\n column.numberPipe = NumberColumnPipe.CURRENCY;\r\n column.currencyPipeCode = (field as NumericField).CurrencySymbol;\r\n } else if (!(field as NumericField).IsInteger) {\r\n column.numberPipe = NumberColumnPipe.DECIMAL;\r\n }\r\n break;\r\n case FieldTypeEnum[\"Allegato\"]:\r\n case FieldTypeEnum[\"Immagine\"]:\r\n column.value = (element: Record) => {\r\n if (\r\n (field as AttachmentField).IsMultiAttach ||\r\n ((field as ImageField).AttachDefinition &&\r\n (field as ImageField).AttachDefinition.IsMultiAttach)\r\n ) {\r\n return element[field.Name] != null && element[field.Name].length > 0\r\n ? (element[field.Name] as Array<IAttachmentDTO>)\r\n .map((a) => a.FileName)\r\n .join(\", \")\r\n : null;\r\n } else {\r\n return element[field.Name] != null && element[field.Name].length > 0\r\n ? (element[field.Name] as Array<IAttachmentDTO>)[0].FileName\r\n : null;\r\n }\r\n };\r\n column.isSortable = false;\r\n column.isSearchable = false;\r\n break;\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n column.value = (element: Record) => {\r\n if ((field as ListValueField).IsMultiChoiche) {\r\n if (!element[field.Name] || element[field.Name].length == 0) {\r\n return null;\r\n } else {\r\n return Object.keys((field as ListValueField).ValuePairs)\r\n .filter((k) =>\r\n element[field.Name].includes(\r\n (field as ListValueField).ValuePairs[k]\r\n )\r\n )\r\n .join(\", \");\r\n }\r\n } else {\r\n return Object.keys((field as ListValueField).ValuePairs).find(\r\n (k) =>\r\n (field as ListValueField).ValuePairs[k] == element[field.Name]\r\n );\r\n }\r\n };\r\n column.isSortable = false;\r\n column.isSearchable = false;\r\n break;\r\n case FieldTypeEnum[\"Lookup\"]:\r\n // TODO\r\n break;\r\n }\r\n return column;\r\n }\r\n\r\n viewRecord(record: Record){\r\n this.onViewRecord.emit(record);\r\n }\r\n /**\r\n * Metodo che scatena l'evento di Output per mostrare o modificare il record\r\n * selezionato sulla eqp-table.\r\n * @param record Record da visualizzare o modificare selezionato sulla eqp-table.\r\n * @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.\r\n */\r\n private viewOrEditRecord(record: Record, onlyView: boolean) {\r\n this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n\r\n /**\r\n * Metodo per eliminare un record dalla lista.\r\n * @param record Record da eliminare selezionato sulla eqp-table.\r\n */\r\n deleteRecord(record: Record) {\r\n this.onDeleteRecord.emit(record);\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della eqp-table.\r\n */\r\n private reloadTables() {\r\n if (this.tableRecords) {\r\n this.tableRecords.reloadDatatable();\r\n }\r\n }\r\n}\r\n","<mat-card class=\"list-form-record\">\r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n <mat-card-actions>\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n <!-- <button mat-button>LIKE</button> -->\r\n <!-- <button mat-button>SHARE</button> -->\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table>\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n <div class=\"col-md-6\">\r\n <h4 *ngIf=\"showTitle\">\r\n <b>Elenco {{ form.Name }}</b>\r\n </h4>\r\n </div>\r\n <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->","import { Injectable } from '@angular/core';\r\ndeclare var webkitSpeechRecognition: any;\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class VoiceRecognitionService {\r\n recognition;\r\n isStoppedSpeechRecog = false;\r\n public text = '';\r\n tempWords: any;\r\n transcript_arr = [];\r\n confidence_arr = [];\r\n isStarted = false; //<< this Flag to check if the user stop the service\r\n isStoppedAutomatically = true; //<< this Flag to check if the service stopped automaticically.\r\n constructor() { }\r\n\r\n init() {\r\n\r\n try {\r\n this.recognition = new webkitSpeechRecognition();\r\n\r\n this.recognition.continuous = true;\r\n this.recognition.interimResults = true;\r\n this.recognition.lang = 'it-IT';\r\n\r\n this.recognition.addEventListener('result', (e: any) => {\r\n const transcript = Array.from(e.results)\r\n .map((result: any) => result[0])\r\n .map((result) => result.transcript)\r\n .join('');\r\n this.transcript_arr.push(transcript);\r\n this.tempWords = transcript;\r\n\r\n const confidence = Array.from(e.results)\r\n .map((result: any) => result[0])\r\n .map((result) => result.confidence)\r\n .join('');\r\n this.confidence_arr.push(confidence);\r\n });\r\n\r\n this.recognition.addEventListener('end', (condition: any) => {\r\n this.wordConcat();\r\n if (this.isStoppedAutomatically) {\r\n this.recognition.stop();\r\n this.recognition.start();\r\n this.isStoppedAutomatically = true;\r\n }\r\n });\r\n \r\n } catch (error) {\r\n \r\n //console.log(error);\r\n \r\n //this.domElement.style.display = \"none\";\r\n }\r\n }\r\n\r\n start() {\r\n if (!this.isStarted) {\r\n this.recognition.start();\r\n this.isStarted = true;\r\n }\r\n return true;\r\n }\r\n stop() {\r\n if (this.isStarted) {\r\n this.isStoppedAutomatically = false;\r\n this.wordConcat();\r\n this.recognition.stop();\r\n this.isStarted = false;\r\n this.transcript_arr = [];\r\n }\r\n return false;\r\n }\r\n\r\n wordConcat() {\r\n this.text = this.text + ' ' + this.tempWords + '.';\r\n this.tempWords = '';\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../models/fields/textField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { VoiceRecognitionService } from '../../../../services/voice-recognition.service';\r\nimport { interval, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'text-field-template',\r\n templateUrl: './text-field-template.component.html',\r\n styleUrls: ['./text-field-template.component.scss']\r\n})\r\nexport class TextFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n\r\n constructor(public voiceservice: VoiceRecognitionService) {\r\n this.voiceservice.init();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n ttsClick() {\r\n //Gestione del bottone icona del microfono con riempimennto del campo in real time\r\n if (!this.isStillRecoginze) {\r\n this.newtext = '';\r\n this.isStillRecoginze = this.voiceservice.start() === true ? true : false;\r\n this.subscription = this.source.subscribe(val => {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == undefined) {\r\n this.record[this.field.Name] = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n }\r\n else {\r\n this.newtext = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n if (this.newtext != undefined)\r\n this.updateRTVoiceField();\r\n }\r\n });\r\n }\r\n else {\r\n this.isStillRecoginze = this.voiceservice.stop() === false ? false : true;\r\n this.subscription.unsubscribe();\r\n this.updateVoiceField();\r\n }\r\n }\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n updateRTVoiceField() {\r\n this.record[this.field.Name] = this.voiceservice.text + this.newtext;\r\n this.newtext = '';\r\n }\r\n updateVoiceField() {\r\n this.newtext = '';\r\n this.record[this.field.Name] = this.voiceservice.text;\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if (!this.isStillRecoginze) {\r\n if (this.record[this.field.Name] != null || this.record[this.field.Name] != undefined) {\r\n this.voiceservice.text = this.record[this.field.Name];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n if (!this.field.VisibleIf) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput [type]=\"getInputType()\" [formControlName]=\"field.Name\" [readonly]=\"field.Readonly\"\r\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min. Caratteri: {{field.MinLenght}} - Max. Caratteri: {{field.MaxLenght}} \r\n </mat-error>\r\n <mat-icon [hidden]=\"!field.Microphone\" (click)=\"ttsClick()\" matSuffix style=\"cursor: pointer;\" [color]=\"!isStillRecoginze ? '' : 'warn'\">keyboard_voice</mat-icon> \r\n</mat-form-field>","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class BooleanField extends BaseField {\r\n /**Se true il boolean accetta anche il valore N/A (non assegnato) */\r\n IsTristate: boolean;\r\n PresetationType: BoolPresentantioEnum;\r\n}\r\n\r\nexport enum BoolPresentantioEnum {\r\n \"Checkbox\" = 1,\r\n \"Toggle\" = 2,\r\n \"Radio button\" = 3,\r\n // \"Stringa true o false\" = 3,\r\n // \"Numerico 0 o 1\" = 4\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { BooleanField, BoolPresentantioEnum } from '../../../../models/fields/booleanField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\n\r\n@Component({\r\n selector: 'boolean-field-template',\r\n templateUrl: './boolean-field-template.component.html',\r\n styleUrls: ['./boolean-field-template.component.scss']\r\n})\r\nexport class BooleanFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: BooleanField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\n BoolPresentantioEnum = BoolPresentantioEnum;\r\n\r\n constructor() { }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n }\r\n \r\n ngOnInit(): void {\r\n if (this.record[this.field.Name] == undefined || this.record[this.field.Name] == null) {\r\n this.record[this.field.Name] = this.field.IsTristate ? null : false;\r\n }\r\n\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<div [formGroup]=\"field.FormFormGroup\">\r\n\r\n <!-- VISUALIZZAZIONE A TOGGLE -->\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Toggle\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-slide-toggle>\r\n\r\n <!-- VISUALIZZAZIONE A RADIOBUTTON -->\r\n <mat-label [ngStyle]=\"LabelstyleObj\" class=\"mr-3\" *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-label>\r\n <mat-radio-group *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"mr-2\" [value]=\"true\" color=\"primary\"> Si </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"false\" color=\"primary\"> No </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"null\" color=\"primary\" *ngIf=\"field.IsTristate\"> ND\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX -->\r\n <mat-checkbox class=\"mr-2\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Checkbox\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [formControlName]=\"field.Name\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-checkbox>\r\n\r\n <!-- TODO: Visualizzazione \"Stringa true o false\" e \"Numerico 0 o 1\" ?? -->\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { PickerModeEnum } from '@eqproject/eqp-datetimepicker';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../models/fields/dateField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\n\r\n@Component({\r\n selector: 'date-field-template',\r\n templateUrl: './date-field-template.component.html',\r\n styleUrls: ['./date-field-template.component.scss']\r\n})\r\nexport class DateFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: DateField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n pickerMode: PickerModeEnum;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.setTimeType();\r\n this.updateField();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n /**\r\n * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n * imposta la visualizzazione corretta del componente eqp-datetimepicker.\r\n */\r\n private setTimeType() {\r\n switch (this.field.IsOnlyDate) {\r\n case DateTimeTypeEnum[\"Solo data\"]:\r\n this.pickerMode = PickerModeEnum.DATE;\r\n break;\r\n case DateTimeTypeEnum[\"Solo orario\"]:\r\n this.pickerMode = PickerModeEnum.TIME;\r\n break;\r\n case DateTimeTypeEnum[\"Data e ora\"]:\r\n this.pickerMode = PickerModeEnum.DATETIME;\r\n break;\r\n }\r\n }\r\n}\r\n","<eqp-datetimepicker [placeholder]=\"field.Description\" [UTCDate]=\"true\" [pickerMode]=\"pickerMode\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [isRequired]=\"field.Required\" [disabled]=\"field.FormFormGroup.disabled\" [(ngModelInput)]=\"record[field.Name]\"\r\n (ngModelInputChange)=\"onRecordValueChange()\" [customDateFormat]=\"field.DateFormat ? field.DateFormat : null\">\r\n</eqp-datetimepicker>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { TextareaField } from '../../../../models/fields/textareaField.model';\r\nimport { VoiceRecognitionService } from '../../../../services/voice-recognition.service';\r\nimport { interval, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'textarea-field-template',\r\n templateUrl: './textarea-field-template.component.html',\r\n styleUrls: ['./textarea-field-template.component.scss'],\r\n providers: [VoiceRecognitionService],\r\n})\r\nexport class TextareaFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n isStillRecoginze = false;\r\n @Input() field: TextareaField;\r\n @Input() record: Record;\r\n source = interval(200);\r\n newtext: string;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n subscription: Subscription;\r\n\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n constructor(public voiceservice: VoiceRecognitionService) {\r\n this.voiceservice.init();\r\n }\r\n ngOnInit(): void {\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n ttsClick() {\r\n if (!this.isStillRecoginze) {\r\n this.newtext = '';\r\n this.isStillRecoginze = this.voiceservice.start() === true ? true : false;\r\n this.subscription = this.source.subscribe(val => {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == undefined) {\r\n this.record[this.field.Name] = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n }\r\n else {\r\n this.newtext = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n if (this.newtext != undefined)\r\n this.updateRTVoiceField();\r\n }\r\n });\r\n }\r\n else {\r\n this.isStillRecoginze = this.voiceservice.stop() === false ? false : true;\r\n this.subscription.unsubscribe();\r\n this.updateVoiceField();\r\n }\r\n }\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if (!this.isStillRecoginze) {\r\n if (this.record[this.field.Name] != null || this.record[this.field.Name] != undefined) {\r\n this.voiceservice.text = this.record[this.field.Name];\r\n }\r\n }\r\n }\r\n updateRTVoiceField() {\r\n this.record[this.field.Name] = this.voiceservice.text + this.newtext;\r\n this.newtext = '';\r\n }\r\n updateVoiceField() {\r\n this.newtext = '';\r\n this.record[this.field.Name] = this.voiceservice.text;\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<mat-form-field [formGroup]=\"field.FormFormGroup\"> \r\n <mat-label class=\"ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <textarea class=\"pt-2 mt-2\" [ngStyle]=\"FieldstyleObj\" matInput [placeholder]=\"field.Description\" [rows]=\"field.Rows\" [formControlName]=\"field.Name\"\r\n [readonly]=\"field.Readonly\" [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\"\r\n (ngModelChange)=\"onRecordValueChange()\"></textarea>\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min. Caratteri: {{field.MinLenght}} - Max. Caratteri: {{field.MaxLenght}}\r\n </mat-error>\r\n <mat-icon *ngIf=\"field.Microphone\" (click)=\"ttsClick()\" matSuffix style=\"cursor: pointer;\" [color]=\"!isStillRecoginze ? '' : 'warn'\">keyboard_voice</mat-icon> \r\n</mat-form-field>\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { EqpNumericInputMode, NumericMaskConfig } from '@eqproject/eqp-numeric';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { NumericField } from '../../../../models/fields/numericField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { Validators } from '@angular/forms';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n\r\n@Component({\r\n selector: 'numeric-field-template',\r\n templateUrl: './numeric-field-template.component.html',\r\n styleUrls: ['./numeric-field-template.component.scss']\r\n})\r\nexport class NumericFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() debugMode: boolean = false;\r\n\r\n @Input() field: NumericField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n validatorsArray: any[] = [];\r\n eqpNumericOptions: Partial<NumericMaskConfig> = {};\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nisDirty: boolean = false;\r\n\r\nconstructor() {\r\n}\r\n\r\n ngOnInit(): void {\r\n this.configureEqpNumericOptions();\r\n this.configureControllers(); \r\n this.updateField();\r\n this.initStyles();\r\n }\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n ngOnChanges(changes: SimpleChanges) {\r\n \r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n \r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n //console.log(\"field modified - original value\",this.field.Name,this.record[this.field.Name]);\r\n //this.record[this.field.Name] = this.record[this.field.Name] == 0 ? 0 : (this.record[this.field.Name] / Math.pow(10,this.eqpNumericOptions.precision)).toFixed(this.eqpNumericOptions.precision);\r\n //console.log(\"field modified - final value\",this.field.Name,this.record[this.field.Name]);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n GlobalService.debugLog(\"record changed - this.field.Name\",this.field.Name);\r\n GlobalService.debugLog(\"record changed - this.record[this.field.Name]\",this.record[this.field.Name]);\r\n if (!this.field.Formula) {\r\n GlobalService.debugLog(\"!this.field.Formula\",this.field.Name);\r\n if (this.isDirty){\r\n GlobalService.debugLog(\"this.isDirty\",this.field.Name);\r\n GlobalService.debugLog(\"this.isDirty - Full Record\",this.record);\r\n GlobalService.debugLog(\"this.isDirty - Precision\",this.eqpNumericOptions.precision);\r\n \r\n GlobalService.debugLog(\"this.isDirty - pre \",this.record[this.field.Name]);\r\n this.record[this.field.Name] = this.record[this.field.Name] == 0 ? 0 : (this.record[this.field.Name] / Math.pow(10,this.eqpNumericOptions.precision)).toFixed(this.eqpNumericOptions.precision);\r\n GlobalService.debugLog(\"this.isDirty - post \",this.record[this.field.Name]);\r\n\r\n GlobalService.debugLog(\"setDirty OFF\",this.field.Name);\r\n this.isDirty = false;\r\n }\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per configurare eqp-numeric\r\n */\r\n private configureEqpNumericOptions() {\r\n this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n this.eqpNumericOptions.allowNegative=true;\r\n if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n else\r\n this.eqpNumericOptions.decimal=\".\";\r\n if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined && this.field.ThousandsSeparator.trim().length > 0)\r\n this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n if(this.field.IsInteger== false){\r\n if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n else { this.eqpNumericOptions.precision = 2; }\r\n }else{\r\n this.eqpNumericOptions.precision = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo di aggiunta dei validator dell'input\r\n */\r\n private configureControllers() {\r\n this.validatorsArray = [];\r\n if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n }\r\n\r\n setDirty(){\r\n GlobalService.debugLog(\"setDirty ON\",this.field.Name);\r\n this.isDirty = true;\r\n }\r\n}","<mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput eqpNumericMask [formControlName]=\"field.Name\" [readonly]=\"field.Readonly\"\r\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (blur)=\"onRecordValueChange()\" (keypress)=\"setDirty()\" />\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n </mat-error>\r\n</mat-form-field>","import { AttachmentType, IAttachmentDTO } from \"@eqproject/eqp-attachments\";\r\nimport { BaseField } from \"../baseField.model\";\r\n\r\n/**Lista di valori */\r\nexport class ListValueField extends BaseField {\r\n /**\r\n * Lista di valori ordinata. La parte \"Value\", viene utilizzata in modi diversi a seconda del tipo di presentazione, e/o \r\n * come valore relazionato nelle formule\r\n */\r\n ValuePairs: { [key: string]: any};\r\n\r\n /**\r\n * stringa da parsare chiave valore: chiave1 | valore 1; chiave2|valore 2\r\n */\r\n ValueString: string;\r\n\r\n /**Se true è l'utente può scegliere più di un valore */\r\n IsMultiChoiche: boolean;\r\n\r\n /**Modalità di presentazione */\r\n PresentationMode: ListPresentationEnum;\r\n\r\n /**Elenco delle immagini per la visualizzazione a immagini (ListPresentationEnum.Immagini) */\r\n ButtonImageList: Array<ButtonImage>;\r\n}\r\n\r\nexport class ButtonImage implements IAttachmentDTO {\r\n ButtonKey: string;\r\n ButtonValue: string;\r\n ID: string | number;\r\n FileName?: string;\r\n FileContentType?: string;\r\n FileExtension?: string;\r\n FilePath?: string;\r\n AttachmentType?: AttachmentType;\r\n FileDataBase64?: string;\r\n IsImage?: boolean;\r\n FileThumbnailBase64?: string;\r\n TrustedUrl?: any;\r\n}\r\n\r\nexport enum ListPresentationEnum {\r\n \"Combo box\" = 1,\r\n \"Radio button\" = 2,\r\n \"Pulsante con testo\" = 3,\r\n \"Immagini\" = 4\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListPresentationEnum, ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../..//services/global.service';\r\n\r\n@Component({\r\n selector: 'list-value-field-template',\r\n templateUrl: './list-value-field-template.component.html',\r\n styleUrls: ['./list-value-field-template.component.scss']\r\n})\r\nexport class ListValueFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any) {\r\n if (this.debugMode) {\r\n console.log(message, element)\r\n }\r\n }\r\n\r\n @Input() field: ListValueField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n ListPresentationEnum = ListPresentationEnum;\r\n arrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n constructor() { }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n ngOnInit(): void {\r\n GlobalService.debugLog(\"combobox debugMode\", this.debugMode);\r\n GlobalService.debugLog(\"combobox filed\", this.field);\r\n this.updateField();\r\n this.setArrayData();\r\n if (this.field.IsMultiChoiche && !this.record[this.field.Name]) {\r\n this.record[this.field.Name] = [];\r\n }\r\n // Nel caso in cui sono in modifica di un Record aggiorno il valore\r\n // e il validator del FormControl. Se non viene eseguita questa riga\r\n // l'utente deve modificare la selezione fatta per aggiornare la form.\r\n this.setFormControlValue();\r\n this.initStyles();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n // devo controllare se ho la stringa (ValueString) o il dizionario (ValuePairs)\r\n GlobalService.debugLog(\"list-value-field updateField\", this.field)\r\n if (this.field.Formula) {\r\n GlobalService.debugLog(\"list-value-field - updateField - Formula\")\r\n this.field.ValuePairs = {};\r\n const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n // dobbiamo ottenere un dizionario di quei valori\r\n this.field.ValuePairs = this.stringToValuePairs(temp);\r\n\r\n // for (var key in matches) {\r\n // if(UtilityHelperService.isNumeric(temp[key])){\r\n // this.field.ValuePairs[key] = Number(temp[key]);\r\n // }else{\r\n // this.field.ValuePairs[key] = temp[key];\r\n // }\r\n // }\r\n\r\n // this.setArrayData();\r\n //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n GlobalService.debugLog(\"list-value-field - updateField - ValuePairs\")\r\n\r\n } else if (this.field.ValueString != null && this.field.ValueString != \"\") {\r\n GlobalService.debugLog(\"list-value-field - updateField - ValueString\")\r\n this.field.ValuePairs = this.stringToValuePairs(this.field.ValueString);\r\n\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato quando viene selezionata un'opzione nella visualizzazione a button\r\n * @param data Rappresenta l'oggetto selezionato\r\n */\r\n buttonSelectClick(data: { Key: string, Value: string, Selected?: boolean, ImgUrl?: string }) {\r\n data.Selected = !data.Selected;\r\n if (this.field.IsMultiChoiche) {\r\n this.updateSelected(false);\r\n } else {\r\n this.arrayData.filter(d => d.Key != data.Key && d.Value != data.Value).forEach(d => d.Selected = false);\r\n\r\n if (UtilityHelperService.isNumeric(data.Value)) {\r\n\r\n this.record[this.field.Name] = Number(data.Value);\r\n }\r\n else {\r\n this.record[this.field.Name] = data.Value;\r\n }\r\n\r\n }\r\n this.onRecordValueChange();\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il/i valore/i selezionato/i dall'utente.\r\n * @param emitChange Se true scatena l'evento di output della modifica del valore di record\r\n */\r\n updateSelected(emitChange: boolean = true) {\r\n this.record[this.field.Name] = this.arrayData.filter(data => data.Selected).map(data => data.Value);\r\n this.setFormControlValue();\r\n if (emitChange) {\r\n this.onRecordValueChange();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n /**\r\n * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.\r\n */\r\n private setArrayData() {\r\n if (this.field.PresentationMode != ListPresentationEnum.Immagini) {\r\n if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n } else {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n }\r\n\r\n } else {\r\n this.field.ButtonImageList.forEach(i => { this.createArrayDataElement(i.ButtonKey, i.ButtonValue, 'data:' + i.FileContentType + ';base64,' + i.FileDataBase64); });\r\n }\r\n }\r\n\r\n private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n /**\r\n * Metodo per aggiornare il valore e il validator del FormControl associato al campo.\r\n */\r\n private setFormControlValue() {\r\n this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name]);\r\n }\r\n\r\n\r\n private stringToValuePairs(valueString: string): { [key: string]: string } {\r\n const valuePairs: { [key: string]: string } = {};\r\n // GlobalService.debugLog('stringToValuePair() - this.field.Formula temp', valueString)\r\n const keyvals = valueString.split(\";\");\r\n keyvals.forEach((x) => {\r\n const parts = x.split(\"|\");\r\n // GlobalService.debugLog('stringToValuePair() - parts', parts);\r\n // GlobalService.debugLog('stringToValuePair() - parts.lenght', parts.length);\r\n if(parts.length == 1){\r\n valuePairs[parts[0].trim()] = parts[0].trim();\r\n } else if (parts.length > 1){\r\n // GlobalService.debugLog('stringToValuePair() - parts[0].trim()', parts[0].trim());\r\n // GlobalService.debugLog('stringToValuePair() - parts[1].trim()', parts[1].trim());\r\n valuePairs[parts[0].trim()] = parts[1].trim();\r\n }\r\n })\r\n // GlobalService.debugLog('stringToValuePair() - valuePairs', valuePairs)\r\n return valuePairs;\r\n }\r\n\r\n}\r\n","<eqp-select [ngStyle]=\"FieldstyleObj\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Combo box']\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"!field.Required\" [arrayValueProperty]=\"'Key'\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n [includeFullObject]=\"false\" [isRequired]=\"field.Required\" [isDisabled]=\"field.FormFormGroup.disabled\"\r\n [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"field.IsMultiChoiche\"\r\n (ngModelInputChange)=\"onRecordValueChange()\">\r\n</eqp-select>\r\n\r\n<div *ngIf=\"field.PresentationMode != ListPresentationEnum['Combo box']\" [formGroup]=\"field.FormFormGroup\">\r\n\r\n <mat-label class=\"mr-3 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description + (field.Required ? \" *\" : \"\")}} </mat-label>\r\n <!-- VISUALIZZAZIONE A RADIO BUTTON (SENZA SELEZIONE MULTIPLA) -->\r\n <mat-radio-group [ngStyle]=\"FieldstyleObj\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && !field.IsMultiChoiche\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"ms-3 d-block\" *ngFor=\"let data of arrayData\" [value]=\"data.Value\" color=\"primary\">\r\n {{data.Key}}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX (SELEZIONE MULTIPLA) -->\r\n <div class=\"d-inline-block\"\r\n *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && field.IsMultiChoiche\">\r\n <mat-checkbox [ngStyle]=\"FieldstyleObj\" class=\"mr-2\" *ngFor=\"let data of arrayData\" [disabled]=\"field.FormFormGroup.disabled\"\r\n [formControlName]=\"field.Name\" [(ngModel)]=\"data.Selected\" (ngModelChange)=\"updateSelected()\">\r\n {{data.Key}}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <!-- VISUALIZZAZIONE A PULSANTI (CON TESTO O IMMAGINI) -->\r\n <div class=\"d-inline-block\"\r\n *ngIf=\"[ListPresentationEnum['Pulsante con testo'], ListPresentationEnum.Immagini].includes(field.PresentationMode)\">\r\n <button [ngStyle]=\"FieldstyleObj\" mat-raised-button color=\"primary\" class=\"btn btn-primary m-1 data-button\" *ngFor=\"let data of arrayData\"\r\n [ngClass]=\"{'selected-button': data.Selected == true, 'p-0': field.PresentationMode == ListPresentationEnum.Immagini}\"\r\n (click)=\"buttonSelectClick(data)\" [disabled]=\"field.FormFormGroup.disabled\">\r\n\r\n <!-- TESTO DEL PULSANTE -->\r\n <span *ngIf=\"field.PresentationMode == ListPresentationEnum['Pulsante con testo']\"> {{data.Key}}</span>\r\n\r\n <!-- IMMAGINE DEL PULSANTE -->\r\n <img *ngIf=\"field.PresentationMode == ListPresentationEnum.Immagini\" [src]=\"data.ImgUrl\">\r\n </button>\r\n </div>\r\n\r\n</div>","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class AttachmentField extends BaseField {\r\n /**Elenco delle estensioni consentite. Se vuoto usa il default (pdf) */\r\n AllowedExtensions: Array<string>;\r\n\r\n /**Se true permette l'inserimento di più allegati. In questo caso i metadati vengono rappresentati come una detail */\r\n IsMultiAttach: boolean;\r\n\r\n /**Elenco campi che possono rappresentare i metadati dell'allegato, ad esempio nome, ecc... */\r\n MetadataFields: Array<BaseField>;\r\n}\r\n\r\nexport const AvailableFileExtensions: Array<{ key: string, value: string }> = [\r\n { value: '.pdf', key: 'application/pdf' },\r\n { value: '.doc', key: 'application/msword' },\r\n { value: '.xls', key: 'application/vnd.ms-excel' },\r\n { value: '.ppt', key: 'application/vnd.ms-powerpoint' },\r\n { value: '.docx', key: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' },\r\n { value: '.xlsx', key: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' },\r\n { value: '.pptx', key: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' },\r\n { value: '.csv', key: 'text/csv' },\r\n { value: '.txt', key: 'text/plain' },\r\n];\r\n\r\nexport const AvailableImageExtensions: Array<{ key: string, value: string }> = [\r\n { value: '.jpg/.jpeg', key: 'image/jpeg' },\r\n { value: '.png', key: 'image/png' },\r\n { value: '.bmp', key: 'image/bmp' },\r\n { value: '.svg', key: 'image/svg+xml' },\r\n { value: '.ico', key: 'image/x-icon' },\r\n];","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { AttachmentField, AvailableFileExtensions, AvailableImageExtensions } from '../../../../models/fields/attachmentField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { EqpAttachmentsComponent } from '@eqproject/eqp-attachments';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { ConfigColumn, TypeColumn } from '@eqproject/eqp-table';\r\n\r\n@Component({\r\n selector: 'attachment-field-template',\r\n templateUrl: './attachment-field-template.component.html',\r\n styleUrls: ['./attachment-field-template.component.scss']\r\n})\r\nexport class AttachmentFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent, AfterViewInit {\r\n\r\n @Input() onlyImages: boolean = false;\r\n @Input() field: AttachmentField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() onAttachmentsChange: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @ViewChild(\"eqpAttachments\", { static: true }) eqpAttachments: EqpAttachmentsComponent;\r\n //@ViewChild('metadataColumnTemplate', { static: true }) metadataColumnTemplate: TemplateRef<any>;\r\n\r\n //metadataFormGroups: Array<UntypedFormGroup> = new Array<UntypedFormGroup>();\r\n\r\n constructor(\r\n public utilityService: UtilityHelperService,\r\n private cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n // Nel caso in cui sono in modifica di un Record aggiorno il valore\r\n // e il validator del FormControl. Se non viene eseguita questa riga\r\n // l'utente deve modificare la selezione fatta per aggiornare la form.\r\n this.setFormControlValue();\r\n\r\n // Sempre nel caso in cui sono in modifica creo i FormGroup che rappresentano\r\n // gli eventuali metadata degli allegati recuperati.\r\n //\r\n\r\n if (!this.field.AllowedExtensions) {\r\n this.field.AllowedExtensions = AvailableFileExtensions.concat(AvailableImageExtensions).map(ext => ext.key);\r\n }\r\n this.updateField();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Dopo aver renderizzato il DOM, se il campo ammette molteplici allegati\r\n // configuro le colonne della eqp-table in eqp-attachments.\r\n // if (this.field.IsMultiAttach) {\r\n // this.configureMultiAttachmentColumns();\r\n // }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per intercettare le modifiche agli allegati caricati.\r\n * Se il campo prevede dei metadata allora per ogni allegato caricato crea un FormGroup\r\n * per gestire la validazione degli input che l'utente può/deve riempire. I FormGroup \r\n * seguono lo stesso ordine degli allegati caricati.\r\n * @param event Contiene la lista aggiornata degli Attachment caricati dall'utente.\r\n */\r\n catchAttachmentList(event) {\r\n this.record[this.field.Name] = event;\r\n\r\n // this.createMetadataFormGroups();\r\n\r\n this.setFormControlValue();\r\n this.onRecordValueChange();\r\n \r\n // Scateno un evento di output necessario al componente ImageFieldTemplate al\r\n // variare degli allegati caricati. Viene usato per aprire il dialog per disegnare\r\n // sull'immagine caricata in base alla configurazione del Field.\r\n this.onAttachmentsChange.emit();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare lo stato di validazione del FormControl che rappresenta \r\n * il campo Allegato (non i metadata al suo interno). Se tra le form dei metadata\r\n * ne trova una invalida allora marca il controllo come invalido.\r\n */\r\n // updateMetadataValidity() {\r\n // if (this.metadataFormGroups.find(form => form.invalid)) {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors({ 'incorrect': true });\r\n // } else {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors(null);\r\n // }\r\n // this.onRecordValueChange();\r\n // }\r\n\r\n /**\r\n * Metodo per recuperare il BaseField che rappresenta il metadata nella riga della eqp-table\r\n * in base alla colonna e alla riga. Una volta trovato il BaseField gli viene associato il \r\n * FormGroup di cui fa parte.\r\n * @param col Colonna della eqp-table.\r\n * @param row Riga della eqp-table (in questo caso eredita da IAttachment).\r\n * @returns Restituisce un BaseField per renderizzare il campo nella eqp-table degli allegati multipli.\r\n */\r\n // getFieldFromMetadata(col: ConfigColumn, row: any) {\r\n // var baseField = JSON.parse(JSON.stringify(this.field.MetadataFields.find(metadata => metadata.Name === col.key)));\r\n // baseField.FormFormGroup = this.metadataFormGroups[this.record[this.field.Name].indexOf(row)];\r\n // return baseField;\r\n // }\r\n\r\n /**\r\n * Metodo per aggiornare il valore e il validator del FormControl associato al campo.\r\n */\r\n private setFormControlValue() {\r\n this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name]);\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n private onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiungere alle colonne di eqp-attachments le colonne per modificare i metadata\r\n * configurati per il campo Allegato o Immagine.\r\n */\r\n // private configureMultiAttachmentColumns() {\r\n // if (this.eqpAttachments && this.eqpAttachments.attachmentsColumns && this.field.MetadataFields && this.field.MetadataFields.length > 0) {\r\n // this.field.MetadataFields.forEach(metadata => {\r\n // this.eqpAttachments.attachmentsColumns.splice(\r\n // this.eqpAttachments.attachmentsColumns.length - 1, 0,\r\n // { key: metadata.Name, display: metadata.Label, type: TypeColumn.ExternalTemplate, externalTemplate: this.metadataColumnTemplate }\r\n // );\r\n // });\r\n // }\r\n // }\r\n\r\n /**\r\n * Metodo per creare i FormGroup che rappresentano i metadata degli allegati caricati.\r\n */\r\n // private createMetadataFormGroups() {\r\n // if (this.field.MetadataFields && this.field.MetadataFields.length > 0) {\r\n // this.metadataFormGroups = [];\r\n // if (this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n // this.record[this.field.Name].forEach(attachment => {\r\n // this.metadataFormGroups.push(this.utilityService.CreateFormFormGroup(this.field.MetadataFields, attachment, this.field.FormFormGroup.disabled, !this.field.IsMultiAttach));\r\n // });\r\n // }\r\n\r\n // this.updateMetadataValidity();\r\n // }\r\n // }\r\n}","<p *ngIf=\"!field.IsMultiAttach\" class=\"mb-2\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n</p>\r\n<div class=\"row\" *ngIf=\"!field.IsMultiAttach && record[field.Name] && record[field.Name][0]\">\r\n <!-- <div class=\"mt-2\" *ngFor=\"let metadata of field.MetadataFields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n <dynamic-module-field-fix [field]=\"metadata\" [record]=\"record[field.Name][0]\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n </div> -->\r\n</div>\r\n\r\n<eqp-attachments [attachmentsList]=\"record[field.Name]\" [showMatCard]=\"true\" [allowOnlyImages]=\"onlyImages\"\r\n [isDisabled]=\"field.FormFormGroup.disabled\" [showInlinePreview]=\"true\" [multipleAttachment]=\"field.IsMultiAttach\"\r\n [disableAction]=\"field.FormFormGroup.disabled\" [acceptedFileTypes]=\"field.AllowedExtensions\" [showHeader]=\"true\"\r\n [headerTitle]=\"field.Description + (field.Required ? ' *' : '')\" (localEditedAttachments)=\"catchAttachmentList($event)\"\r\n #eqpAttachments>\r\n</eqp-attachments>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<!-- <ng-template #metadataColumnTemplate let-row=\"row\" let-col=\"col\">\r\n <dynamic-module-field-fix [field]=\"getFieldFromMetadata(col, row)\" [record]=\"row\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n</ng-template> -->","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ImageField } from '../../../../models/fields/imageField.model';\r\nimport { AvailableImageExtensions } from '../../../../models/fields/attachmentField.model';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { I18nInterface } from '@eqproject/eqp-img-drawing';\r\n\r\n/**\r\n * Metodo per recuperare, a partire da un Blob, la stringa contenente il base64 del file.\r\n * Usato per prendere il base64 dell'immagine dopo che l'utente ci ha disegnato sopra.\r\n * @param file Blob che rappresenta l'immagine.\r\n */\r\nconst toBase64 = file => new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result.toString());\r\n reader.onerror = error => reject(error);\r\n});\r\n\r\n@Component({\r\n selector: 'image-field-template',\r\n templateUrl: './image-field-template.component.html',\r\n styleUrls: ['./image-field-template.component.scss']\r\n})\r\nexport class ImageFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() record: Record;\r\n @Input() field: ImageField;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n //preLoadedImageMetadataFormGroup: UntypedFormGroup;\r\n\r\n //#region Proprietà per configurare il componente ngx-image-drawing e aprire il relativo dialog.\r\n public width = null;\r\n public height = null;\r\n public i18n: I18nInterface = {\r\n saveBtn: 'Salva modifiche',\r\n cancelBtn: 'Ricarica originale'\r\n };\r\n dialogImageDrowingRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogImageDrowing\", { static: true }) dialogImageDrowing: TemplateRef<any>;\r\n //#endregion\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n public utilityService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n \r\n this.field.AttachDefinition.FormFormGroup = this.field.FormFormGroup;\r\n\r\n if (!this.field.AttachDefinition.AllowedExtensions) {\r\n this.field.AttachDefinition.AllowedExtensions = AvailableImageExtensions.map(ext => ext.key);\r\n }\r\n\r\n this.field.AttachDefinition.Name = this.field.Name;\r\n this.field.AttachDefinition.Label = this.field.Label;\r\n this.field.AttachDefinition.Description = this.field.Description;\r\n this.field.AttachDefinition.Required = this.field.Required;\r\n this.field.AttachDefinition.Formula = this.field.Formula;\r\n this.field.AttachDefinition.FieldValue = this.field.FieldValue;\r\n\r\n // Se il campo prevede un'immagine pre-caricata (ImageIsContextualAttachment == true) sulla quale \r\n // l'utente può disegnare (EnableDrawing == true) e non sono in modifica di un record (ovvero nel record\r\n // non ho un'immagine già salvata) allora imposta l'immagine pre caricata come valore iniziale\r\n // nel record corrente e ne recupera le dimensioni per visualizzare correttamente l'area in cui \r\n // l'utente può disegnare. Se non effettua modifiche o non salva i disegni fatti viene salvata\r\n // l'immagine originale.\r\n if (this.field.ImageIsContextualAttachment && this.field.ContextualAttachment) {\r\n if (!this.record[this.field.Name] || !Array.isArray(this.record[this.field.Name]) || !(this.record[this.field.Name].length > 0)) {\r\n this.record[this.field.Name] = [JSON.parse(JSON.stringify(this.field.ContextualAttachment))];\r\n }\r\n // if(this.field.AttachDefinition.MetadataFields != undefined) \r\n // this.preLoadedImageMetadataFormGroup = this.utilityService.CreateFormFormGroup(this.field.AttachDefinition.MetadataFields, this.record[this.field.Name][0]);\r\n this.getImageDimensions();\r\n }\r\n this.updateField();\r\n }\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n\r\n // updateMetadataValidity() {\r\n // if (this.preLoadedImageMetadataFormGroup.invalid) {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors({ 'incorrect': true });\r\n // } else {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors(null);\r\n // }\r\n // this.onRecordValueChange();\r\n // }\r\n\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n\r\n resetPreLoadedImage() {\r\n this.width = null;\r\n this.height = null;\r\n this.record[this.field.Name] = [JSON.parse(JSON.stringify(this.field.ContextualAttachment))];\r\n this.getImageDimensions();\r\n }\r\n\r\n /**\r\n * Metodo invocato quando vengono aggiunti o eliminati gli allegati nel componente AttachmentFieldTemplate.\r\n * Se l'ImageField è abilitato al disegno (EnableDrawing == true), non permette allegati multipli (IsMulitAttach == false)\r\n * e nel Record corrente è presente l'immagine caricata dall'utente allora recupera le dimensioni dell'immagine e\r\n * apre il dialog con il componente image-drawing per permettere il disegno sull'immagine appena caricata.\r\n */\r\n onAttachmentsChange() {\r\n if (!this.field.AttachDefinition.IsMultiAttach && this.field.EnableDrawing && this.record[this.field.Name] && this.record[this.field.Name][0]) {\r\n this.getImageDimensions();\r\n this.dialogImageDrowingRef = this.dialog.open(this.dialogImageDrowing, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: '75%'\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio dell'immagine dal componente image-drawing.\r\n * Trasforma il Blob ricevuto in un base64, aggiorna il FileContetType e il FileDataBase64\r\n * dell'allegato caricato e chiude il dialog in cui disegnare.\r\n * @param drawnPicture Blob dell'immagine disegnata.\r\n */\r\n async saveDrowning(drawnPicture: Blob) {\r\n let base64File = await toBase64(drawnPicture);\r\n if (base64File) {\r\n this.record[this.field.Name][0].FileContentType = base64File.split(\",\")[0].split(\":\")[1].split(\";\")[0];\r\n this.record[this.field.Name][0].FileDataBase64 = base64File.split(\",\")[1];\r\n }\r\n if (this.dialogImageDrowingRef) {\r\n this.closeImageDrowingDialog();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog in cui disegnare sull'immagine cariata e svuotare le dimensioni.\r\n */\r\n closeImageDrowingDialog() {\r\n this.dialogImageDrowingRef.close();\r\n this.width = null;\r\n this.height = null;\r\n }\r\n\r\n /**\r\n * Metodo per recuperare le dimensioni dell'immagine caricata per mostrare correttamente\r\n * il componente image-drawing. Se non viene eseguito questo passaggio l'area in cui disegnare \r\n * è più grande dell'immagine stessa e al salvataggio i tratti disegnati vengono spostati. \r\n */\r\n private getImageDimensions() {\r\n var blob: Blob = this.getBlobFromBase64();\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const image = new Image();\r\n image.src = e.target.result;\r\n image.onload = rs => {\r\n this.height = rs.currentTarget['height'];\r\n this.width = rs.currentTarget['width'];\r\n };\r\n };\r\n reader.readAsDataURL(blob);\r\n }\r\n\r\n /**\r\n * Metodo per convertire il base64 di un'immagine in un Blob.\r\n * Necessario per il recupero delle dimensioni dell'immagine caricata a partire dal suo base64.\r\n * Viene eseguito solo nel caso in cui l'ImageField non ammette allegati multipli.\r\n * @returns Restituisce il Blob dell'immagine caricata.\r\n */\r\n private getBlobFromBase64() {\r\n const byteCharacters = atob(this.record[this.field.Name][0].FileDataBase64);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n return new Blob([byteArray], { type: this.record[this.field.Name][0].FileContentType });\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n private onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}","<!-- VISUALIZZAZIONE ALLEGATO PRE CARICATO CON POSSIBILITA' DI DISEGNO\r\n<div class=\"row\" *ngIf=\"field.ImageIsContextualAttachment && field.ContextualAttachment\">\r\n <div class=\"col-sm-12 col-md-6 col-lg-4\">\r\n <p class=\"mb-2\">\r\n {{ field.Description + (field.Required ? \" *\" : \"\")}}\r\n <br>\r\n Nome immagine: {{ field.ImgName}}\r\n </p>\r\n <eqp-img-drawing\r\n *ngIf=\"field.EnableDrawing && record[field.Name] && record[field.Name][0] && width != null && height != null\"\r\n [src]=\"'data:'+ record[field.Name][0].FileContentType + ';base64,'+ record[field.Name][0].FileDataBase64\"\r\n [showCancelButton]=\"false\" [enableLoadAnotherImage]=\"false\" [enableRemoveImage]=\"false\" [width]=\"width\"\r\n [height]=\"height\" [i18n]=\"i18n\" [showCancelButton]=\"true\" (save)=\"saveDrowning($event)\"\r\n (cancel)=\"resetPreLoadedImage()\">\r\n </eqp-img-drawing>\r\n\r\n <img *ngIf=\"!field.EnableDrawing\"\r\n [src]=\"'data:'+ record[field.Name][0].FileContentType+ ';base64,'+ record[field.Name][0].FileDataBase64\">\r\n </div> -->\r\n\r\n <!-- <div class=\"col-sm-12 col-md-6 col-lg-8\">\r\n <div class=\"row\"\r\n *ngIf=\"field.AttachDefinition && field.AttachDefinition.MetadataFields && preLoadedImageMetadataFormGroup\">\r\n <div class=\"mt-2\" *ngFor=\"let metadata of field.AttachDefinition.MetadataFields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n <dynamic-module-field-fix #fieldTemplate [field]=\"metadata\" [form]=\"preLoadedImageMetadataFormGroup\"\r\n [record]=\"record[field.Name][0]\" (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n </div>\r\n </div>\r\n </div> -->\r\n<!-- </div> -->\r\n\r\n<!-- COMPONENTE IN CUI CARICARE NUOVI ALLEGATI -->\r\n<!-- <attachment-field-template [(record)]=\"record\" [field]=\"field.AttachDefinition\" [onlyImages]=\"true\"\r\n (onAttachmentsChange)=\"onAttachmentsChange()\" *ngIf=\"!field.ImageIsContextualAttachment\">\r\n</attachment-field-template> -->\r\n\r\n<!-- DIALOG PER DISEGNARE SUL NUOVO ALLEGATO CARICATO -->\r\n<!-- <ng-template #dialogImageDrowing>\r\n <div *ngIf=\"field.EnableDrawing && record[field.Name] && record[field.Name][0] && width != null && height != null\"\r\n class=\"row\">\r\n <div class=\"col-sm-12 col-md-12\">\r\n <eqp-img-drawing [showCancelButton]=\"false\" [enableLoadAnotherImage]=\"false\" [enableRemoveImage]=\"false\"\r\n [src]=\"'data:'+ record[field.Name][0].FileContentType + ';base64,'+ record[field.Name][0].FileDataBase64\"\r\n [i18n]=\"i18n\" [showCancelButton]=\"false\" (save)=\"saveDrowning($event)\">\r\n </eqp-img-drawing>\r\n </div>\r\n </div>\r\n <div class=\"row mt-2 mb-1\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"btn mat-raised-button\" (click)=\"closeImageDrowingDialog()\" type=\"button\">\r\n Annulla disegno\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template> -->","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { IBaseFieldComponent } from '../../../interfaces/iBaseFieldComponent.interface';\r\nimport { BaseField, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../form-records/list-form-record/list-form-record.component';\r\n\r\n@Component({\r\n selector: 'dynamic-module-field-fix',\r\n templateUrl: './dynamic-module-field.component.html',\r\n styleUrls: ['./dynamic-module-field.component.scss']\r\n})\r\nexport class DynamicModuleFieldFixComponent implements OnInit, IBaseFieldComponent {\r\n\r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any) {\r\n if (this.debugMode) {\r\n console.log(message, element)\r\n }\r\n }\r\n @Input() field: BaseField;\r\n @Input() form: Form;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n selectedInnerForm: Form;\r\n selectedInnerFormRecord: Record;\r\n indexInnerFormRecord: number;\r\n onlyViewInnerFormRecord: boolean = false;\r\n dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n constructor(\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n\r\n updateField(): void {\r\n if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n this.fieldTemplate.forEach(f => f.updateField());\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.configList.values = this.record[this.field.Name]\r\n this.configList.showTitle = true;\r\n this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onRecordChange() {\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n /**\r\n * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n * @returns Restituisce un oggetto di tipo Form.\r\n */\r\n getInnerFormFromField(field: BaseField): Form {\r\n if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n return this.form.InnerForms.find(f => f.Name == field.Label);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aprire un dialog in cui aggiungere/modificare/visualizzare un record appartenente\r\n * a una form di dettaglio.\r\n * @param record Evento di output del componente list-form-record, contiene il record selezionato e un booleno che indica \r\n * se l'utente vuole modificare o visualizzare l'elemento selezionato.\r\n * @param innerForm Contiene la Form di dettaglio dalla quale è stato richiesto il record.\r\n */\r\n onAddViewEditInnerFormRecord(record: { record: Record, onlyView: boolean }, field: BaseField) {\r\n this.selectedInnerForm = this.getInnerFormFromField(field);\r\n if (record == null) {\r\n this.selectedInnerFormRecord = new Record();\r\n this.indexInnerFormRecord = null;\r\n this.onlyViewInnerFormRecord = false;\r\n } else {\r\n this.selectedInnerFormRecord = JSON.parse(JSON.stringify(record.record));\r\n this.indexInnerFormRecord = this.record[field.Name].indexOf(record);\r\n this.onlyViewInnerFormRecord = record.onlyView;\r\n }\r\n\r\n this.dialogInnerFormRecordRef = this.dialog.open(this.dialogInnerFormRecord, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: '75%'\r\n });\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio o alla chiusura del dialog di aggiunta/modifica/visualizzazione\r\n * di un record di una form di dettaglio.\r\n * @param record Oggetto restituito dal componente add-form-field (questo qui) contenente il Record \r\n * aggiornato dall'utente. Se null allora l'utente non ha modificato nulla e ha chiuso il dialog.\r\n */\r\n onSaveInnerFormRecord(record: Record) {\r\n if (record != null) {\r\n const arrayName: string = this.selectedInnerForm.Name.split(' ').join('_');\r\n if (this.indexInnerFormRecord != null && this.indexInnerFormRecord >= 0) {\r\n this.record[arrayName][this.indexInnerFormRecord] = record;\r\n } else {\r\n if (!this.record[arrayName]) {\r\n this.record[arrayName] = [];\r\n }\r\n this.record[arrayName].push(record);\r\n }\r\n }\r\n this.dialogInnerFormRecordRef.close();\r\n\r\n // Ricarico la tabella dei record per visualizzare le modifiche fatte dall'utente.\r\n if (this.listInnerFormRecords && this.listInnerFormRecords.length > 0) {\r\n this.listInnerFormRecords.forEach(list => {\r\n if (list && list.tableRecords) {\r\n list.tableRecords.reloadDatatable();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","<text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</text-field-template>\r\n\r\n<textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</textarea-field-template>\r\n\r\n<boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</boolean-field-template>\r\n\r\n<date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</date-field-template>\r\n\r\n<numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</numeric-field-template>\r\n\r\n<list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [debugMode]=\"debugMode\" [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</attachment-field-template>\r\n\r\n<image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</image-field-template> \r\n\r\n<list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n</list-form-record>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { DynamicModuleCompileConfig } from '../../../../models/dynamicModuleCompileConfig.model';\r\nimport { AnswerStyle, BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { Form, FormScalarTypeEnum } from '../../../../models/form.model';\r\nimport { DynRecord, Record } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from './../../../../models/endPointConfiguration.model';\r\nimport { ListValueField } from 'projects/eqp-dynamic-module/src/lib/models/fields/listValueField.model';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n// import { DynamicModuleFieldComponent } from '../../dynamic-module-field/dynamic-module-field.component';\r\n\r\n@Component({\r\n selector: \"add-form-record\",\r\n templateUrl: \"./add-form-record.component.html\",\r\n styleUrls: [\"./add-form-record.component.scss\"],\r\n})\r\nexport class AddFormRecordComponent implements OnInit {\r\n\r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any) {\r\n if (this.debugMode) {\r\n console.log(message, element)\r\n }\r\n }\r\n\r\n\r\n @Input() configurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n\r\n @Input() formID: string = null; // preview\r\n @Input() form: Form = null; // preview config\r\n @Input() record: Record | string = null; // edit\r\n @Input() onlyView: boolean = false;\r\n @Input() isDuplicate: boolean = false;\r\n @Input() additionalParams: any = null;\r\n\r\n showTitle = true;\r\n showSaveButton = true;\r\n showBackButton = true;\r\n loader: boolean = false;\r\n\r\n formForm: UntypedFormGroup;\r\n fieldGroups: { [key: string]: Array<BaseField> } = {};\r\n FormScalarTypeEnum = FormScalarTypeEnum;\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n\r\n @ViewChildren(\"fieldTemplate\")\r\n fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n public utilityService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n // add può funzionare anche come modifica e come preview\r\n // in add abbiamo in input l'ID del Form\r\n // in modifica abbiamo in input l'ID del Record\r\n // in preview abbiamo in input il Form(caso configurator) o l'ID del modulo on onlyView impostato a true\r\n this.showTitle = this.configurations.showTitle;\r\n this.showSaveButton = this.configurations.showSaveButton;\r\n this.showBackButton = this.configurations.showBackButton;\r\n\r\n if (this.record == null) {\r\n this.previewOrNewResponseRecord();\r\n } else {\r\n this.editResponseRecord();\r\n }\r\n\r\n // l'inizializzazione termina con il recupero del record o con l'inizializzazione del form vuoto\r\n\r\n this.cdr.detectChanges();\r\n GlobalService.debugLog('oninit - DynaForm', this.form)\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onRecordChange() {\r\n if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n this.fieldTemplate.forEach((f) => f.updateField());\r\n }\r\n }\r\n\r\n previewOrNewResponseRecord() {\r\n this.record = new Record();\r\n // aggiugni nuovo\r\n if (this.form != null) {\r\n // preview per il configurator\r\n this.fieldsConfig();\r\n } else if (this.formID != null) {\r\n // preview per admin\r\n this.getFormByID(); // dentro chiama fieldsConfig\r\n }\r\n }\r\n editResponseRecord() {\r\n // modiiltà modifica\r\n if (typeof this.record === \"string\") {\r\n // allora è un ID\r\n this.getRecordByID();\r\n } else {\r\n // il record viene passato come tale\r\n // (<Record>this.record).EntID = \"3\";\r\n // (<Record>this.record).Version;\r\n this.getFormByIDandVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(exit: boolean) {\r\n GlobalService.debugLog('add-form-record saveRecordEvent')\r\n if (exit) {\r\n // this.saveRecordEvent.emit(null);\r\n this.onSaveRecord(null);\r\n } else {\r\n // this.saveRecordEvent.emit(this.record);\r\n this.onSaveRecord((<Record>this.record));\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare il record aggiunto o modificato.\r\n * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n * nel body della chiamata, altrimenti scatena l'evento \"saveRecord\".\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onSaveRecord(event: Record) {\r\n GlobalService.debugLog('onSaveRecord - event', event)\r\n GlobalService.debugLog('onSaveRecord - form', this.form)\r\n if (\r\n event != null &&\r\n this.endPointConfiguration != null &&\r\n this.endPointConfiguration.Records.SaveEndPoint\r\n ) {\r\n var dynRec: DynRecord = new DynRecord();\r\n dynRec.ID = event.ID ?? null;\r\n dynRec.EntID = this.form.ID;\r\n dynRec.Version = this.form.Version;\r\n dynRec.userID = this.userID;\r\n dynRec.Values = event ?? null;\r\n dynRec.HTMLreadableValues = this.createHTMLreadableValues(event);\r\n\r\n var additionalParams = this.additionalParams == null ? event.AdditionalParams : this.additionalParams;\r\n dynRec.AdditionalParams = JSON.stringify(additionalParams);\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"Record\",\r\n ParamValue: dynRec,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ];\r\n \r\n GlobalService.debugLog('onSaveRecord - dynamicModuleParams', dynamicModuleParams)\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.SaveEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n this.afterSaveRecordEvent.emit(event);\r\n }\r\n );\r\n } else {\r\n this.saveRecordEvent.emit(event);\r\n }\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n GlobalService.debugLog('getFormByID - DynaForm', this.form)\r\n this.fieldsConfig();\r\n },\r\n (err) => { }\r\n );\r\n }\r\n\r\n // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n getRecordByID() {\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.record,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.record = new Record();\r\n\r\n (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n this.record.ID = this.isDuplicate ? \"\" : res.ID;\r\n this.record.EntID = res.EntID;\r\n this.record.userID = res.userID;\r\n this.record.Version = res.Version;\r\n this.record.Values = JSON.parse(res.SerializedValues);\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // this.loader = true;\r\n this.getFormByIDandVersion();\r\n }\r\n );\r\n }\r\n getFormByIDandVersion() {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: (<Record>this.record).EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: (<Record>this.record).Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n GlobalService.debugLog(\"getFormByIDandVersion - this record\", <Record>this.record)\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n\r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n\r\n fieldsConfig() {\r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n GlobalService.debugLog(\"fieldsConfig - form\", this.form);\r\n this.loader = true;\r\n }\r\n\r\n /**\r\n * Metodo per creare nell'oggetto Record le proprietà mancanti rispetto ai campi che compongono la form.\r\n */\r\n private createRecordProperties() {\r\n const recordProperties: Array<string> = Object.keys(this.record);\r\n this.form.Fields.forEach((field) => {\r\n if (!recordProperties.find((p) => p === field.Name)) {\r\n this.record[field.Name] = null;\r\n }\r\n });\r\n if (this.form.InnerForms && this.form.InnerForms.length > 0) {\r\n this.form.InnerForms.forEach((form) => {\r\n const arrayName: string = form.Name.split(\" \").join(\"_\");\r\n if (!recordProperties.find((p) => p === arrayName)) {\r\n this.record[arrayName] = [];\r\n }\r\n });\r\n }\r\n GlobalService.debugLog(\"createRecordProperties - form\", this.form);\r\n }\r\n\r\n /**\r\n * Metodo per riordinare i campi che compongono la form.\r\n */\r\n private reorderFormFields() {\r\n if (this.form.Fields && this.form.Fields.length > 0) {\r\n this.form.Fields.sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0);\r\n }\r\n GlobalService.debugLog(\"reorderFormFields - form\", this.form);\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createFormGroup() {\r\n this.formForm = this.utilityService.CreateFormFormGroup(\r\n this.form.Fields,\r\n (<Record>this.record),\r\n this.onlyView\r\n );\r\n GlobalService.debugLog(\"createFormGroup - form\", this.form);\r\n }\r\n\r\n /**\r\n * Metodo per creare i gruppi in cui raggruppare i campi della form in base\r\n * a come è stata configurata dall'utente.\r\n */\r\n private createFieldGroups() {\r\n this.form.FormFieldsGroups.sort((a, b) => a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0)\r\n .map((g) => g.Name)\r\n .forEach((groupName) => {\r\n this.fieldGroups[groupName] = this.form.Fields.filter(\r\n (f) => f.FieldGroup == groupName\r\n );\r\n });\r\n GlobalService.debugLog(\"createFieldGroups - form\", this.form);\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createHTMLreadableValues(record: Record) {\r\n GlobalService.debugLog(\"createHTMLreadableValues - record\", record);\r\n GlobalService.debugLog(\"createHTMLreadableValues - form\", this.form);\r\n\r\n var formnames = new Array<string>();\r\n this.form.Fields.forEach((field) => {formnames.push(field.Name);});\r\n GlobalService.debugLog(\"createHTMLreadableValues - form fields names\", formnames);\r\n\r\n // alert(\"continue for values?\")\r\n\r\n let outputValuesArray: Array<any> = this.getResponseValues(record, this.form);\r\n \r\n GlobalService.debugLog(\"createHTMLreadableValues - outputValuesArray\", outputValuesArray);\r\n\r\n // alert(\"continue for templates?\")\r\n let template: string = this.getResponseTemplate(record, this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n \r\n GlobalService.debugLog(\"createHTMLreadableValues - template\", template);\r\n // alert(\"continue for output?\")\r\n const regex = /##([\\w]+)##/g;\r\n const output = this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex)\r\n\r\n GlobalService.debugLog(\"createHTMLreadableValues - output\", output);\r\n // alert(\"continue for ending?\")\r\n return output; // oggetto che conterrà l'output elaborato \r\n\r\n }\r\n\r\n private stringToValuePairs(valueString: string) {\r\n const valuePairs: { [key: string]: string } = {};\r\n const keyvals = valueString.split(\";\");\r\n keyvals.forEach((x) => {\r\n const parts = x.split(\"|\");\r\n if(parts.length == 1){\r\n valuePairs[parts[0].trim()] = parts[0].trim();\r\n } else if (parts.length > 1){\r\n valuePairs[parts[0].trim()] = parts[1].trim();\r\n }\r\n })\r\n return valuePairs;\r\n }\r\n\r\n private getResponseValues(record: Record, form: Form): Array<any> {\r\n let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n // GlobalService.debugLog(\"(record).Values\", record);\r\n\r\n form.Fields.forEach(\r\n (field) => {\r\n try {\r\n //GlobalService.debugLog(\"getResponseValues field\", field);\r\n // let foundObject = record.find(\r\n // (obj) => obj === field.Name\r\n // );\r\n let foundObject = record[field.Name];\r\n\r\n // gestire caso fieldtype 8 [elenco generico]\r\n // fare un eval per popolare i valuePairs se è presente una formula\r\n // prendere la label corretta\r\n ////////////////////////////////////////////////////////////////////////////////\r\n if (field.FieldType == FieldTypeEnum[\"Elenco generico\"]) {\r\n if (field.Formula != null && field.Formula) {\r\n // aggiungo a valuepairs i valori calcolati\r\n (<ListValueField>foundObject).ValuePairs = (<ListValueField>foundObject).ValuePairs ? (<ListValueField>foundObject).ValuePairs : {};\r\n var temp = UtilityHelperService.EvaluateFieldFormula(\r\n field.Formula,\r\n record,\r\n null\r\n );\r\n for (let key2 in temp) {\r\n if (UtilityHelperService.isNumeric(temp[key2])) {\r\n (<ListValueField>field).ValuePairs[Number(key2)] = temp[key2];\r\n } else {\r\n (<ListValueField>field).ValuePairs[key2] = temp[key2];\r\n }\r\n }\r\n outputValuesArray[field.Name] = (<ListValueField>field).ValuePairs[record[field.Name]];\r\n } else if ((<ListValueField>field).ValuePairs != null && (<ListValueField>field).ValuePairs.length > 0) {\r\n // va bene così\r\n } else if ((<ListValueField>field).ValueString != null && (<ListValueField>field).ValueString != \"\") {\r\n // va presa la strigna e rimappata nel diario\r\n (<ListValueField>field).ValuePairs = this.stringToValuePairs((<ListValueField>field).ValueString);\r\n }\r\n\r\n let inverted = {};\r\n //GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>field).ValuePairs);\r\n // ValuePairs: {Si: 'Si', No: 'No'}\r\n for (let key in (<ListValueField>field).ValuePairs) {\r\n inverted[(<ListValueField>field).ValuePairs[key]] = key;\r\n }\r\n (<ListValueField>field).ValuePairs = inverted;\r\n if(record[field.Name] != null && (<ListValueField>field).IsMultiChoiche){\r\n let value = \"\";\r\n record[field.Name].forEach((element, i) => {\r\n value += (<ListValueField>field).ValuePairs[element];\r\n value += i == record[field.Name].length -1 ? \"\": \", \"\r\n });\r\n outputValuesArray[field.Name] = value;\r\n } else {\r\n outputValuesArray[field.Name] = (<ListValueField>field).ValuePairs[record[field.Name]];\r\n }\r\n //console.log(\"outputValuesArray\", outputValuesArray)\r\n\r\n } else {\r\n // GlobalService.debugLog(\"record[fieldName]\", record[field.Name]);\r\n outputValuesArray[field.Name] = record[field.Name];\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n )\r\n\r\n\r\n // for (let fieldName in record) {\r\n // try {\r\n // // fieldName è il nome del campo\r\n // // PREPARO VARIABILI VALORI CORRETTI\r\n // let foundObject = form.Fields.find(\r\n // (obj) => {\r\n // if (fieldName == \"ID\") {\r\n // GlobalService.debugLog(\"obj\", obj);\r\n // GlobalService.debugLog(\"fieldName\", fieldName);\r\n // }\r\n\r\n // return obj.Name === fieldName\r\n // }\r\n // );\r\n // GlobalService.debugLog(\"fieldName\", fieldName);\r\n // GlobalService.debugLog(\"foundObject\", foundObject);\r\n // // gestire caso fieldtype 8 [elenco generico]\r\n // // fare un eval per popolare i valuePairs se è presente una formula\r\n // // prendere la label corretta\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) {\r\n // if (foundObject.Formula) {\r\n // // aggiungo a valuepairs i valori calcolati\r\n // // (<ListValueField>foundObject).ValuePairs = {};\r\n // var temp = UtilityHelperService.EvaluateFieldFormula(\r\n // foundObject.Formula,\r\n // record,\r\n // null\r\n // );\r\n // GlobalService.debugLog(\"temp\", temp);\r\n // for (let key2 in temp) {\r\n // if (UtilityHelperService.isNumeric(temp[key2])) {\r\n // (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n // } else {\r\n // (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n // }\r\n // }\r\n // GlobalService.debugLog(\"(record).Values[fieldName]\", record[fieldName]);\r\n // GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[record[fieldName]]\", (<ListValueField>foundObject).ValuePairs[record[fieldName]]);\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n // }\r\n // let inverted = {};\r\n // GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>foundObject).ValuePairs);\r\n // for (let key in (<ListValueField>foundObject).ValuePairs) {\r\n // inverted[(<ListValueField>foundObject).ValuePairs[key]] = key;\r\n // }\r\n // (<ListValueField>foundObject).ValuePairs = inverted;\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n // } else {\r\n // GlobalService.debugLog(\"record[fieldName]\", record[fieldName]);\r\n // outputValuesArray[fieldName] = record[fieldName];\r\n // }\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // } catch (e) {\r\n // console.error(e);\r\n // }\r\n // }\r\n GlobalService.debugLog(\"outputValuesArray 1\", outputValuesArray);\r\n // cancello i valori indefiniti o nulli\r\n for (const chiave in outputValuesArray) {\r\n if (outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n outputValuesArray[chiave] = ''\r\n }\r\n return outputValuesArray;\r\n }\r\n\r\n private getResponseTemplate(record: Record, form: Form): string {\r\n let template: string = '<div class=\"row\">';\r\n // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n form.Fields.forEach((baseField: BaseField) => {\r\n GlobalService.debugLog('getResposneTemplate - pre - field', baseField)\r\n if(baseField.AnswerStyle == null || baseField.AnswerStyle == undefined){\r\n baseField.AnswerStyle = new AnswerStyle();\r\n baseField.AnswerStyle.ColSpanSizes = baseField.ColSpanSizes;\r\n baseField.AnswerStyle.FieldstyleCSS = baseField.FieldstyleCSS;\r\n baseField.AnswerStyle.LabelstyleCSS = baseField.LabelstyleCSS;\r\n if(baseField.VisibleIf){\r\n baseField.AnswerStyle.InListView = UtilityHelperService.EvaluateFieldFormula(baseField.VisibleIf, record, null);\r\n }else{\r\n baseField.AnswerStyle.InListView = baseField.InListView;\r\n baseField.AnswerStyle.VisibleIf = baseField.VisibleIf;\r\n }\r\n } \r\n if(baseField.AnswerStyle.VisibleIf){\r\n const visibility = UtilityHelperService.EvaluateFieldFormula(baseField.AnswerStyle.VisibleIf, record, null)\r\n GlobalService.debugLog(\"EvaluateFieldFormula - visibility\", visibility);\r\n baseField.AnswerStyle.InListView = (visibility == true) ? true : false ;\r\n }\r\n if(baseField.AnswerStyle.InListView){\r\n template += '<div class=\"'+ this.utilityService.getFieldAnswerStyleClass(baseField) +'\"> '+\r\n ' <span class=\"dynaform-question\" style=\"' + baseField.AnswerStyle.LabelstyleCSS + '\">' + baseField.Description + ':</span>' + \r\n ' <span class=\"dynaform-response\" style=\"' + baseField.AnswerStyle.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span>' + \r\n '</div> \\n ';\r\n }\r\n GlobalService.debugLog('getResposneTemplate - post - field', baseField)\r\n });\r\n // (attualmente non esiste il concetto di tempate di output)\r\n template += '</div>';\r\n return template;\r\n }\r\n\r\n private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n return template.replace(regex, (match, group) => {\r\n return <string>outputValuesArray[group];\r\n });\r\n }\r\n\r\n}\r\n","<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <span>{{form.Name}}</span>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n <!-- VISUALIZZAZIONE A STEPPER -->\r\n <mat-horizontal-stepper linear *ngIf=\"form.FormScalarType == FormScalarTypeEnum['A step']\"\r\n class=\"add-form-record-stepper\">\r\n <mat-step *ngFor=\"let group of form.FormFieldsGroups; let i = index; let first = first; let last = last\">\r\n <ng-template matStepLabel>\r\n {{group.Name}}\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end add-form-record-buttons\">\r\n <button *ngIf=\"!first\" class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button *ngIf=\"!last\" class=\"button-next\" color=\"primary\" mat-raised-button matStepperNext>\r\n Successivo\r\n </button>\r\n <button *ngIf=\"last && showSaveButton\" (click)=\"saveOrExitForm(false)\" class=\"button-next\"\r\n color=\"primary\" mat-raised-button>\r\n Salva\r\n </button>\r\n </div>\r\n\r\n </mat-step>\r\n </mat-horizontal-stepper>\r\n\r\n <!-- VISUALIZZAZIONE A TAB -->\r\n <mat-tab-group *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In tab']\" class=\"add-form-record-tab\">\r\n <mat-tab *ngFor=\"let group of form.FormFieldsGroups\" [label]=\"group.Name\">\r\n <div class=\"mt-3\">\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- VISUALIZZAZIONE AD ACCORDION -->\r\n <mat-accordion multi *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In accordion']\"\r\n class=\"add-form-record-accordion\">\r\n <mat-expansion-panel *ngFor=\"let group of form.FormFieldsGroups\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{group.Name}}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </form>\r\n\r\n <div class=\"row mt-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"mr-2\" mat-raised-button type=\"button\" *ngIf=\"showBackButton\" (click)=\"saveOrExitForm(true)\">\r\n Annulla\r\n </button>\r\n <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showSaveButton\"\r\n (click)=\"saveOrExitForm(false)\" [disabled]=\"formForm.invalid || formForm.disabled\">\r\n Salva\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"!field.InListView\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-field-fix #fieldTemplate [debugMode]=\"debugMode\" [field]=\"field\" [form]=\"form\" [record]=\"record\"\r\n (recordChange)=\"onRecordChange()\">\r\n </dynamic-module-field-fix>\r\n </div>\r\n </div>\r\n</ng-template>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n} from \"@angular/core\";\r\nimport { UntypedFormGroup } from \"@angular/forms\";\r\nimport { DynamicModuleCompileConfig } from \"../../../../models/dynamicModuleCompileConfig.model\";\r\nimport { BaseField, FieldTypeEnum } from \"../../../../models/baseField.model\";\r\nimport { Form, FormScalarTypeEnum } from \"../../../../models/form.model\";\r\nimport { DynRecord, Record } from \"../../../../models/record.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleFieldFixComponent } from \"../../dynamic-module-field-fix/dynamic-module-field.component\";\r\nimport {\r\n EndPointConfiguration,\r\n ParamTypeEnum,\r\n} from \"./../../../../models/endPointConfiguration.model\";\r\nimport { ListValueField } from \"./../../../../models/fields/listValueField.model\";\r\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\n// import { DynamicModuleFieldComponent } from '../../dynamic-module-field/dynamic-module-field.component';\r\n\r\n@Component({\r\n selector: \"view-form-record\",\r\n templateUrl: \"./view-form-record.component.html\",\r\n styleUrls: [\"./view-form-record.component.scss\"],\r\n})\r\nexport class ViewFormRecordComponent implements OnInit {\r\n\r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element)\r\n }\r\n }\r\n\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() record: string | DynRecord;\r\n @Input() showBackButton = true;\r\n\r\n outputString: SafeHtml = \"\";\r\n form: Form;\r\n loader: boolean = false;\r\n // per controllare che il campo non sia una scelta multipla\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n @Output() goBackEvent: EventEmitter<null> = new EventEmitter<null>();\r\n\r\n @ViewChildren(\"fieldTemplate\")\r\n fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n\r\n constructor(\r\n public utilityService: UtilityHelperService,\r\n public domSanitizer: DomSanitizer) {}\r\n\r\n ngOnInit(): void {\r\n GlobalService.debugLog('this.record', this.record)\r\n if (typeof this.record === \"string\") {\r\n // allora è un ID\r\n this.getRecordByID();\r\n } else {\r\n // il record viene passato come tale\r\n // (<Record>this.record).EntID = \"3\";\r\n // (<Record>this.record).Version;\r\n // this.getFormByIDandVersion();\r\n this.createOutput()\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n goBack() {\r\n this.goBackEvent.emit();\r\n }\r\n\r\n // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n getRecordByID() {\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.record,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.record = new DynRecord();\r\n\r\n (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n this.record.ID = res.ID;\r\n this.record.EntID = res.EntID;\r\n this.record.userID = res.userID;\r\n this.record.Version = res.Version;\r\n this.record.Values = JSON.parse(res.SerializedValues);\r\n this.record.HTMLreadableValues = res.HTMLreadableValues;\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // this.loader = true;\r\n GlobalService.debugLog(\"record\", this.record);\r\n this.createOutput()\r\n // this.getFormByIDandVersion();\r\n }\r\n );\r\n }\r\n getFormByIDandVersion() {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: (<DynRecord>this.record).EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: (<DynRecord>this.record).Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n GlobalService.debugLog(\"form\", this.form);\r\n this.createOutput();\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createOutput() {\r\n this.outputString = this.domSanitizer.bypassSecurityTrustHtml((<DynRecord>this.record).HTMLreadableValues);\r\n this.loader = true;\r\n return\r\n // let outputValuesArray: Array<any> = this.getResponseValues(<DynRecord>this.record, this.form);\r\n // GlobalService.debugLog(\"outputValuesArray\", outputValuesArray);\r\n \r\n // let template: string = this.getResponseTemplate(this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n // GlobalService.debugLog(\"template\", template);\r\n\r\n // const regex = /##([\\w]+)##/g;\r\n // const outputString = this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex); // oggetto che conterrà l'output elaborato \r\n // this.outputString = this.domSanitizer.bypassSecurityTrustHtml(outputString);\r\n // GlobalService.debugLog(\"outputString\", this.outputString);\r\n\r\n // STAMPO A SCHERMO\r\n // this.loader = true;\r\n }\r\n\r\n // private getResponseValues(record: Record, form: Form ): Array<any> {\r\n // let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n // //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n // for (let fieldName in (record).Values) {\r\n // try {\r\n // // fieldName è il nome del campo\r\n // // PREPARO VARIABILI VALORI CORRETTI\r\n // let foundObject = form.Fields.find(\r\n // (obj) => obj.Name === fieldName\r\n // );\r\n // GlobalService.debugLog(\"fieldName\", fieldName);\r\n // GlobalService.debugLog(\"foundObject\", foundObject);\r\n // // gestire caso fieldtype 8 [elenco generico]\r\n // // fare un eval per popolare i valuePairs se è presente una formula\r\n // // prendere la label corretta\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) \r\n // {\r\n // if (foundObject.Formula) \r\n // {\r\n // // aggiungo a valuepairs i valori calcolati\r\n // // (<ListValueField>foundObject).ValuePairs = {};\r\n // var temp = UtilityHelperService.EvaluateFieldFormula(\r\n // foundObject.Formula,\r\n // record,\r\n // null\r\n // );\r\n // for (let key2 in temp) {\r\n // if (UtilityHelperService.isNumeric(temp[key2])) \r\n // {\r\n // (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n // } else \r\n // {\r\n // (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n // }\r\n // }\r\n // GlobalService.debugLog(\"(record).Values[fieldName]\", (record).Values[fieldName]);\r\n // GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]\", (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]);\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];\r\n // }\r\n // let inverted = {};\r\n // for (let key in (<ListValueField>foundObject).ValuePairs) \r\n // { \r\n // inverted[(<ListValueField>foundObject).ValuePairs[key]] = key; \r\n // }\r\n // (<ListValueField>foundObject).ValuePairs = inverted;\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];\r\n // } else \r\n // {\r\n // GlobalService.debugLog(\"(record).Values[fieldName]\", (record).Values[fieldName]);\r\n // outputValuesArray[fieldName] = (record).Values[fieldName];\r\n // }\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // } catch (e) {\r\n // console.error(e);\r\n // }\r\n // }\r\n // // cancello i valori indefiniti o nulli\r\n // for(const chiave in outputValuesArray){\r\n // if(outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n // outputValuesArray[chiave] = ''\r\n // }\r\n // return outputValuesArray;\r\n // }\r\n\r\n // private getResponseTemplate(form: Form): string {\r\n // let template: string = \"\";\r\n // // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n // form.Fields.forEach((baseField: BaseField) => {\r\n // template += '<span style=\"' + baseField.LabelstyleCSS + '\">' + baseField.Description + ':</span> <span style=\"' + baseField.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span> \\n <br> ';\r\n // });\r\n // // (attualmente non esiste il concetto di tempate di output)\r\n // return template;\r\n // }\r\n\r\n // private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n // return template.replace(regex, (match, group) => {\r\n // return <string>outputValuesArray[group];\r\n // });\r\n // }\r\n\r\n}\r\n","<div *ngIf=\"loader\">\r\n <div id=\"output-string\" [innerHTML]=\"outputString\"></div>\r\n <div class=\"row mt-2\" *ngIf=\"showBackButton\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button\r\n class=\"mr-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"goBack()\"\r\n >\r\n Indietro\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { DynamicModuleCompileConfig } from '../../../../../models/dynamicModuleCompileConfig.model';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../../../models/endPointConfiguration.model';\r\nimport { Form } from '../../../../../models/form.model';\r\nimport { DynRecord, Record } from \"../../../../../models/record.model\";\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { single } from 'rxjs';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\n\r\ntype PageState = null | 'visualizzaContenuto' | 'modificaContenuto'\r\n\r\n@Component({\r\n selector: 'lib-single-record',\r\n templateUrl: './single-record.component.html',\r\n styleUrls: ['./single-record.component.scss']\r\n})\r\nexport class SingleRecordComponent implements OnInit {\r\n\r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element)\r\n }\r\n }\r\n \r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() record;\r\n @Input() pageState: PageState = 'visualizzaContenuto';\r\n @Input() userID: string;\r\n @Input() form: Form;\r\n @Input() showBackButton = true;\r\n @Input() outCompileConfigurations: DynamicModuleCompileConfig;\r\n @Input() onlyView: boolean = true;\r\n\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n\r\n loaded = false;\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n GlobalService.debugLog(\"single-record - outCompileConfigurations\", this.outCompileConfigurations)\r\n this.loaded = true; \r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(record: Record) {\r\n GlobalService.debugLog('single-record saveRecordEvent', record)\r\n this.saveRecordEvent.emit(record);\r\n }\r\n onAfterSaveRecord(event) {\r\n GlobalService.debugLog('single-record afterSaveRecordEvent', event)\r\n this.afterSaveRecordEvent.emit(event);\r\n }\r\n \r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n // onAddViewEditRecord2(event: { record: Record; onlyView: boolean }) {\r\n // this.loaded = false;\r\n // this.record = null;\r\n\r\n // this.onlyView = event.onlyView;\r\n\r\n // this.outCompileConfigurations.showBackButton = false;\r\n // this.outCompileConfigurations.showSaveButton = !event.onlyView;\r\n // this.outCompileConfigurations.showTitle = false;\r\n\r\n // if (event != null) {\r\n // if (\r\n // this.endPointConfiguration &&\r\n // this.endPointConfiguration.Records &&\r\n // this.endPointConfiguration.Records.GetByIDEndPoint\r\n // ) {\r\n // // preparo la versione corretta del form\r\n // var dynamicModuleParams = [\r\n // {\r\n // ParamName: \"EntID\",\r\n // ParamValue: event.record.EntID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // {\r\n // ParamName: \"Version\",\r\n // ParamValue: event.record.Version,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // ];\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Form) => {\r\n // this.form = res;\r\n\r\n // // preparo i dati del record\r\n // var dynamicRecordParams = [\r\n // {\r\n // ParamName: \"id\",\r\n // ParamValue: event.record.ID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // ];\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Records.GetByIDEndPoint,\r\n // dynamicRecordParams,\r\n // (res: DynRecord) => {\r\n // this.record = JSON.parse(res.SerializedValues);\r\n // this.record.ID = res.ID;\r\n // this.record.EntID = res.EntID;\r\n // this.record.userID = res.userID;\r\n // this.record.Version = res.Version;\r\n // this.record.HTMLreadableValues = res.HTMLreadableValues\r\n\r\n // this.loaded = true;\r\n // }\r\n // );\r\n // }\r\n // );\r\n // } else {\r\n // this.record = JSON.parse(JSON.stringify(event.record));\r\n // this.loaded = true;\r\n // }\r\n // } else {\r\n // const dynamicModuleParams: Array<EndPointDataParams> =\r\n // new Array<EndPointDataParams>();\r\n // dynamicModuleParams.push({\r\n // ParamName: \"id\",\r\n // ParamValue: this.form.ID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // });\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Form) => {\r\n // this.form = res;\r\n // this.record = null;\r\n // this.onlyView = false;\r\n // this.loaded = true;\r\n // },\r\n // (err) => {}\r\n // );\r\n\r\n // // this.record = null;\r\n // // this.onlyView = false;\r\n // // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // }\r\n // }\r\n \r\n}\r\n","<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n <view-form-record \r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"record\" \r\n [showBackButton]=\"false\">\r\n </view-form-record>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n <add-form-record\r\n [debugMode]=\"debugMode\"\r\n [onlyView]=\"onlyView\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [record]=\"record\"\r\n\r\n [additionalParams]=\"outCompileConfigurations.additionalParams\"\r\n [configurations]=\"outCompileConfigurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n </ng-container>\r\n\r\n</ng-container>","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n SimpleChanges,\r\n ChangeDetectorRef,\r\n TemplateRef,\r\n} from \"@angular/core\";\r\nimport {\r\n ConfigColumn,\r\n EqpTableComponent\r\n} from \"@eqproject/eqp-table\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../../models/record.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynamicModuleListConfig } from \"../../../../models/dynamicModuleListConfig.model\";\r\nimport { DynamicModuleCompileConfig } from \"./../../../..//models/dynamicModuleCompileConfig.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"./../../../../models/endPointConfiguration.model\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Router } from \"@angular/router\";\r\n\r\ntype Panel = { \r\n record: Record, \r\n isOpen: boolean, \r\n pageState: string,\r\n highlighted: boolean\r\n}\r\n\r\n@Component({\r\n selector: \"list-view-form-record\",\r\n templateUrl: \"list-view-form-record.component.html\",\r\n styleUrls: [\"./list-view-form-record.component.scss\"],\r\n})\r\nexport class ListViewFormRecordComponent implements OnInit, OnChanges {\r\n \r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element)\r\n }\r\n }\r\n\r\n @Input() configurations: DynamicModuleListConfig;\r\n @Input() compileConfigurations: DynamicModuleCompileConfig;\r\n outCompileConfigurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() formID: string;\r\n @Input() form: Form = null;\r\n @Input() defaultListViewFunction: Function = null;\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n @Input() onlyView: boolean = true;\r\n @Input() records: Array<DynRecord> = null;\r\n @Input() highlightFilter: any = null;\r\n\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault =\r\n new DynamicModuleListFormRecordActionsDefault();\r\n showTitle = true;\r\n // values: Array<Record>;\r\n test = false;\r\n selectedRecord: Record;\r\n loader: boolean;\r\n panelOpenState: boolean[] = new Array<boolean>();\r\n public selectedIndex: number | null = null;\r\n visualizzaContenuto = false;\r\n modificaContenuto = false;\r\n\r\n @ViewChild(\"tableRecords\", { static: true }) tableRecords: EqpTableComponent;\r\n\r\n columns = new Array<ConfigColumn>();\r\n panels: Array<Panel>\r\n buttons: Array<RecordButton> = new Array<RecordButton>();\r\n popupLoader: boolean = false;\r\n\r\n @ViewChild(\"openAddDialog\", { static: false }) openAddDialog: TemplateRef<any>;\r\n openAddDialogRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n\r\n // add new\r\n @Output() onAddViewEditRecord: EventEmitter<{\r\n record: Record;\r\n onlyView: boolean;\r\n }> = new EventEmitter<{ record: Record; onlyView: boolean }>();\r\n\r\n @Output() onDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService,\r\n private changeDetector: ChangeDetectorRef,\r\n private dialog: MatDialog,\r\n private router: Router\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n // this.panelOpenState = [\r\n // ...Array(this.configurations.values.length + 1),\r\n // ].map(() => false);\r\n\r\n this.defaultListActions = this.configurations.defaultListActions;\r\n this.showTitle = this.configurations.showTitle;\r\n\r\n this.outCompileConfigurations = new DynamicModuleCompileConfig(\r\n this.compileConfigurations.showTitle,\r\n this.compileConfigurations.showSaveButton,\r\n this.compileConfigurations.showBackButton,\r\n this.compileConfigurations.userID,\r\n this.compileConfigurations.additionalParams,\r\n this.compileConfigurations.prefilterParams,\r\n );\r\n //GlobalService.debugLog(\"list-view - outcompileConfigurations \", this.outCompileConfigurations);\r\n this.getFormByID();\r\n this.configureListviewButtons();\r\n\r\n // this.outCompileConfigurations.userID;\r\n // this.values = this.configurations.values\r\n // this.configureColumns();\r\n\r\n\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //GlobalService.debugLog('ngOnChanges', changes);\r\n\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (\r\n changes[\"configurations\"] != undefined &&\r\n changes[\"configurations\"].firstChange == false\r\n ) {\r\n this.configurations.values = changes[\"configurations\"].currentValue;\r\n this.reloadTables();\r\n }\r\n }\r\n\r\n onOpening(indice: number) {\r\n this.selectedIndex = indice;\r\n }\r\n\r\n configureListviewButtons(){\r\n this.buttons = [\r\n\r\n {\r\n \"icon\": \"visibility\",\r\n \"text\": \"Visualizza\",\r\n \"visible\": this.defaultListActions.view && (this.defaultListActions.edit || this.defaultListActions.duplicate || this.defaultListActions.delete),\r\n \"extraClass\": \"view-button-icon\",\r\n \"fn\": (panel,i,event) => {\r\n this.viewRecord(panel, true, i, event);\r\n }\r\n },\r\n {\r\n \"icon\": \"edit\",\r\n \"text\": \"Modifica\",\r\n \"visible\": this.defaultListActions.edit,\r\n \"extraClass\": \"edit-button-icon\",\r\n \"fn\": (panel,i,event) => {\r\n this.EditRecord(panel, false, i, event);\r\n }\r\n },\r\n {\r\n \"icon\": \"file_copy\",\r\n \"text\": \"Duplica\",\r\n \"visible\": this.defaultListActions.duplicate,\r\n \"extraClass\": \"duplicate-button-icon\",\r\n \"fn\": (panel,i,event) => {\r\n this.duplicateRecord(panel, false, i, event);\r\n }\r\n },\r\n {\r\n \"icon\": \"delete\",\r\n \"text\": \"Cancella\",\r\n \"visible\": this.defaultListActions.delete,\r\n \"extraClass\": \"delete-button-icon\",\r\n \"fn\": (panel,i,event) => {\r\n this.deleteRecord(panel, event);\r\n }\r\n }\r\n\r\n ]\r\n this.buttons = this.buttons.concat(this.externalButtons).filter(x => x.visible);\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n if (this.form == null) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.configureColumns();\r\n },\r\n (err) => {}\r\n );\r\n } else {\r\n this.configureColumns();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per configurare le colonne della eqp-table.\r\n */\r\n private configureColumns() {\r\n // this.createAdditionalActions();\r\n // this.createColumnsFromFormFields();\r\n if (this.records == null){\r\n this.getRecordsByFormID();\r\n } else {\r\n //GlobalService.debugLog('Records Exists', this.records);\r\n this.generateAnswersArray(this.records);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n * a partire dai quali vengono ricreati i Record usati nel client.\r\n */\r\n async getRecordsByFormID() {\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n if (\r\n this.configurations.userID == null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n ) {\r\n // se non conosco l'utente\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n //GlobalService.debugLog('GetByFormIDEndPoint', res)\r\n this.generateAnswersArray(res);\r\n }\r\n );\r\n } else if (\r\n this.configurations.userID != null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint\r\n ) {\r\n // se conosco l'utente\r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: this.configurations.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n //GlobalService.debugLog('GetAllByEntAndUserIDEndPoint', res)\r\n this.generateAnswersArray(res);\r\n }\r\n );\r\n } else {\r\n console.error(\"controllare le configurazioni dell'endpoint\");\r\n }\r\n }\r\n\r\n private generateAnswersArray(res: Array<DynRecord>){\r\n this.configurations.values = new Array<Record>();\r\n this.panels = new Array<Panel>();\r\n res.forEach((r) => {\r\n //GlobalService.debugLog(\"generateAnswersArray\", r)\r\n var tmpRec: Record = new Record();\r\n //GlobalService.debugLog(\"SerializedValues\", r.SerializedValues)\r\n tmpRec = JSON.parse(r.SerializedValues);\r\n tmpRec.ID = r.ID;\r\n tmpRec.EntID = r.EntID;\r\n tmpRec.Version = r.Version;\r\n tmpRec.userID = r.userID;\r\n tmpRec.AnswerDate = r.AnswerDate;\r\n tmpRec.HTMLreadableValues = r.HTMLreadableValues;\r\n //GlobalService.debugLog(\"AdditionalParams\", r.AdditionalParams)\r\n tmpRec.AdditionalParams = r.AdditionalParams != \"\" && r.AdditionalParams != null ? JSON.parse(r.AdditionalParams) : \"\";\r\n this.configurations.values.push(tmpRec);\r\n\r\n var isHighlighted = false;\r\n if (this.highlightFilter != null){\r\n isHighlighted = true;\r\n Object.keys(this.highlightFilter).forEach((filter) => {\r\n if (!tmpRec.AdditionalParams[filter] || tmpRec.AdditionalParams[filter] != this.highlightFilter[filter]){\r\n isHighlighted = false;\r\n }\r\n });\r\n }\r\n\r\n this.panels.push({record: tmpRec, isOpen: false, pageState: null, highlighted: isHighlighted});\r\n });\r\n\r\n this.loader = true;\r\n setTimeout((_) => {\r\n this.changeDetector.detectChanges();\r\n }, 0); // refresh ui\r\n }\r\n\r\n togglePanel(panel: any, record: Record) {\r\n //GlobalService.debugLog('togglePanel')\r\n if(this.defaultListViewFunction != null){\r\n //GlobalService.debugLog('defaultListViewFunction', record)\r\n this.defaultListViewFunction(record);\r\n return;\r\n }\r\n if (!panel.isOpen) {\r\n panel.isOpen = true;\r\n panel.pageState = 'visualizzaContenuto';\r\n // Simula un calcolo asincrono\r\n // setTimeout(() => {\r\n // }, 1000);\r\n } else {\r\n panel.isOpen = false;\r\n panel.pageState= null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiungere nella colonna \"action\" della eqp-table le azioni sui record\r\n * definite dall'utente all'interno della Form.\r\n */\r\n // private createAdditionalActions() {\r\n // if (this.form.ActionsOnRecord && this.form.ActionsOnRecord.length > 0) {\r\n // this.form.ActionsOnRecord.sort((a, b) =>\r\n // a.OrdinalPosition > b.OrdinalPosition\r\n // ? 1\r\n // : b.OrdinalPosition > a.OrdinalPosition\r\n // ? -1\r\n // : 0\r\n // ).forEach((action) => {\r\n // this.columns\r\n // .find((c) => c.key === \"action\")\r\n // .actions.push({\r\n // name: action.Name,\r\n // icon: action.Icon,\r\n // fn: (element, index, col) => {\r\n // const rec = element;\r\n // const ctx = UtilityHelperService.context;\r\n // eval(action.Action);\r\n // // TODO: salvare le modifiche\r\n // },\r\n // });\r\n // });\r\n // }\r\n // }\r\n\r\n /**\r\n * Metodo che scatena l'evento di Output per mostrare o modificare il record\r\n * selezionato sulla eqp-table.\r\n * @param record Record da visualizzare o modificare selezionato sulla eqp-table.\r\n * @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.\r\n */\r\n viewOrEditRecord(record: Record, onlyView: boolean, i) {\r\n //GlobalService.debugLog('viewOrEditRecord')\r\n this.loader = false;\r\n this.onAddViewEditRecord2({ record, onlyView });\r\n this.panelOpenState.map(() => false);\r\n this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n // this.onAddViewEditRecord.emit({ record, onlyView });\r\n } \r\n viewRecord(panel: Panel, onlyView: boolean, i, ev: Event) { \r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n //GlobalService.debugLog('viewRecord')\r\n let record = panel.record\r\n this.visualizzaContenuto = true;\r\n this.modificaContenuto = false;\r\n this.loader = false;\r\n // this.onAddViewEditRecord2({ record, onlyView });\r\n if (panel.pageState == 'visualizzaContenuto') {\r\n panel.isOpen = false;\r\n panel.pageState= null;\r\n } else {\r\n panel.isOpen = true;\r\n panel.pageState = 'visualizzaContenuto';\r\n }\r\n this.panelOpenState.map(() => false);\r\n this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n // this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n EditRecord(panel: Panel, onlyView: boolean, i, ev: Event) { \r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n //GlobalService.debugLog('EditRecord')\r\n\r\n let record = panel.record\r\n this.visualizzaContenuto = false;\r\n this.modificaContenuto = true;\r\n this.loader = false;\r\n // this.onAddViewEditRecord2({ record, onlyView });\r\n if (panel.pageState == 'modificaContenuto') {\r\n panel.isOpen = false;\r\n panel.pageState= null;\r\n } else {\r\n panel.isOpen = true;\r\n panel.pageState = 'modificaContenuto';\r\n }\r\n this.panelOpenState.map(() => false);\r\n this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n // this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n\r\n externalCallback(ev: Event, callback: Function, record: any){\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n callback(record);\r\n }\r\n\r\n /**\r\n * Metodo per duplicare un record della form.\r\n * @param record Record da duplicare.\r\n */\r\n duplicateRecord(panel: Panel, onlyView: boolean, i, ev: Event) { \r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n \r\n //GlobalService.debugLog('duplicateRecord');\r\n\r\n panel.record.ID = \"\";\r\n this.selectedRecord = panel.record;\r\n\r\n console.log(\"this.selectedRecord\",this.selectedRecord);\r\n\r\n this.openAddDialogRef = this.dialog.open(this.openAddDialog, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n minWidth: \"32rem\",\r\n minHeight: \"100px\",\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Metodo per eliminare un record dalla lista.\r\n * @param record Record da eliminare selezionato sulla eqp-table.\r\n */\r\n deleteRecord(record: Record, ev: Event) { \r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n this.onDeleteRecord.emit(record);\r\n }\r\n\r\n /**\r\n * Metodo per creare la configurazione delle colonne per la eqp-table.\r\n * Individua i BaseField da mostrare e li usa per creare le ConfigColumn.\r\n * Le colonne vengono create per i BaseField con il flag InListView a TRUE\r\n * oppure, nel caso non siano stati specificati i campi da visualizzare,\r\n * seleziona i primi 6.\r\n */\r\n // private createColumnsFromFormFields() {\r\n // var fieldsForColumns: Array<BaseField>;\r\n // if (this.form.Fields.find((f) => f.InListView)) {\r\n // fieldsForColumns = this.form.Fields.filter((f) => f.InListView);\r\n // } else {\r\n // fieldsForColumns = this.form.Fields.filter((f) => f.OrdinalPosition < 6);\r\n // }\r\n // fieldsForColumns\r\n // .sort((a, b) =>\r\n // a.OrdinalPosition > b.OrdinalPosition\r\n // ? 1\r\n // : b.OrdinalPosition > a.OrdinalPosition\r\n // ? -1\r\n // : 0\r\n // )\r\n // .forEach((field) => {\r\n // this.columns.push(this.createFieldColumn(field));\r\n // });\r\n // }\r\n\r\n /**\r\n * Metodo per creare l'oggetto ConfigureColumn che rappresenta il BaseField passato in input.\r\n * @param field BaseField per cui creare la colonna nella eqp-table\r\n * @returns Restituisce una ConfigColumn per la eqp-table\r\n */\r\n // private createFieldColumn(field: BaseField): ConfigColumn {\r\n // var column: ConfigColumn = { key: field.Name, display: field.Label };\r\n // switch (field.FieldType) {\r\n // case FieldTypeEnum[\"Booleano\"]:\r\n // column.type = TypeColumn.Boolean;\r\n // column.booleanValues = {\r\n // false: '<i class=\"fa fa-times error-color\"></i>',\r\n // true: '<i class=\"fa fa-check success-color\"></i>',\r\n // };\r\n // column.styles = {\r\n // flex: \"0 0 7%\",\r\n // cellAlignment: CellAlignmentEnum.CENTER,\r\n // };\r\n // break;\r\n // case FieldTypeEnum[\"Data e/o ora\"]:\r\n // if (\r\n // (field as DateField).IsOnlyDate != DateTimeTypeEnum[\"Solo orario\"]\r\n // ) {\r\n // column.type = TypeColumn.Date;\r\n // if (\r\n // (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Data e ora\"]\r\n // ) {\r\n // column.format = \"dd/MM/yyyy HH:mm\";\r\n // } else if (\r\n // (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Solo data\"]\r\n // ) {\r\n // column.format = (field as DateField).DateFormat\r\n // ? (field as DateField).DateFormat.replace(\"DD\", \"dd\")\r\n // : \"dd/MM/yyyy\";\r\n // }\r\n // }\r\n // break;\r\n // case FieldTypeEnum[\"Campo numerico\"]:\r\n // if ((field as NumericField).CurrencySymbol) {\r\n // column.numberPipe = NumberColumnPipe.CURRENCY;\r\n // column.currencyPipeCode = (field as NumericField).CurrencySymbol;\r\n // } else if (!(field as NumericField).IsInteger) {\r\n // column.numberPipe = NumberColumnPipe.DECIMAL;\r\n // }\r\n // break;\r\n // case FieldTypeEnum[\"Allegato\"]:\r\n // case FieldTypeEnum[\"Immagine\"]:\r\n // column.value = (element: Record) => {\r\n // if (\r\n // (field as AttachmentField).IsMultiAttach ||\r\n // ((field as ImageField).AttachDefinition &&\r\n // (field as ImageField).AttachDefinition.IsMultiAttach)\r\n // ) {\r\n // return element[field.Name] != null && element[field.Name].length > 0\r\n // ? (element[field.Name] as Array<IAttachmentDTO>)\r\n // .map((a) => a.FileName)\r\n // .join(\", \")\r\n // : null;\r\n // } else {\r\n // return element[field.Name] != null && element[field.Name].length > 0\r\n // ? (element[field.Name] as Array<IAttachmentDTO>)[0].FileName\r\n // : null;\r\n // }\r\n // };\r\n // column.isSortable = false;\r\n // column.isSearchable = false;\r\n // break;\r\n // case FieldTypeEnum[\"Elenco generico\"]:\r\n // column.value = (element: Record) => {\r\n // if ((field as ListValueField).IsMultiChoiche) {\r\n // if (!element[field.Name] || element[field.Name].length == 0) {\r\n // return null;\r\n // } else {\r\n // return Object.keys((field as ListValueField).ValuePairs)\r\n // .filter((k) =>\r\n // element[field.Name].includes(\r\n // (field as ListValueField).ValuePairs[k]\r\n // )\r\n // )\r\n // .join(\", \");\r\n // }\r\n // } else {\r\n // return Object.keys((field as ListValueField).ValuePairs).find(\r\n // (k) =>\r\n // (field as ListValueField).ValuePairs[k] == element[field.Name]\r\n // );\r\n // }\r\n // };\r\n // column.isSortable = false;\r\n // column.isSearchable = false;\r\n // break;\r\n // case FieldTypeEnum[\"Lookup\"]:\r\n // // TODO\r\n // break;\r\n // }\r\n // return column;\r\n // }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della eqp-table.\r\n */\r\n private reloadTables() {\r\n if (this.tableRecords) {\r\n this.tableRecords.reloadDatatable();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(record: Record) {\r\n //GlobalService.debugLog('list-view-form-record save', record)\r\n this.saveRecordEvent.emit(record);\r\n }\r\n onAfterSaveRecord(event) {\r\n //GlobalService.debugLog('list-view-form-record aftersave', event)\r\n this.saveRecordEvent.emit(event);\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n onAddViewEditRecord2(event: { record: Record; onlyView: boolean }) {\r\n this.loader = false;\r\n this.selectedRecord = null;\r\n\r\n this.onlyView = event.onlyView;\r\n\r\n this.outCompileConfigurations.showBackButton = false;\r\n this.outCompileConfigurations.showSaveButton = !event.onlyView;\r\n this.outCompileConfigurations.showTitle = false;\r\n\r\n if (event != null) {\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByIDEndPoint\r\n ) {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: event.record.EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: event.record.Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: event.record.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.selectedRecord = JSON.parse(res.SerializedValues);\r\n this.selectedRecord.ID = res.ID;\r\n this.selectedRecord.EntID = res.EntID;\r\n this.selectedRecord.userID = res.userID;\r\n this.selectedRecord.Version = res.Version;\r\n\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n );\r\n } else {\r\n this.selectedRecord = JSON.parse(JSON.stringify(event.record));\r\n this.loader = true;\r\n }\r\n } else {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.selectedRecord = null;\r\n this.onlyView = false;\r\n this.loader = true;\r\n },\r\n (err) => {}\r\n );\r\n\r\n // this.selectedRecord = null;\r\n // this.onlyView = false;\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n }\r\n }\r\n\r\n \r\n openAddPopup(){\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.popupLoader = true;\r\n\r\n this.openAddDialogRef = this.dialog.open(this.openAddDialog, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n minWidth: \"32rem\",\r\n minHeight: \"100px\",\r\n });\r\n\r\n },\r\n (err) => {\r\n console.log(\"error RunEndPointCall\",err);\r\n }\r\n );\r\n }\r\n\r\n openGraphs(){\r\n this.router.navigate(['dynamic-module-graphs/'+this.formID+'/'+this.userID]);\r\n }\r\n\r\n onAddSaveRecord(record: Record){\r\n if (this.openAddDialogRef != null){ this.openAddDialogRef.close(); }\r\n this.getRecordsByFormID();\r\n this.saveRecordEvent.emit(record);\r\n }\r\n\r\n onAddAfterSaveRecord(record: Record){\r\n if (this.openAddDialogRef != null){ this.openAddDialogRef.close(); }\r\n this.getRecordsByFormID();\r\n this.saveRecordEvent.emit(record);\r\n }\r\n\r\n \r\n}\r\n\r\n","<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle\">Elenco {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion [hideToggle]=\"test\" [multi]=\"true\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header\r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title>\r\n {{ form.Name }} v.{{ panel.record.Version }} - {{ panel.record.AnswerDate | date : \"EEEE, d MMMM y, H:mm:ss\" }}\r\n </mat-panel-title>\r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n <lib-single-record\r\n [debugMode]=\"debugMode\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- DIALOG RECIPIENTS EMAIL PER FIRMA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [additionalParams]=\"compileConfigurations.additionalParams\"\r\n\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>","import { Component, OnInit } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { SpinnerService } from '../../../services/spinner.service';\r\n\r\n@Component({\r\n selector: 'eqp-dynamic-module-spinner',\r\n templateUrl: './spinner.component.html',\r\n styleUrls: ['./spinner.component.scss']\r\n})\r\nexport class SpinnerComponent implements OnInit {\r\n\r\n isLoading: Subject<boolean> = this.spinnerService.isLoading;\r\n\r\n constructor(private spinnerService: SpinnerService) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","<div class=\"eqp-splash-screen\" *ngIf=\"isLoading | async\">\r\n <div id=\"loader\"></div>\r\n</div>","import { Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';\r\nimport { DynamicModuleRepairConfig } from '../../../../models/dynamicModuleRepairConfig.model';\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../../models/endPointConfiguration.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\n\r\n@Component({\r\n selector: 'repair-form-fields',\r\n templateUrl: 'repair-form-fields.component.html',\r\n styleUrls: ['./repair-form-fields.component.scss']\r\n})\r\nexport class RepairFormFieldsComponent implements OnInit {\r\n\r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element)\r\n }\r\n }\r\n\r\n @Input() configurations: DynamicModuleRepairConfig\r\n @Input(\"formID\") formID: string;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n // @Input() FormJSON: string;\r\n @Output() onSaveJson: EventEmitter<string> = new EventEmitter<string>();\r\n @ViewChild('formJson', { static: false }) formulaTextArea: ElementRef<HTMLTextAreaElement>;\r\n constructor(private utilityHelperService: UtilityHelperService) { }\r\n\r\n ngOnInit(): void {\r\n this.getFormByID();\r\n }\r\n printTheJSONInPrettyFormat() {\r\n var badJSON = this.configurations.FormJSON;\r\n var parseJSON = JSON.parse(badJSON);\r\n this.configurations.FormJSON = JSON.stringify(parseJSON, undefined, 4);\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.configurations.FormJSON = JSON.stringify(res.Fields);\r\n },\r\n (err) => {}\r\n );\r\n}\r\n\r\n saveJson(){\r\n this.onSaveJson.emit(this.configurations.FormJSON);\r\n }\r\n}\r\n","<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea name=\"formJson\" #formJson type=\"textarea\" id=\"formJson\" rows=\"50\" style=\"width: 100%\"\r\n [(ngModel)]=\"configurations.FormJSON\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <button (click)=\"printTheJSONInPrettyFormat()\">Formatta Json</button>\r\n <button class=\"mr-2 save \" mat-raised-button color=\"primary\" (click)=\"saveJson()\" type=\"button\">\r\n Salva\r\n</button>\r\n</div>\r\n\r\n","import { FieldTypeEnum } from \"./baseField.model\";\r\nimport { LogicOperatorBoolean, LogicOperatorDate, LogicOperatorListValue, LogicOperatorNumeric, LogicOperatorText } from \"./logicOperator.model\";\r\n\r\nexport class Statistic{\r\n fieldtype:FieldTypeEnum;\r\n key: string;\r\n value: string;\r\n logicoperator:LogicOperatorBoolean | LogicOperatorListValue | LogicOperatorNumeric | LogicOperatorText | LogicOperatorDate\r\n}\r\n\r\nexport class FilterStatistic {\r\n Statistics: Array<Statistic> = new Array<Statistic>();\r\n PrefilterParams: any;\r\n AdditionalParams: any;\r\n}","export enum LogicOperatorNumeric {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \">\" = 5,\r\n \">=\" = 6,\r\n \"<\" = 7,\r\n \"<=\" = 8,\r\n}\r\n\r\nexport enum LogicOperatorDate {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \">\" = 5,\r\n \">=\" = 6,\r\n \"<\" = 7,\r\n \"<=\" = 8,\r\n}\r\n\r\nexport enum LogicOperatorText {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \"LIKE\" = 3,\r\n \"NOT LIKE\" = 4,\r\n}\r\n\r\nexport enum LogicOperatorBoolean {\r\n \"Si\" = 9,\r\n \"No\" = 10\r\n}\r\n\r\nexport enum LogicOperatorListValue {\r\n \"=\" = 1,\r\n \"!=\" = 2\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { VoiceRecognitionService } from '../../../../../services/voice-recognition.service';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'text-filter-template',\r\n templateUrl: './text-filter-template.component.html',\r\n styleUrls: ['./text-filter-template.component.scss']\r\n})\r\nexport class TextFilterTemplateComponent {\r\n\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false;\r\n\r\n constructor(public voiceservice: VoiceRecognitionService) {\r\n this.voiceservice.init();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ttsClick() {\r\n //Gestione del bottone icona del microfono con riempimennto del campo in real time\r\n if (!this.isStillRecoginze) {\r\n this.newtext = '';\r\n this.isStillRecoginze = this.voiceservice.start() === true ? true : false;\r\n this.subscription = this.source.subscribe(val => {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == undefined) {\r\n this.record[this.field.Name] = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n }\r\n else {\r\n this.newtext = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n if (this.newtext != undefined)\r\n this.updateRTVoiceField();\r\n }\r\n });\r\n }\r\n else {\r\n this.isStillRecoginze = this.voiceservice.stop() === false ? false : true;\r\n this.subscription.unsubscribe();\r\n this.updateVoiceField();\r\n }\r\n }\r\n\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n updateRTVoiceField() {\r\n this.record[this.field.Name] = this.voiceservice.text + this.newtext;\r\n this.newtext = '';\r\n }\r\n\r\n updateVoiceField() {\r\n this.newtext = '';\r\n this.record[this.field.Name] = this.voiceservice.text;\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput [type]=\"getInputType()\" [formControlName]=\"field.Name\" [readonly]=\"false\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onFilterChange()\">\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched\">\r\n Min. Caratteri: {{field.MinLenght}} - Max. Caratteri: {{field.MaxLenght}} \r\n </mat-error>\r\n <mat-icon [hidden]=\"!field.Microphone\" (click)=\"ttsClick()\" matSuffix style=\"cursor: pointer;\" [color]=\"!isStillRecoginze ? '' : 'warn'\">keyboard_voice</mat-icon> \r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorText\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { EqpNumericInputMode, NumericMaskConfig } from '@eqproject/eqp-numeric';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { NumericField } from '../../../../../models/fields/numericField.model';\r\nimport { LogicOperatorNumeric } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'numeric-filter-template',\r\n templateUrl: './numeric-filter-template.component.html',\r\n styleUrls: ['./numeric-filter-template.component.scss']\r\n})\r\nexport class NumericFilterTemplateComponent implements OnInit {\r\n\r\n @Input() field: NumericField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n validatorsArray: any[] = [];\r\n eqpNumericOptions: Partial<NumericMaskConfig> = {};\r\n logicOperatorNumeric = LogicOperatorNumeric;\r\n selectedLogicOperator: LogicOperatorNumeric;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureEqpNumericOptions();\r\n this.configureControllers();\r\n this.initStyles();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: (this.record[this.field.Name] / (Math.pow(10,this.field.DecimalPrecision))).toFixed(this.field.DecimalPrecision).toString(),\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\nprivate configureEqpNumericOptions() {\r\n\r\n this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n this.eqpNumericOptions.allowNegative=true;\r\n if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n else\r\n this.eqpNumericOptions.decimal=\".\";\r\n if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n if(this.field.IsInteger== false){\r\n if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n else { this.eqpNumericOptions.precision = 2; }\r\n }else{\r\n this.eqpNumericOptions.precision = 0;\r\n }\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n this.validatorsArray = [];\r\n if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput eqpNumericMask [formControlName]=\"field.Name\" [readonly]=\"false\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (ngModelChange)=\"onFilterChange()\" />\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched\">\r\n Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorNumeric\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { LogicOperatorBoolean } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { BooleanField } from '../../../../../models/fields/booleanField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\n@Component({\r\n selector: 'boolean-filter-template',\r\n templateUrl: './boolean-filter-template.component.html',\r\n styleUrls: ['./boolean-filter-template.component.scss']\r\n})\r\nexport class BooleanFilterTemplateComponent {\r\n @Input() field: BooleanField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n validatorsArray: any[] = [];\r\n logicOperatorBoolean = LogicOperatorBoolean;\r\n selectedLogicOperator: LogicOperatorBoolean;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureControllers();\r\n this.initStyles();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && this.selectedLogicOperator == null){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name].toString(),\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\n// private configureEqpNumericOptions() {\r\n\r\n// this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n// this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n// this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n// this.eqpNumericOptions.allowNegative=true;\r\n// if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n// this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n// else\r\n// this.eqpNumericOptions.decimal=\".\";\r\n// if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n// this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n// if(this.field.IsInteger== false){\r\n// if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n// else { this.eqpNumericOptions.precision = 2; }\r\n// }else{\r\n// this.eqpNumericOptions.precision = 0;\r\n// }\r\n// }\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n this.validatorsArray = [];\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput [formControlName]=\"field.Name\" [disabled] [readonly]=\"true\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" \r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorBoolean\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { PickerModeEnum } from '@eqproject/eqp-datetimepicker';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../../models/fields/dateField.model';\r\nimport { LogicOperatorDate } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'date-filter-template',\r\n templateUrl: './date-filter-template.component.html',\r\n styleUrls: ['./date-filter-template.component.scss']\r\n})\r\nexport class DateFilterTemplateComponent {\r\n\r\n @Input() field: DateField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n pickerMode: PickerModeEnum;\r\n\r\n logicOperatorNumeric = LogicOperatorDate;\r\n selectedLogicOperator: LogicOperatorDate;\r\n activeCondition: boolean = false; \r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.setTimeType();\r\n }\r\n\r\n /**\r\n * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n * imposta la visualizzazione corretta del componente eqp-datetimepicker.\r\n */\r\n private setTimeType() {\r\n switch (this.field.IsOnlyDate) {\r\n case DateTimeTypeEnum[\"Solo data\"]:\r\n this.pickerMode = PickerModeEnum.DATE;\r\n break;\r\n case DateTimeTypeEnum[\"Solo orario\"]:\r\n this.pickerMode = PickerModeEnum.TIME;\r\n break;\r\n case DateTimeTypeEnum[\"Data e ora\"]:\r\n this.pickerMode = PickerModeEnum.DATETIME;\r\n break;\r\n }\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n} \r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <eqp-datetimepicker [placeholder]=\"field.Description\" [UTCDate]=\"true\" [pickerMode]=\"pickerMode\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [isRequired]=\"false\" [disabled]=\"field.FormFormGroup.disabled\" [(ngModelInput)]=\"record[field.Name]\"\r\n (ngModelInputChange)=\"onFilterChange()\" [customDateFormat]=\"field.DateFormat ? field.DateFormat : null\">\r\n </eqp-datetimepicker>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorNumeric\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { LogicOperatorListValue } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { ListPresentationEnum, ListValueField } from '../../../../../models/fields/listValueField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\n@Component({\r\n selector: 'list-value-filter-template',\r\n templateUrl: './list-value-filter-template.component.html',\r\n styleUrls: ['./list-value-filter-template.component.scss']\r\n})\r\nexport class ListValueFilterTemplateComponent {\r\n @Input() field: ListValueField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n validatorsArray: any[] = [];\r\n logicOperatorListValue = LogicOperatorListValue;\r\n selectedLogicOperator: LogicOperatorListValue;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\narrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureControllers();\r\n this.initStyles();\r\n this.setArrayData();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && this.selectedLogicOperator == null){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\n private configureControllers() {\r\n this.validatorsArray = [];\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n }\r\n\r\n /**\r\n * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.\r\n */\r\n private setArrayData() {\r\n if (this.field.PresentationMode != ListPresentationEnum.Immagini) {\r\n this.prepareValuePairs();\r\n if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n } else {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n }\r\n\r\n } else {\r\n this.field.ButtonImageList.forEach(i => { this.createArrayDataElement(i.ButtonKey, i.ButtonValue, 'data:' + i.FileContentType + ';base64,' + i.FileDataBase64); });\r\n }\r\n }\r\n\r\n prepareValuePairs() {\r\n if (this.field.Formula) {\r\n this.field.ValuePairs = {};\r\n const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n // dobbiamo ottenere un dizionario di quei valori\r\n this.field.ValuePairs = this.stringToValuePairs(temp);\r\n\r\n //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n // va bene così\r\n\r\n } else if (this.field.ValueString != null && this.field.ValueString != \"\") {\r\n // va presa la strigna e rimappata nel diario\r\n this.field.ValuePairs = this.stringToValuePairs(this.field.ValueString);\r\n\r\n }\r\n }\r\n\r\n private stringToValuePairs(valueString: string) {\r\n const valuePairs: { [key: string]: string } = {};\r\n const keyvals = valueString.split(\";\");\r\n keyvals.forEach((x) => {\r\n const parts = x.split(\"|\");\r\n if(parts.length == 1){\r\n valuePairs[parts[0].trim()] = parts[0].trim();\r\n } else if (parts.length > 1){\r\n valuePairs[parts[0].trim()] = parts[1].trim();\r\n }\r\n })\r\n return valuePairs;\r\n }\r\n \r\n private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <eqp-select [ngStyle]=\"FieldstyleObj\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"true\" [arrayValueProperty]=\"'Key'\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n [includeFullObject]=\"false\" [isRequired]=\"false\" [isDisabled]=\"false\"\r\n [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"false\"\r\n (ngModelInputChange)=\"onFilterChange()\">\r\n </eqp-select>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorListValue\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { VoiceRecognitionService } from '../../../../../services/voice-recognition.service';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'textarea-filter-template',\r\n templateUrl: './textarea-filter-template.component.html',\r\n styleUrls: ['./textarea-filter-template.component.scss']\r\n})\r\nexport class TextareaFilterTemplateComponent {\r\n\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false;\r\n\r\n constructor(public voiceservice: VoiceRecognitionService) {\r\n this.voiceservice.init();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ttsClick() {\r\n //Gestione del bottone icona del microfono con riempimennto del campo in real time\r\n if (!this.isStillRecoginze) {\r\n this.newtext = '';\r\n this.isStillRecoginze = this.voiceservice.start() === true ? true : false;\r\n this.subscription = this.source.subscribe(val => {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == undefined) {\r\n this.record[this.field.Name] = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n }\r\n else {\r\n this.newtext = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n if (this.newtext != undefined)\r\n this.updateRTVoiceField();\r\n }\r\n });\r\n }\r\n else {\r\n this.isStillRecoginze = this.voiceservice.stop() === false ? false : true;\r\n this.subscription.unsubscribe();\r\n this.updateVoiceField();\r\n }\r\n }\r\n\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n updateRTVoiceField() {\r\n this.record[this.field.Name] = this.voiceservice.text + this.newtext;\r\n this.newtext = '';\r\n }\r\n\r\n updateVoiceField() {\r\n this.newtext = '';\r\n this.record[this.field.Name] = this.voiceservice.text;\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n}\r\n","<div class=\"row textareaFilterTemplate\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <textarea [ngStyle]=\"FieldstyleObj\" matInput [type]=\"getInputType()\" [formControlName]=\"field.Name\" [readonly]=\"false\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onFilterChange()\"></textarea>\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched\">\r\n Min. Caratteri: {{field.MinLenght}} - Max. Caratteri: {{field.MaxLenght}} \r\n </mat-error>\r\n <mat-icon [hidden]=\"!field.Microphone\" (click)=\"ttsClick()\" matSuffix style=\"cursor: pointer;\" [color]=\"!isStillRecoginze ? '' : 'warn'\">keyboard_voice</mat-icon> \r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorText\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n selector: 'attachment-filter-template',\r\n templateUrl: './attachment-filter-template.component.html',\r\n styleUrls: ['./attachment-filter-template.component.scss']\r\n})\r\nexport class AttachmentFilterTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n onFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n selector: 'image-filter-template',\r\n templateUrl: './image-filter-template.component.html',\r\n styleUrls: ['./image-filter-template.component.scss']\r\n})\r\nexport class ImageFilterTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n onFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n selector: 'list-form-record-filter-template',\r\n templateUrl: './list-form-record-filter-template.component.html',\r\n styleUrls: ['./list-form-record-filter-template.component.scss']\r\n})\r\nexport class ListFormRecordFilterTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n onFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../../form-records/list-form-record/list-form-record.component';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { Statistic } from '../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'dynamic-module-filter-fix',\r\n templateUrl: './dynamic-module-filter-fix.component.html',\r\n styleUrls: ['./dynamic-module-filter-fix.component.scss']\r\n})\r\nexport class DynamicModuleFilterFixComponent {\r\n\r\n @Input() field: BaseField;\r\n @Input() form: Form;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n\r\n configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n selectedInnerForm: Form;\r\n selectedInnerFormRecord: Record;\r\n indexInnerFormRecord: number;\r\n onlyViewInnerFormRecord: boolean = false;\r\n dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n constructor(\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.configList.values = this.record[this.field.Name]\r\n this.configList.showTitle = true;\r\n this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onFilterChange(ev) {\r\n this.filterChange.emit(ev);\r\n }\r\n\r\n /**\r\n * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n * @returns Restituisce un oggetto di tipo Form.\r\n */\r\n getInnerFormFromField(field: BaseField): Form {\r\n if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n return this.form.InnerForms.find(f => f.Name == field.Label);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","\r\n<text-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</text-filter-template>\r\n\r\n<textarea-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</textarea-filter-template>\r\n\r\n<boolean-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</boolean-filter-template>\r\n\r\n<date-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</date-filter-template>\r\n\r\n<numeric-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</numeric-filter-template>\r\n\r\n<list-value-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</list-value-filter-template>\r\n\r\n <attachment-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</attachment-filter-template>\r\n\r\n<image-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</image-filter-template>\r\n\r\n<list-form-record-filter-template #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\">\r\n</list-form-record-filter-template>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { DynamicModuleCompileConfig } from '../../../../models/dynamicModuleCompileConfig.model';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { Form, FormScalarTypeEnum } from '../../../../models/form.model';\r\nimport { DynRecord, Record, RecordButton } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from './../../../../models/endPointConfiguration.model';\r\nimport { ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { FilterStatistic, Statistic } from '../../../../models/statistic.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { ConfigColumn, CustomExportType, ExportEqpTable, TypeColumn } from '@eqproject/eqp-table';\r\nimport { ExportType } from 'mat-table-exporter';\r\nimport { DynamicModuleFilterResultViewModeEnum } from '../../../../models/dynamicModuleFilterResultViewModeEnum.model';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n\r\n@Component({\r\n selector: 'filter-form-statistic',\r\n templateUrl: './filter-form-statistic.component.html',\r\n styleUrls: ['./filter-form-statistic.component.scss']\r\n})\r\nexport class FilterFormStatisticComponent {\r\n\r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element)\r\n }\r\n }\r\n\r\n \r\n @Input() configurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n\r\n @Input() formID: string = null; // preview\r\n @Input() form: Form = null; // preview config\r\n @Input() record: Record | string = null; // edit\r\n @Input() onlyView: boolean = false;\r\n @Input() defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault(false,true,false,false,false);\r\n @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum = DynamicModuleFilterResultViewModeEnum.INTERNAL_EQPTABLE;\r\n\r\n //Pagination\r\n pageSize: number = 100;\r\n pageIndex: number = 0;\r\n pageLength: Array<number> = [5,10,25,100]\r\n \r\n exportEqpTable: ExportEqpTable = new ExportEqpTable();\r\n\r\n showTitle = true;\r\n showSaveButton = true;\r\n showBackButton = true;\r\n showNewSearchButton = true;\r\n loader: boolean = false;\r\n showListView: boolean = false;\r\n filterResults: Array<DynRecord> = null;\r\n filterEqpTableResults: Array<any> = new Array<any>();\r\n listViewConfigurations: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n columns: Array<ConfigColumn> = new Array<ConfigColumn>();\r\n\r\n formForm: UntypedFormGroup;\r\n fieldGroups: { [key: string]: Array<BaseField> } = {};\r\n FormScalarTypeEnum = FormScalarTypeEnum;\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterFilter: EventEmitter<Array<DynRecord>> = new EventEmitter<Array<DynRecord>>();\r\n\r\n @ViewChildren(\"fieldTemplate\")\r\n fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n filters: FilterStatistic = new FilterStatistic();\r\n filterResultViewModes = DynamicModuleFilterResultViewModeEnum;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n public utilityService: UtilityHelperService,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n // add può funzionare anche come modifica e come preview\r\n // in add abbiamo in input l'ID del Form\r\n // in modifica abbiamo in input l'ID del Record\r\n // in preview abbiamo in input il Form(caso configurator) o l'ID del modulo on onlyView impostato a true\r\n this.endPointConfiguration.Records.ApplyFilter.Url = this.endPointConfiguration.Records.ApplyFilter.Url + \"/\" + this.formID;\r\n this.showTitle = this.configurations.showTitle;\r\n this.showSaveButton = this.configurations.showSaveButton;\r\n this.showBackButton = this.configurations.showBackButton;\r\n this.showNewSearchButton = this.configurations.showNewSearchButton;\r\n\r\n this.listViewConfigurations.showTitle = this.configurations.showTitle;\r\n this.listViewConfigurations.userID = this.configurations.userID;\r\n this.listViewConfigurations.externalButtons = null;\r\n this.listViewConfigurations.values = null;\r\n this.listViewConfigurations.defaultListActions = this.defaultListActions;\r\n\r\n if(this.record == null){\r\n this.previewOrNewResponseRecord();\r\n } else {\r\n this.editResponseRecord();\r\n }\r\n\r\n // l'inizializzazione termina con il recupero del record o con l'inizializzazione del form vuoto\r\n \r\n this.cdr.detectChanges();\r\n }\r\n\r\n \r\n configureColumns(){\r\n\r\n this.columns = [];\r\n this.filterEqpTableResults = new Array<any>();\r\n \r\n if (this.filterResults != null && this.filterResults.length > 0){\r\n \r\n // Crea campi e contenuti tabella\r\n this.filterResults.forEach((result,index) => {\r\n var object = JSON.parse(result.SerializedValues);\r\n if (index == 0){\r\n Object.keys(object).forEach((element,index2) => {\r\n if (index2 < Object.keys(object).length - 6){\r\n this.columns.push({ key: element, display: element, styles: { flex: \"0 0 10%\" }},);\r\n }\r\n });\r\n this.columns.push({ key: \"AnswerDate\", display: \"AnswerDate\", type: TypeColumn.Date, format: \"dd/MM/yyyy HH:mm:ss\", value: () => { return result.AnswerDate; }, styles: { flex: \"0 0 10%\" }},);\r\n this.columns.push({ key: \"Version\", display: \"Version\", value: () => { return result.Version; }, styles: { flex: \"0 0 10%\" }},);\r\n \r\n }\r\n this.filterEqpTableResults.push(object);\r\n });\r\n }\r\n\r\n }\r\n\r\n configureExport(){\r\n this.exportEqpTable.buttonText = \"Scarica\"\r\n this.exportEqpTable.exportFileType = CustomExportType.XLSX;\r\n this.exportEqpTable.exportFileName = \"DynamicModule_\"+this.form.Code;\r\n this.exportEqpTable.buttonIcon = \"cloud_download\";\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onFilterChange(ev:Statistic) {\r\n this.filters.Statistics = this.filters.Statistics.filter(x => x.key != ev.key);\r\n if (ev.logicoperator != null){\r\n this.filters.Statistics.push(ev); \r\n }\r\n }\r\n\r\n ApplyFilter(){\r\n this.filters.AdditionalParams = this.configurations.additionalParams;\r\n this.filters.PrefilterParams = this.configurations.prefilterParams;\r\n\r\n var filterParams = [\r\n {\r\n ParamName: \"filter\",\r\n ParamValue: this.filters,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n }\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.ApplyFilter,\r\n filterParams,\r\n (res: Array<DynRecord>) => {\r\n \r\n this.filterResults = res;\r\n this.configureExport();\r\n this.configureColumns();\r\n this.showListView = true;\r\n this.afterFilter.emit(res);\r\n }\r\n );\r\n }\r\n\r\n reset(){\r\n\r\n // Resetto i campi del record\r\n Object.keys(this.record).forEach(key => {\r\n this.record[key] = null;\r\n });\r\n\r\n this.filterResults = null;\r\n this.filters.Statistics = [];\r\n this.showListView = false;\r\n }\r\n\r\n previewOrNewResponseRecord(){ \r\n this.record = new Record();\r\n if(this.onlyView == true){\r\n // modalità preview\r\n if(this.form != null){\r\n // preview per il configurator\r\n this.fieldsConfig();\r\n } else if(this.formID != null){\r\n // preview per admin\r\n this.getFormByID() // dentro chiama fieldsConfig\r\n }\r\n } else {\r\n // aggiugni nuovo\r\n this.fieldsConfig();\r\n }\r\n }\r\n editResponseRecord(){\r\n // modiiltà modifica\r\n if (typeof this.record === \"string\") {\r\n // allora è un ID\r\n this.getRecordByID();\r\n } else {\r\n // il record viene passato come tale\r\n // (<Record>this.record).EntID = \"3\";\r\n // (<Record>this.record).Version;\r\n this.getFormByIDandVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(exit: boolean) {\r\n if (exit) {\r\n // this.saveRecordEvent.emit(null);\r\n this.onSaveRecord(null);\r\n } else {\r\n // this.saveRecordEvent.emit(this.record);\r\n this.onSaveRecord((<Record>this.record));\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare il record aggiunto o modificato.\r\n * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n * nel body della chiamata, altrimenti scatena l'evento \"saveRecord\".\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onSaveRecord(event: Record) {\r\n if (\r\n event != null &&\r\n this.endPointConfiguration != null &&\r\n this.endPointConfiguration.Records.SaveEndPoint\r\n ) {\r\n var dynRec: DynRecord = new DynRecord();\r\n dynRec.ID = event.ID ?? null;\r\n dynRec.EntID = this.form.ID;\r\n dynRec.Version = this.form.Version;\r\n dynRec.userID = this.userID;\r\n dynRec.Values = event ?? null;\r\n dynRec.HTMLreadableValues = this.createHTMLreadableValues(event);\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"Record\",\r\n ParamValue: dynRec,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.SaveEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n this.afterSaveRecordEvent.emit(event);\r\n }\r\n );\r\n } else {\r\n this.saveRecordEvent.emit(event);\r\n }\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.fieldsConfig();\r\n },\r\n (err) => {}\r\n );\r\n }\r\n\r\n // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n getRecordByID() {\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.record,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.record = new Record();\r\n\r\n (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n this.record.ID = res.ID;\r\n this.record.EntID = res.EntID;\r\n this.record.userID = res.userID;\r\n this.record.Version = res.Version;\r\n this.record.Values = JSON.parse(res.SerializedValues);\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // this.loader = true;\r\n this.getFormByIDandVersion();\r\n }\r\n );\r\n }\r\n getFormByIDandVersion() {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: (<Record>this.record).EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: (<Record>this.record).Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n GlobalService.debugLog(\"getFormByIDandVersion - this record\", <Record>this.record)\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n\r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n \r\n fieldsConfig(){ \r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n this.loader = true;\r\n }\r\n\r\n /**\r\n * Metodo per creare nell'oggetto Record le proprietà mancanti rispetto ai campi che compongono la form.\r\n */\r\n private createRecordProperties() {\r\n const recordProperties: Array<string> = Object.keys(this.record);\r\n this.form.Fields.forEach((field) => {\r\n if (!recordProperties.find((p) => p === field.Name)) {\r\n this.record[field.Name] = null;\r\n }\r\n });\r\n if (this.form.InnerForms && this.form.InnerForms.length > 0) {\r\n this.form.InnerForms.forEach((form) => {\r\n const arrayName: string = form.Name.split(\" \").join(\"_\");\r\n if (!recordProperties.find((p) => p === arrayName)) {\r\n this.record[arrayName] = [];\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per riordinare i campi che compongono la form.\r\n */\r\n private reorderFormFields() {\r\n if (this.form.Fields && this.form.Fields.length > 0) {\r\n this.form.Fields.sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0 );\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createFormGroup() {\r\n this.formForm = this.utilityService.CreateFormFormGroup(\r\n this.form.Fields,\r\n (<Record>this.record),\r\n this.onlyView\r\n );\r\n }\r\n\r\n /**\r\n * Metodo per creare i gruppi in cui raggruppare i campi della form in base\r\n * a come è stata configurata dall'utente.\r\n */\r\n private createFieldGroups() {\r\n this.form.FormFieldsGroups.sort((a, b) => a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0 )\r\n .map((g) => g.Name)\r\n .forEach((groupName) => {\r\n this.fieldGroups[groupName] = this.form.Fields.filter(\r\n (f) => f.FieldGroup == groupName\r\n );\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createHTMLreadableValues(record:Record) {\r\n GlobalService.debugLog(\"record\", record);\r\n GlobalService.debugLog(\"form\", this.form);\r\n let outputValuesArray: Array<any> = this.getResponseValues(record, this.form);\r\n GlobalService.debugLog(\"outputValuesArray\", outputValuesArray);\r\n \r\n let template: string = this.getResponseTemplate(this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n GlobalService.debugLog(\"template\", template);\r\n\r\n const regex = /##([\\w]+)##/g;\r\n return this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex); // oggetto che conterrà l'output elaborato \r\n\r\n }\r\n\r\n private getResponseValues(record: Record, form: Form ): Array<any> {\r\n let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n GlobalService.debugLog(\"(record).Values\", record);\r\n for (let fieldName in record) {\r\n try {\r\n // fieldName è il nome del campo\r\n // PREPARO VARIABILI VALORI CORRETTI\r\n let foundObject = form.Fields.find(\r\n (obj) => obj.Name === fieldName\r\n );\r\n GlobalService.debugLog(\"fieldName\", fieldName);\r\n GlobalService.debugLog(\"foundObject\", foundObject);\r\n // gestire caso fieldtype 8 [elenco generico]\r\n // fare un eval per popolare i valuePairs se è presente una formula\r\n // prendere la label corretta\r\n ////////////////////////////////////////////////////////////////////////////////\r\n if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) \r\n {\r\n if (foundObject.Formula) \r\n {\r\n // aggiungo a valuepairs i valori calcolati\r\n // (<ListValueField>foundObject).ValuePairs = {};\r\n var temp = UtilityHelperService.EvaluateFieldFormula(\r\n foundObject.Formula,\r\n record,\r\n null\r\n );\r\n GlobalService.debugLog(\"temp\", temp);\r\n for (let key2 in temp) {\r\n if (UtilityHelperService.isNumeric(temp[key2])) \r\n {\r\n (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n } else \r\n {\r\n (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n }\r\n }\r\n GlobalService.debugLog(\"(record).Values[fieldName]\", record[fieldName]);\r\n GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[record[fieldName]]\", (<ListValueField>foundObject).ValuePairs[record[fieldName]]);\r\n outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n }\r\n let inverted = {};\r\n GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>foundObject).ValuePairs);\r\n for (let key in (<ListValueField>foundObject).ValuePairs) \r\n { \r\n inverted[(<ListValueField>foundObject).ValuePairs[key]] = key; \r\n }\r\n (<ListValueField>foundObject).ValuePairs = inverted;\r\n outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n } else \r\n {\r\n GlobalService.debugLog(\"record[fieldName]\", record[fieldName]);\r\n outputValuesArray[fieldName] = record[fieldName];\r\n }\r\n ////////////////////////////////////////////////////////////////////////////////\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n GlobalService.debugLog(\"outputValuesArray 1\", outputValuesArray);\r\n // cancello i valori indefiniti o nulli\r\n for(const chiave in outputValuesArray){\r\n if(outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n outputValuesArray[chiave] = ''\r\n }\r\n return outputValuesArray;\r\n }\r\n\r\n private getResponseTemplate(form: Form): string {\r\n let template: string = \"\";\r\n // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n form.Fields.forEach((baseField: BaseField) => {\r\n template += '<span class=\"dynaform-question\" style=\"' + baseField.LabelstyleCSS + '\">' + baseField.Description + ':</span> <span class=\"dynaform-response\" style=\"' + baseField.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span> \\n <br> ';\r\n });\r\n // (attualmente non esiste il concetto di tempate di output)\r\n return template;\r\n }\r\n\r\n private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n return template.replace(regex, (match, group) => {\r\n return <string>outputValuesArray[group];\r\n });\r\n }\r\n\r\n}\r\n","<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice && !showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n <eqp-table \r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n \r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </eqp-table> \r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"!field.InListView\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n</ng-template>","/**\r\n * Classe base che implementa la valorizzazione dell'ID (se null) con una nuova GUID \r\n * in creazione dell'oggetto.\r\n * Per scelta architetturale, visto che non possiamo assumere la persistenza su DB relazionale o su NOSQL, ogni\r\n * oggetto della configurazione viene persistito, e gestito con ID di tipo stringa creato da una GUID.\r\n */\r\nexport class GraphField {\r\n Name: string;\r\n Coords: Array<Coords> = new Array<Coords>();\r\n Visible: boolean = true;\r\n}\r\n\r\nexport class Coords {\r\n x: Date;\r\n y: number;\r\n}","import { Component, Input, OnInit } from '@angular/core';\r\nimport { Coords } from '../../../../models/graph.model';\r\n\r\n@Component({\r\n selector: 'graph',\r\n templateUrl: './graph.component.html',\r\n styleUrls: ['./graph.component.scss']\r\n})\r\nexport class GraphComponent implements OnInit {\r\n\r\n @Input(\"data\") data: Array<Coords> = new Array<Coords>();\r\n @Input(\"title\") title: string = \"\";\r\n\r\n stockChartOptions = {\r\n width: 1000,\r\n height: 500,\r\n title: {\r\n text: \"\"\r\n },\r\n theme: \"light2\",\r\n charts: [{\r\n data: [{\r\n xValueType: \"dateTime\",\r\n type: \"line\",\r\n dataPoints: []\r\n }]\r\n }],\r\n navigator: {\r\n slider: {\r\n minimum: new Date(\"2018-07-01\"),\r\n maximum: new Date(\"2019-06-30\")\r\n }\r\n },\r\n options: {\r\n responsive: true,\r\n maintainAspectRatio: false\r\n }\r\n };\r\n\r\n loaded: boolean = false;\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {\r\n // Aggiustamento e scrittura dati\r\n if (this.data.length > 0){\r\n var lastvalue = this.data[0];\r\n var firstvalue = this.data[this.data.length-1];\r\n\r\n this.stockChartOptions.navigator.slider.minimum = new Date(firstvalue.x);\r\n this.stockChartOptions.navigator.slider.maximum = new Date(lastvalue.x);\r\n this.stockChartOptions.title.text = this.title;\r\n this.stockChartOptions.charts[0].data[0].dataPoints = this.data;\r\n\r\n console.log(this.title,this.stockChartOptions);\r\n\r\n this.loaded = true;\r\n }\r\n }\r\n\r\n}\r\n","<canvasjs-stockchart *ngIf=\"loaded\" [options]=\"stockChartOptions\"></canvasjs-stockchart>\r\n<div class=\"error\" *ngIf=\"!loaded\"><b>{{title}}:</b> Nessun dato trovato nell'intervallo specificato!</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { Form } from \"../../../models/form.model\";\r\nimport { DynamicModuleCompileConfig } from '../../../models/dynamicModuleCompileConfig.model';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../models/endPointConfiguration.model';\r\nimport { PickerModeEnum } from '@eqproject/eqp-datetimepicker';\r\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { Coords, GraphField } from '../../../models/graph.model';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { DynRecord } from '../../../models/record.model';\r\nimport { FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'graphs',\r\n templateUrl: './graphs.component.html',\r\n styleUrls: ['./graphs.component.scss']\r\n})\r\nexport class GraphsComponent implements OnInit {\r\n\r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element)\r\n }\r\n }\r\n\r\n @Input() configurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() formID: string = null; // preview\r\n @Input() form: Form = null; // preview config\r\n\r\n pickerModeEnum = PickerModeEnum;\r\n fieldFormGroup: UntypedFormGroup;\r\n\r\n loaded: boolean = false;\r\n generated: boolean = false;\r\n\r\n minperiod: Date = new Date();\r\n maxperiod: Date = new Date();\r\n minperiodS: string;\r\n maxperiodS: string;\r\n\r\n fields: Array<GraphField> = new Array<GraphField>();\r\n selectedFields: Array<GraphField>;\r\n selectedGeneratedFields: Array<GraphField>;\r\n\r\n answers: Array<DynRecord> = null;\r\n eligibleAnswers: Array<DynRecord> = null;\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService,\r\n private datePipe: DatePipe\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.formID != null){\r\n this.getFormByID();\r\n } else {\r\n this.loaded = true;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n */\r\n getFormByID() {\r\n if (\r\n this.formID &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Forms &&\r\n this.endPointConfiguration.Forms.GetByIDEndPoint\r\n ) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n\r\n this.form = res;\r\n\r\n this.form.Fields.filter(x => x.FieldType == FieldTypeEnum['Campo numerico']).forEach((field) => {\r\n var graphField: GraphField = new GraphField();\r\n graphField.Name = field.Label;\r\n this.fields.push(graphField);\r\n });\r\n\r\n this.getRecordsByFormID();\r\n\r\n },\r\n (err) => {\r\n }\r\n );\r\n }\r\n }\r\n\r\n async getRecordsByFormID() {\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n if (\r\n this.configurations.userID == null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n ) {\r\n // se non conosco l'utente\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.answers = res;\r\n }\r\n );\r\n } else if (\r\n this.configurations.userID != null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint\r\n ) {\r\n // se conosco l'utente\r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: this.configurations.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.answers = res;\r\n this.loaded = true;\r\n }\r\n );\r\n } else {\r\n console.error(\"controllare le configurazioni dell'endpoint\");\r\n }\r\n } \r\n\r\n generateGraph(){\r\n this.generated = false;\r\n this.selectedGeneratedFields = JSON.parse(JSON.stringify(this.selectedFields));\r\n this.getEligibleAnswers();\r\n }\r\n\r\n getEligibleAnswers(){\r\n // Azzero le coordinate\r\n this.selectedGeneratedFields.forEach((field) => { field.Coords = new Array<Coords>(); });\r\n this.eligibleAnswers = JSON.parse(JSON.stringify(this.answers));\r\n\r\n this.minperiodS = this.datePipe.transform(this.minperiod,\"YYYY-MM-dd\");\r\n this.maxperiodS = this.datePipe.transform(this.maxperiod,\"YYYY-MM-dd\");\r\n\r\n // Filtro minimo periodo\r\n if (this.minperiod != null){\r\n this.eligibleAnswers = this.eligibleAnswers.filter(x => x.AnswerDate.split(\"T\")[0] >= this.minperiodS);\r\n }\r\n\r\n // Filtro massimo periodo\r\n if (this.maxperiod != null){\r\n this.eligibleAnswers = this.eligibleAnswers.filter(x => x.AnswerDate.split(\"T\")[0] <= this.maxperiodS);\r\n }\r\n\r\n // Inserisco i dati trovati\r\n this.eligibleAnswers.forEach((answer) => {\r\n var answervalues = JSON.parse(answer.SerializedValues);\r\n this.selectedGeneratedFields.forEach((field) => {\r\n if (answervalues[field.Name] != null){\r\n var coords: Coords = new Coords();\r\n coords.x = new Date(answer.AnswerDate.split(\"T\")[0]);\r\n coords.y = parseFloat(answervalues[field.Name]);\r\n field.Coords.push(coords);\r\n }\r\n });\r\n });\r\n\r\n setTimeout(() => { this.generated = true; }, 1000);\r\n\r\n }\r\n\r\n}\r\n","<mat-card class=\"list-view-form-record\" *ngIf=\"loaded\">\r\n <mat-card-content>\r\n \r\n\r\n <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"pickerModeEnum.DATE\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"pickerModeEnum.DATE\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"fields\" [(ngModelInput)]=\"selectedFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [isMultiSelect]=\"true\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedFields == null || selectedFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateGraph()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div>\r\n <div class=\"generation_box\" *ngIf=\"generated\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <div class=\"generation_options\" *ngFor=\"let selectedField of selectedGeneratedFields\">\r\n <mat-checkbox class=\"mr-2\" [(ngModel)]=\"selectedField.Visible\">\r\n {{selectedField.Name}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"generation_graph\" *ngFor=\"let selectedField of selectedGeneratedFields\">\r\n <div class=\"generation_divider\" [hidden]=\"!selectedField.Visible\">\r\n <graph [data]=\"selectedField.Coords\" [title]=\"selectedField.Name\"></graph>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n </mat-card>","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from \"@angular/core\";\r\nimport { Context } from \"../../../models/context.model\";\r\nimport { DynamicModuleCompileConfig } from \"../../../models/dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleConfig } from \"../../../models/dynamicModuleConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"../../../models/dynamicModuleGeneralConfig.model\";\r\nimport { DynamicModuleListConfig } from \"../../../models/dynamicModuleListConfig.model\";\r\nimport { DynamicModuleRepairConfig } from \"../../../models/dynamicModuleRepairConfig.model\";\r\nimport { DynamicModuleViewModeEnum } from \"../../../models/dynamicModuleViewModeEnum\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"../../../models/endPointConfiguration.model\";\r\nimport { Form, FormTypeEnum } from \"../../../models/form.model\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../models/record.model\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { FilterResultType } from \"@eqproject/eqp-filters\";\r\nimport { DynamicModuleFilterResultViewModeEnum } from \"../../../models/dynamicModuleFilterResultViewModeEnum.model\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\n\r\n@Component({\r\n selector: \"eqp-dynamic-module\",\r\n templateUrl: \"./eqp-dynamic-module.component.html\",\r\n styleUrls: [\"./eqp-dynamic-module.component.scss\"],\r\n})\r\nexport class EqpDynamicModuleComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() debugMode: boolean = false;\r\n\r\n // @Input() configurations: DynamicModuleConfig;\r\n @Input() configurations: DynamicModuleGeneralConfig;\r\n @Input() formID: string;\r\n @Input() starterViewMode: DynamicModuleViewModeEnum = DynamicModuleViewModeEnum.LIST;\r\n\r\n @Input() userID: string = \"0\";\r\n @Input() showTitle = true;\r\n @Input() showBackButton: boolean = true;\r\n @Input() showSaveButton = true;\r\n @Input() values: Array<Record> = null;\r\n @Input() FormJSON = \"\";\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n @Input() defaultListViewFunction: Function = null;\r\n @Input() defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault();\r\n @Input() onSaveBackToList = false;\r\n @Input() onBackTo: DynamicModuleViewModeEnum = null;\r\n @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum = DynamicModuleFilterResultViewModeEnum.INTERNAL_EQPTABLE;\r\n @Input() additionalParams: any = null;\r\n @Input() prefilterParams: any = null;\r\n @Input() showNewSearchButton: boolean = true;\r\n @Input() answerToDuplicateId: any;\r\n @Input() highlightFilter: any;\r\n\r\n context: Context = new Context();\r\n /**\r\n * Url del server da chiamare per recuperare, salvare o eliminare i record.\r\n * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n */\r\n baseServerUrl: string = null;\r\n\r\n /**\r\n * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n */\r\n userToken: string = null;\r\n\r\n /**\r\n * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n */\r\n endPointConfiguration: EndPointConfiguration = null;\r\n\r\n //@Input() form: Form = new Form();\r\n // defaultListActions: dynamicModuleListFormRecordActionsDefault = new dynamicModuleListFormRecordActionsDefault();\r\n // FormJSON: string = \"\";\r\n\r\n /**\r\n * Eventi emessi quando si salva, elimina o duplica un record\r\n * se non è stato specificato un endpoint da chiamare.\r\n */\r\n @Output() saveRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() deleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() SaveJSON: EventEmitter<string> = new EventEmitter<string>();\r\n @Output() afterFilter: EventEmitter<Array<DynRecord>> = new EventEmitter<Array<DynRecord>>();\r\n /**\r\n * Eventi emessi DOPO aver eseguito una chiamata al server per il salvataggio,\r\n * l'eliminazione o la duplicazione di un record all'endpoint specificato.\r\n */\r\n @Output() afterSaveRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterDeleteRecord: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n\r\n form: Form = new Form();\r\n lastform: Form = new Form();\r\n FormTypeEnum = FormTypeEnum;\r\n dynamicModuleViewModeEnum = DynamicModuleViewModeEnum;\r\n selectedRecord: Record;\r\n onlyView: boolean;\r\n viewMode: DynamicModuleViewModeEnum;\r\n defaultViewMode: DynamicModuleViewModeEnum;\r\n\r\n dynamicModuleCompileConfig: DynamicModuleCompileConfig;\r\n dynamicModuleListConfig: DynamicModuleListConfig;\r\n dynamicModuleRepairConfig: DynamicModuleRepairConfig;\r\n loader: boolean = false;\r\n isDuplicate: boolean = false;\r\n\r\n constructor(private utilityHelperService: UtilityHelperService,\r\n private changeDetector: ChangeDetectorRef) {}\r\n\r\n async ngOnInit() {\r\n GlobalService.debugMode = this.debugMode;\r\n\r\n this.onBackTo = (this.onBackTo == null) ? this.starterViewMode : this.onBackTo;\r\n\r\n this.dynamicModuleCompileConfig = new DynamicModuleCompileConfig(\r\n this.showTitle,\r\n this.showSaveButton,\r\n this.showBackButton,\r\n this.userID,\r\n this.additionalParams,\r\n this.prefilterParams,\r\n this.showNewSearchButton\r\n );\r\n this.dynamicModuleListConfig = new DynamicModuleListConfig(\r\n this.showTitle,\r\n this.values,\r\n this.defaultListActions,\r\n this.userID\r\n );\r\n this.dynamicModuleRepairConfig = new DynamicModuleRepairConfig(\r\n this.FormJSON\r\n );\r\n\r\n this.context = this.configurations.context;\r\n this.baseServerUrl = this.configurations.baseServerUrl;\r\n this.userToken = this.configurations.userToken;\r\n this.endPointConfiguration = this.configurations.endPointConfiguration;\r\n //this.formID = this.configurations.dynamicModuleGeneralConfig.formID\r\n\r\n // this.viewMode = this.starterViewMode\r\n UtilityHelperService.SetContext(this.context);\r\n \r\n this.configureDefaultEndPoints();\r\n\r\n if (this.FormJSON == \"\") {\r\n // prende il form e imposta la viewmode corretta\r\n // await this.getFormByID();\r\n }\r\n\r\n // this.viewMode = this.starterViewMode;\r\n GlobalService.debugLog(\"dynamicModuleCompileConfig\", this.dynamicModuleCompileConfig)\r\n this.loader = true\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n if (this.starterViewMode == DynamicModuleViewModeEnum.COMPILE || this.starterViewMode == DynamicModuleViewModeEnum.FILTER) {\r\n // da vedere in getFormByID\r\n this.defaultViewMode = this.starterViewMode;\r\n setTimeout(() => this.onAddViewEditRecord(null), 1000);\r\n } else {\r\n this.viewMode = this.starterViewMode;\r\n this.loader = true;\r\n setTimeout(_ => { this.changeDetector.detectChanges() }, 0); // refresh ui\r\n\r\n }\r\n }\r\n\r\n // getFormByID(id: string = this.formID) {\r\n // const dynamicModuleParams: Array<EndPointDataParams> =\r\n // new Array<EndPointDataParams>();\r\n // dynamicModuleParams.push({\r\n // ParamName: \"id\",\r\n // ParamValue: id,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // });\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Form) => {\r\n // this.lastform = res;\r\n // this.form = res;\r\n // // this.getRecordsByFormID();\r\n\r\n // // if (this.starterViewMode == DynamicModuleViewModeEnum.COMPILE) {\r\n // // this.onAddViewEditRecord(null);\r\n // // }\r\n // // this.viewMode = this.starterViewMode;\r\n // },\r\n // (err) => {}\r\n // );\r\n // }\r\n\r\n /**\r\n * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n * a cui si deve connettere e al token da passare per autenticarsi.\r\n * Se la proprietà \"baseServerUrl\" è null e non sono stati configurati i vari endpoint allora\r\n * non viene eseguita nessuna chiamata http per recuperare/salvare i dati.\r\n */\r\n configureDefaultEndPoints() {\r\n if (!this.endPointConfiguration && this.baseServerUrl) {\r\n this.endPointConfiguration =\r\n this.utilityHelperService.ConfigureDefaultEndPoints(\r\n this.baseServerUrl,\r\n this.userToken\r\n ); \r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n * a partire dai quali vengono ricreati i Record usati nel client.\r\n */\r\n // async getRecordsByFormID() {\r\n // if (\r\n // this.endPointConfiguration &&\r\n // this.endPointConfiguration.Records &&\r\n // this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n // ) {\r\n // var dynamicModuleParams = [\r\n // {\r\n // ParamName: \"EntID\",\r\n // ParamValue: this.form.ID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // ];\r\n // await this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Array<DynRecord>) => {\r\n // this.dynamicModuleListConfig.values = new Array<Record>();\r\n // res.forEach((r) => {\r\n // var tmpRec: Record = new Record();\r\n // tmpRec = JSON.parse(r.SerializedValues);\r\n // tmpRec.ID = r.ID;\r\n // tmpRec.EntID = r.EntID;\r\n // tmpRec.Version = r.Version;\r\n // tmpRec.userID = r.userID;\r\n // tmpRec.AnswerDate = r.AnswerDate;\r\n // this.dynamicModuleListConfig.values.push(tmpRec);\r\n // });\r\n // }\r\n // );\r\n // }\r\n // }\r\n\r\n onGoBack(){\r\n this.viewMode = this.onBackTo ;\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n onAddViewEditRecord(event: { record: Record; onlyView: boolean }) {\r\n\r\n console.log(\"onAddViewEditRecord\", event);\r\n\r\n if (event != null) {\r\n this.onlyView = event.onlyView;\r\n GlobalService.debugLog(\"Version modulo\", event.record.Version)\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByIDEndPoint\r\n ) {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: event.record.EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: event.record.Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n GlobalService.debugLog(\"query params\", dynamicModuleParams)\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n GlobalService.debugLog(\"RES\", res)\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: event.record.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.selectedRecord = JSON.parse(res.SerializedValues);\r\n this.selectedRecord.ID = res.ID;\r\n this.selectedRecord.EntID = res.EntID;\r\n this.selectedRecord.userID = res.userID;\r\n this.selectedRecord.Version = res.Version;\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n );\r\n } else {\r\n this.selectedRecord = JSON.parse(JSON.stringify(event.record));\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n }\r\n } else {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n console.log(\"success RunEndPointCall\",res,this.defaultViewMode);\r\n this.form = res;\r\n this.selectedRecord = null;\r\n\r\n if (this.answerToDuplicateId != null){\r\n this.selectedRecord = this.answerToDuplicateId;\r\n this.isDuplicate = true;\r\n }\r\n \r\n this.onlyView = false;\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n },\r\n (err) => {\r\n console.log(\"error RunEndPointCall\",err);\r\n }\r\n );\r\n\r\n // this.selectedRecord = null;\r\n // this.onlyView = false;\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n onViewRecord(record: Record) {\r\n this.loader = false\r\n this.selectedRecord = record\r\n this.viewMode = DynamicModuleViewModeEnum.VIEW\r\n this.loader = true\r\n\r\n }\r\n\r\n // #region SAVE\r\n /**\r\n * Metodo per gestire il componente dopo che il record è stato aggiunto o modificato.\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onSaveRecord(event: Record) {\r\n // this.getRecordsByFormID();\r\n this.saveRecord.emit(event);\r\n // if (this.onSaveBackToList) {\r\n // this.viewMode = DynamicModuleViewModeEnum.LIST;\r\n // } else {\r\n // this.viewMode = DynamicModuleViewModeEnum.NONE;\r\n // }\r\n this.viewMode = this.onBackTo\r\n }\r\n\r\n /**\r\n * Metodo per gestire il componente dopo che e stata richiesta una aggiunto o una modifica del record nell' add-form-record.\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onAfterSaveRecord(event: Record) {\r\n this.afterSaveRecord.emit(event);\r\n // if (this.onSaveBackToList) {\r\n // this.viewMode = DynamicModuleViewModeEnum.LIST;\r\n // } else {\r\n // this.viewMode = DynamicModuleViewModeEnum.NONE;\r\n // }\r\n this.viewMode = this.onBackTo\r\n }\r\n\r\n\r\n onSaveJson(record: string) {\r\n this.SaveJSON.emit(record);\r\n }\r\n // #endregion SAVE\r\n\r\n\r\n\r\n\r\n\r\n\r\n reload(){\r\n this.loader = false;\r\n setTimeout(\r\n () => this.loader = true,\r\n 50\r\n )\r\n }\r\n\r\n //#region DELETE \r\n /**\r\n * Metodo per eliminare un record dalla lista.\r\n * @param record Record da eliminare selezionato sulla eqp-table.\r\n */\r\n onDeleteRecord(record: Record) {\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records.DeleteEndPoint\r\n ) {\r\n EqpDynamicModuleDialogService.Confirm(\r\n \"Eliminare il record selezionato?\",\r\n () => {\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: record.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.DeleteEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n // this.getRecordsByFormID();\r\n this.afterDeleteRecord.emit(record);\r\n // this.reloadTables()\r\n this.reload();\r\n }\r\n );\r\n },\r\n false,\r\n \"Richiesta conferma\"\r\n );\r\n } else {\r\n this.deleteRecord.emit(record);\r\n }\r\n }\r\n onAfterDeleteRecord(record: Record) {\r\n this.loader = false\r\n setTimeout(() => this.ngOnInit(), 50 )\r\n this.afterDeleteRecord.emit(record);\r\n }\r\n //#ednregion DELETE \r\n\r\n onAfterFilter(ev){\r\n this.afterFilter.emit(ev);\r\n }\r\n\r\n}\r\n","<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[debugMode]=\"debugMode\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n [additionalParams]=\"dynamicModuleCompileConfig.additionalParams\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [highlightFilter]=\"highlightFilter\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n","import { NgModule } from '@angular/core';\r\n\r\n//Angular Material Components\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatGridListModule,\r\n MatCardModule,\r\n MatStepperModule,\r\n MatTabsModule,\r\n MatExpansionModule,\r\n MatButtonToggleModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule\r\n ],\r\n exports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatGridListModule,\r\n MatCardModule,\r\n MatStepperModule,\r\n MatTabsModule,\r\n MatExpansionModule,\r\n MatButtonToggleModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule\r\n ],\r\n})\r\nexport class MaterialModule { }","import { TemplateRef } from \"@angular/core\";\r\nimport { MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Form } from \"./form.model\";\r\n\r\nexport class DynamicModuleConfiguratorSpecificConfig {\r\n form: Form = new Form();\r\n orgaID: string = null;\r\n UserID: number = 0;\r\n innerFormManagment: boolean = false;\r\n innerFormRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n constructor(\r\n form: Form = new Form(),\r\n orgaID: string = null,\r\n UserID: number = 0,\r\n innerFormManagment: boolean = false,\r\n innerFormRef: MatDialogRef<TemplateRef<any>> = null\r\n ) {\r\n this.form = form;\r\n this.orgaID = orgaID;\r\n this.UserID = UserID;\r\n this.innerFormManagment = innerFormManagment;\r\n this.innerFormRef = innerFormRef;\r\n }\r\n}\r\n","import { Context } from \"./context.model\";\r\nimport { DynamicModuleViewModeEnum } from \"./dynamicModuleViewModeEnum\";\r\nimport { EndPointConfiguration } from \"./endPointConfiguration.model\";\r\nimport { RecordButton } from \"./record.model\";\r\n\r\nexport class DynamicModuleGeneralConfig {\r\n /**\r\n * Url del server da chiamare per recuperare, salvare o eliminare i record.\r\n * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n */\r\n baseServerUrl: string = null;\r\n\r\n /**\r\n * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n */\r\n userToken: string = null;\r\n\r\n /**\r\n * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n */\r\n endPointConfiguration: EndPointConfiguration = null;\r\n\r\n context: Context = new Context();\r\n\r\n /**\r\n * imposta la modalità di lavoro del componente COMPILE/LIST/REPAIR\r\n */\r\n // starterViewMode: DynamicModuleViewModeEnum = DynamicModuleViewModeEnum.LIST;\r\n /**\r\n * Specifica del form da visualizzare DynaForms.ID\r\n */\r\n // formID: string;\r\n\r\n constructor( baseServerUrl: string = \"\", userToken: string = \"\", context: Context = new Context(), endPointConfiguration: EndPointConfiguration = null){\r\n this.baseServerUrl = baseServerUrl;\r\n this.userToken = userToken;\r\n this.context = context;\r\n this.endPointConfiguration = endPointConfiguration;\r\n }\r\n}\r\n","import { tick } from \"@angular/core/testing\";\r\nimport { DynamicModuleConfiguratorSpecificConfig } from \"./dynamicModuleConfiguratorSpecificConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"./dynamicModuleGeneralConfig.model\";\r\n\r\nexport class DynamicModuleConfiguratorConfig {\r\n dynamicModuleGeneralConfig: DynamicModuleGeneralConfig;\r\n dynamicModuleConfiguratorSpecificConfig: DynamicModuleConfiguratorSpecificConfig\r\n\r\n constructor( general: DynamicModuleGeneralConfig = new DynamicModuleGeneralConfig(), specific: DynamicModuleConfiguratorSpecificConfig = new DynamicModuleConfiguratorSpecificConfig()) {\r\n this.dynamicModuleGeneralConfig = general\r\n this.dynamicModuleConfiguratorSpecificConfig = specific\r\n }\r\n}\r\n","export class Formula {\r\n formula:string;\r\n current_number:number = 0;\r\n prev_number:number = 0;\r\n stack:string[] = [];\r\n start:boolean = false; \r\n dotted:boolean = false; // input number having dot\r\n is_operand:boolean = false;\r\n radians:boolean = true;\r\n operation:string = '';\r\n memory:number = 0;\r\n in_memory:boolean = false;\r\n bracket:boolean = false;\r\n secondScreen:boolean = false;\r\n\r\n constructor(formula:string='') {\r\n this.formula=formula;\r\n }\r\n\r\n get() {\r\n return this.formula;\r\n }\r\n\r\n parse(value:string):number {\r\n return parseFloat(value);\r\n }\r\n\r\n getCurrentNumber() {\r\n return this.parse(this.formula);\r\n }\r\n\r\n setRadians(switcher:boolean):boolean {\r\n this.radians=switcher;\r\n return this.radians;\r\n }\r\n\r\n\r\n clear():string {\r\n this.formula = '0';\r\n\r\n this.dotted = false;\r\n this.is_operand = false;\r\n this.operation = '';\r\n this.start = false;\r\n this.stack = [];\r\n this.bracket = false;\r\n return this.formula;\r\n }\r\n\r\n clearMemory() {\r\n this.memory = 0;\r\n this.in_memory = false;\r\n }\r\n\r\n sumToMemory() {\r\n let value=this.getCurrentNumber();\r\n this.memory += value;\r\n this.in_memory = true;\r\n this.start = true;\r\n }\r\n\r\n deductToMemory() {\r\n let value=this.getCurrentNumber();\r\n this.memory -= value;\r\n this.in_memory = true;\r\n this.start = true;\r\n }\r\n\r\n readMemory():string {\r\n this.formula=this.memory.toString();\r\n return this.formula;\r\n }\r\n\r\n addBracket(value:string):void {\r\n // brackets can be set only if we have not set them before and we set operand (if we set brackets first - it will not make sense)\r\n if (value == '(' && this.bracket == false && this.is_operand == true) {\r\n this.stack.push(value);\r\n this.bracket = true;\r\n this.is_operand = false;\r\n }\r\n if (value == ')' && this.bracket == true && this.is_operand != true) {\r\n this.bracket = false;\r\n this.stack.push(this.formula);\r\n this.stack.push(')');\r\n this.is_operand = false;\r\n this.start = true;\r\n this.formula=eval(this.stack.join('')).toString();\r\n this.stack=[this.formula];\r\n }\r\n }\r\n\r\n setOperation(operand:string):void {\r\n this.operation=operand;\r\n // If operator already set - nothing doing\r\n if (this.is_operand) {\r\n this.operation = operand;\r\n return null;\r\n }\r\n this.is_operand = true;\r\n this.stack.push(this.formula);\r\n this.stack.push(this.operation);\r\n this.start=true;\r\n }\r\n\r\n calculate():number {\r\n let result:number;\r\n if (this.stack.length<3) return;\r\n this.is_operand = false;\r\n this.current_number=this.parse(this.stack.pop());\r\n this.operation=this.stack.pop();\r\n this.prev_number=this.parse(this.stack.pop());\r\n if (!this.prev_number) return 0;\r\n\r\n switch (this.operation) {\r\n case '+':\r\n result=this.prev_number+this.current_number;\r\n this.show(result);\r\n break;\r\n case '-':\r\n result=this.prev_number-this.current_number;\r\n this.show(result);\r\n break;\r\n case '*':\r\n result=this.prev_number*this.current_number;\r\n this.show(result);\r\n break;\r\n case '/':\r\n result=this.prev_number/this.current_number;\r\n this.show(result);\r\n break;\r\n case 'sqrt':\r\n result=Math.pow(this.prev_number,1/this.current_number);\r\n this.show(result);\r\n break;\r\n case 'pow':\r\n result=Math.pow(this.prev_number,this.current_number);\r\n this.show(result);\r\n break;\r\n case 'yx':\r\n result = Math.pow(this.current_number, this.prev_number);\r\n this.show(result);\r\n break;\r\n case 'log':\r\n result = Math.log(this.prev_number) / Math.log(this.current_number);\r\n break;\r\n }\r\n\r\n this.current_number=this.parse(this.formula);\r\n\r\n this.start=true;\r\n return result;\r\n }\r\n\r\n\r\n addValue(value:string,start:boolean):string {\r\n if (start || this.start || (this.dotted == false && this.formula == '0' && value != '.')) {\r\n this.formula='';\r\n }\r\n this.start=start;\r\n if (value=='.') {\r\n if (this.dotted==true) {\r\n return this.formula; \r\n }\r\n this.dotted=true;\r\n }\r\n this.formula+=value;\r\n this.is_operand = false;\r\n return this.formula;\r\n }\r\n\r\n removeSymbol():void {\r\n let len=this.formula.length;\r\n let last_symbol=this.formula.substring(len - 1,len);\r\n if (last_symbol == '.') {\r\n this.dotted=false;\r\n }\r\n this.formula=this.formula.slice(0,-1);\r\n }\r\n\r\n singleton(operand:string,data:any):number {\r\n let result:number=0;\r\n let rad:number=0;\r\n let grad=180/Math.PI;\r\n this.current_number=parseFloat(this.formula);\r\n \r\n switch (operand) {\r\n case 'invert':\r\n result=this.current_number*data;\r\n break;\r\n case 'sqrt':\r\n result=Math.sqrt(this.current_number);\r\n break;\r\n case 'sqrt3':\r\n result=Math.pow(this.current_number,1/3);\r\n break;\r\n case 'ln':\r\n result=Math.log(this.current_number);\r\n break;\r\n case 'lg':\r\n result=Math.log(this.current_number)/Math.log(data);\r\n break;\r\n case 'pow_base':\r\n let base=data=='e' ? Math.E : data;\r\n result=Math.pow(base,this.current_number);\r\n break;\r\n case 'pow':\r\n let step=parseFloat(data);\r\n result=Math.pow(this.current_number,step);\r\n break;\r\n case 'div':\r\n result=1/this.current_number;\r\n break;\r\n case 'sin':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=Math.sin(rad);\r\n break;\r\n case 'cos':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=Math.cos(rad);\r\n break;\r\n case 'tan':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=Math.tan(rad);\r\n break;\r\n case 'sinh':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=(Math.exp(rad)-Math.exp(-rad))/2;\r\n break;\r\n case 'cosh':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=(Math.exp(rad)+Math.exp(-rad))/2;\r\n break;\r\n case 'tanh':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=(Math.exp(rad)-Math.exp(-rad))/(Math.exp(rad)+Math.exp(-rad));\r\n break;\r\n case 'asin':\r\n result=Math.asin(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'acos':\r\n result=Math.acos(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'atan':\r\n result=Math.atan(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'asinh':\r\n result=Math.asinh(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'acosh':\r\n result=Math.acosh(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'atanh':\r\n result=Math.atanh(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'rand':\r\n result=Math.random();\r\n break;\r\n case 'factorial':\r\n let n=Math.ceil(this.current_number);\r\n result=1;\r\n for (let i=1;i<=n;i++) {\r\n result*=i;\r\n }\r\n break;\r\n case 'percent':\r\n result=this.current_number/100;\r\n break;\r\n case 'ee':\r\n this.formula=this.current_number.toExponential();\r\n return 0;\r\n }\r\n\r\n this.start=true;\r\n this.show(result);\r\n return result;\r\n }\r\n\r\n show(value:number):string {\r\n this.formula=value.toString();\r\n return this.formula;\r\n }\r\n}","import { Component, OnInit, Inject, OnChanges, SimpleChanges, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'\r\nimport { Formula } from '../../../modules/formula.model';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { BaseField } from '../../../models/baseField.model';\r\n\r\n@Component({\r\n selector: 'eqp-dynamic-module-add-formula-component',\r\n templateUrl: './add-formula-field.component.html',\r\n styleUrls: ['./add-formula-field.component.scss']\r\n})\r\n\r\nexport class AddFormulaComponent implements OnInit, OnChanges {\r\n\r\n @ViewChild('formula', { static: false }) formulaTextArea: ElementRef<HTMLTextAreaElement>;\r\n caretPosition: number = 0;\r\n fieldNull: boolean = true;\r\n formula = new Formula('0');\r\n stringaFormula: string = \"\";\r\n counter: number = 0;\r\n Fields: Array<BaseField> = [];\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any,\r\n public dialogRef: MatDialogRef<AddFormulaComponent>,\r\n public dialog: MatDialog) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.Fields = this.data.fields;\r\n if (this.Fields != undefined)\r\n if (this.Fields.length == 0) {\r\n this.fieldNull = true;\r\n } else {\r\n this.fieldNull = false;\r\n }\r\n\r\n if (this.data.formula != undefined && this.data.formula != null && this.data.formula != \"\" && this.data.formula != \"undefined\") {\r\n this.stringaFormula = this.data.formula;\r\n localStorage.setItem(\"formula\", this.data.formula);\r\n } else {\r\n localStorage.setItem(\"formula\", \"\");\r\n }\r\n }\r\n\r\n clear(): any {\r\n this.stringaFormula = \"\";\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.caretPosition = this.formulaTextArea.nativeElement.selectionStart;\r\n }\r\n lostFocus(textArea) {\r\n this.caretPosition = textArea.selectionStart;\r\n\r\n }\r\n back() {\r\n\r\n if (localStorage.getItem('formula') != undefined || localStorage.getItem('formula') != null || localStorage.getItem('formula') != \"undefined\") {\r\n this.dialogRef.close({ formula: localStorage.getItem('formula').toString() });\r\n localStorage.removeItem('formula');\r\n }\r\n else\r\n this.dialogRef.close({ formula: \" \" });\r\n }\r\n addSymbol(value: string): void {\r\n this.stringaFormula = this.stringaFormula.trim()\r\n let lastChar = this.stringaFormula.charAt(this.stringaFormula.length - 1);\r\n if (lastChar == '+' || lastChar == '-' || lastChar == '*' || lastChar == '/') {\r\n if (this.caretPosition != 0) {\r\n var substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + \" \" + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + \" \" + value;\r\n }\r\n\r\n }\r\n else {\r\n if (this.caretPosition != 0) {\r\n var substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + \" * \" + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + \" * \" + value;\r\n }\r\n\r\n }\r\n }\r\n\r\n addListNumberReader() {\r\n this.counter++;\r\n const value = \"let value\" + this.counter + \" = 0; let elenco\" + this.counter + \" = INSERISCI_IL_TUO_ELENCO; if (elenco\" + this.counter + \" != null && elenco\" + this.counter + \".constructor == Array){ for (let i = 0; i < elenco\" + this.counter + \".length; i++) { value\" + this.counter + \" += elenco\" + this.counter + \"[i]; } } else { value\" + this.counter + \" = elenco\" + this.counter + \" }\";\r\n this.addNumber(value);\r\n }\r\n\r\n addListStringrReader() {\r\n this.counter++;\r\n const value = \"let value\" + this.counter + \" = \\\"\\\"; let elenco\" + this.counter + \" = INSERISCI_IL_TUO_ELENCO; if (elenco\" + this.counter + \" != null && elenco\" + this.counter + \".constructor == Array){ for (let i = 0; i < elenco\" + this.counter + \".length; i++) { value\" + this.counter + \" += elenco\" + this.counter + \"[i]; } } else { value\" + this.counter + \" = elenco\" + this.counter + \" }\";\r\n this.addNumber(value);\r\n }\r\n\r\n addArrayList(): void {\r\n this.counter++;\r\n const value = \"var outputList\" + this.counter + \" = { \\\"key\\\" : value , \\\"key2\\\" : value2 }; outputList\" + this.counter + \";\";\r\n this.addNumber(value);\r\n }\r\n\r\n addNumber(value: string): void {\r\n this.stringaFormula = this.stringaFormula.trim();\r\n if (UtilityHelperService.isNumeric(value)) {\r\n if (this.caretPosition != 0) {\r\n let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + value;\r\n }\r\n this.caretPosition += 1;\r\n }\r\n else {\r\n if (value == \".\") {\r\n if (this.caretPosition != 0) {\r\n let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + value;\r\n }\r\n } else {\r\n if (this.caretPosition != 0) {\r\n let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + \" \" + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + \" \" + value;\r\n }\r\n }\r\n this.caretPosition += 2;\r\n }\r\n }\r\n\r\n save() {\r\n this.stringaFormula = this.stringaFormula.trim();\r\n if (UtilityHelperService.stringCheckParentesis(this.stringaFormula)) {\r\n localStorage.removeItem('formula');\r\n this.dialogRef.close({ formula: this.stringaFormula });\r\n }\r\n else {\r\n this.dialog.open(DialogDataExampleDialog, {\r\n });\r\n }\r\n }\r\n\r\n public drag_handler(event: any) {\r\n var data = event.dataTransfer.getData(\"Text\");\r\n }\r\n\r\n public dragend_handler(event: any) {\r\n event.target.preview.parentNode.removeChild(event.target.preview);\r\n var data = event.dataTransfer.getData(\"Text\");\r\n }\r\n\r\n public dragenter_handler(event: any) {\r\n if (event.target.className == \"droptarget\") {\r\n event.target.style.backgroundColor = \"lightblue\";\r\n event.target.style.border = \"3px dotted red\";\r\n }\r\n }\r\n\r\n public dragleave_handler(event: any) {\r\n event.currentTarget.style.background = \"white\";\r\n if (event.target.className == \"droptarget\") {\r\n event.target.style.border = \"\";\r\n }\r\n }\r\n\r\n public dragstart_handler(event: any) {\r\n const preview = event.target.cloneNode(true);\r\n event.target.preview = preview;\r\n preview.className = 'preview';\r\n preview.style.cssText = `position: absolute; top: -100%; left: -100%; width: ${event.target.offsetWidth}px; `;\r\n document.body.appendChild(preview);\r\n event.dataTransfer.setDragImage(preview, 0, 0);\r\n event.dataTransfer.setData('text/plain', \"rec.\" + event.target.dataset.dragData);\r\n }\r\n\r\n public drop_handler(event: any) {\r\n event.preventDefault();\r\n var data = event.dataTransfer.getData(\"Text\");\r\n event.currentTarget.style.background = \"white\";\r\n }\r\n\r\n public dragover_handler(event: any) {\r\n event.currentTarget.style.background = \"lightyellow\";\r\n event.preventDefault();\r\n }\r\n\r\n}\r\n\r\n@Component({\r\n selector: 'dialog-data-example',\r\n templateUrl: 'dialog-data-example.component.html'\r\n})\r\nexport class DialogDataExampleDialog {\r\n constructor() { }\r\n}","<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea\r\n name=\"formula\"\r\n #formula\r\n type=\"textarea\"\r\n id=\"formula\"\r\n rows=\"10\"\r\n style=\"width: 100%\"\r\n class=\"droptarget\"\r\n (click)=\"lostFocus(formula)\"\r\n (keyup)=\"lostFocus(formula)\"\r\n (blur)=\"lostFocus(formula)\"\r\n [(ngModel)]=\"stringaFormula\"\r\n ></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"p-1 form-group\">\r\n <form method=\"POST\" class=\"alert alert-secondary\">\r\n <div class=\"w-100\">\r\n <div class=\"row pt-2\">\r\n <div class=\"col\"></div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addListStringrReader()\"\r\n >\r\n Leggi Elenco Txt\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addListNumberReader()\"\r\n >\r\n Leggi Elenco Num\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addArrayList()\"\r\n >\r\n ArrayList\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"\r\n addNumber(\r\n 'if( Condizione ) { se vera } else { se falsa }'\r\n )\r\n \"\r\n >\r\n IF\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('/100')\"\r\n >\r\n %\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-danger\"\r\n (click)=\"clear()\"\r\n >\r\n C\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('/')\"\r\n >\r\n ÷\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,2)')\"\r\n >\r\n x<sup>2</sup>\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,3)')\"\r\n >\r\n x<sup>3</sup>\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore , potenza )')\"\r\n >\r\n x<sup>y</sup>\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber(' * 3.14 ')\"\r\n >\r\n ℼ\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('7')\"\r\n >\r\n 7\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('8')\"\r\n >\r\n 8\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('9')\"\r\n >\r\n 9\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('*')\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sqrt( valore )')\"\r\n >\r\n <sup>2</sup>√x\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( radice , 1/ valore )')\"\r\n >\r\n <sup>y</sup>√x\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log( valore )')\"\r\n >\r\n ln\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log10( valore )')\"\r\n >\r\n log\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('4')\"\r\n >\r\n 4\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('5')\"\r\n >\r\n 5\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('6')\"\r\n >\r\n 6\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('-')\"\r\n >\r\n −\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sin( valore )')\"\r\n >\r\n sin\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.cos( valore )')\"\r\n >\r\n cos\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.tan( valore )')\"\r\n >\r\n tan\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('* 2.718281828459045')\"\r\n >\r\n e\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('1')\"\r\n >\r\n 1\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('2')\"\r\n >\r\n 2\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('3')\"\r\n >\r\n 3\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('+')\"\r\n >\r\n +\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('0')\"\r\n >\r\n 0\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('.')\"\r\n >\r\n .\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"back()\"\r\n >\r\n Annulla\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"save()\"\r\n >\r\n Salva\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3 p-2 overflow-auto\" style=\"max-height: 80vh;\">\r\n <div\r\n [hidden]=\"fieldNull\"\r\n cdkDropList\r\n cdkDropListOrientation=\"vertical\"\r\n class=\"example-list\"\r\n >\r\n <div\r\n class=\"example-box\"\r\n draggable=\"true\"\r\n (drag)=\"drag_handler($event)\"\r\n (dragend)=\"dragend_handler($event)\"\r\n (dragenter)=\"dragenter_handler($event)\"\r\n (dragleave)=\"dragleave_handler($event)\"\r\n (dragover)=\"dragover_handler($event)\"\r\n (dragstart)=\"dragstart_handler($event)\"\r\n (drop)=\"drop_handler($event)\"\r\n [attr.data-drag-data]=\"field.Label\"\r\n *ngFor=\"let field of Fields\"\r\n cdkDrag\r\n >\r\n {{ field.Label }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","<h1 mat-dialog-title>Errore!</h1>\r\n<div mat-dialog-content>\r\n La funzione inserita contiene parentesi non chiuse! prima di salvare controlla la funzione.\r\n \r\n</div>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport {\r\n AttachmentType,\r\n EqpAttachmentsComponent,\r\n IAttachmentDTO,\r\n} from \"@eqproject/eqp-attachments\";\r\nimport { PickerModeEnum } from \"@eqproject/eqp-datetimepicker\";\r\nimport { EnumHelper } from \"@eqproject/eqp-select\";\r\nimport { ConfigColumn, TypeColumn } from \"@eqproject/eqp-table\";\r\nimport {\r\n BaseField,\r\n ColSpanSizesEnum,\r\n FieldTypeEnum,\r\n} from \"../../../models/baseField.model\";\r\nimport {\r\n AttachmentField,\r\n AvailableFileExtensions,\r\n AvailableImageExtensions,\r\n} from \"../../../models/fields/attachmentField.model\";\r\nimport {\r\n BooleanField,\r\n BoolPresentantioEnum,\r\n} from \"../../../models/fields/booleanField.model\";\r\nimport {\r\n DateField,\r\n DateTimeTypeEnum,\r\n} from \"../../../models/fields/dateField.model\";\r\nimport { ImageField } from \"../../../models/fields/imageField.model\";\r\nimport {\r\n ButtonImage,\r\n ListPresentationEnum,\r\n ListValueField,\r\n} from \"../../../models/fields/listValueField.model\";\r\nimport { LookupField } from \"../../../models/fields/lookupField.model\";\r\nimport { NumericField } from \"../../../models/fields/numericField.model\";\r\nimport { TextareaField } from \"../../../models/fields/textareaField.model\";\r\nimport {\r\n TextMaskEnum,\r\n TextField,\r\n} from \"../../../models/fields/textField.model\";\r\nimport { FormFieldGroup } from \"../../../models/form.model\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\n\r\n@Component({\r\n selector: \"eqp-dynamic-module-add-form-field\",\r\n templateUrl: \"./add-form-field.component.html\",\r\n styleUrls: [\"./add-form-field.component.scss\"],\r\n})\r\nexport class AddFormFieldComponent implements OnInit {\r\n \r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element)\r\n }\r\n }\r\n\r\n @Input() field: BaseField | any;\r\n @Input() indexField: number;\r\n @Input() formFieldsGroups: Array<FormFieldGroup>;\r\n /** Elenco dei Field creati nella form, usati per popolare l'autocomplete della proprietà Formula. */\r\n @Input() availableFields: Array<BaseField>;\r\n @Input() fieldTypesToExclude: Array<FieldTypeEnum> = [\r\n FieldTypeEnum[\"Form di dettaglio\"],\r\n ];\r\n\r\n fieldFormGroup: UntypedFormGroup;\r\n keyValueObject: { key: string; value: string } = { key: \"\", value: \"\" };\r\n availableColSpanSizes: Array<ColSpanSizesEnum> = [];\r\n formulaAutocompleteOptions: Array<{ label: string; value: string }>;\r\n VisibleIfAutocompleteOptions: Array<{ label: string; value: string }>;\r\n AvailableFileExtensions = AvailableFileExtensions;\r\n AvailableImageExtensions = AvailableImageExtensions;\r\n\r\n @Output() saveFieldEvent: EventEmitter<BaseField | any> = new EventEmitter<\r\n BaseField | any\r\n >();\r\n\r\n //#region Template dei vari pezzi di form per la creazione di un campo(in base al tipo scelto).\r\n fieldTypeFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"textFieldFormTemplate\", { static: true })\r\n textFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"textareaFieldFormTemplate\", { static: true })\r\n textareaFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"booleadFieldFormTemplate\", { static: true })\r\n booleadFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"dateFieldFormTemplate\", { static: true })\r\n dateFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"numericFieldFormTemplate\", { static: true })\r\n numericFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"attachmentFieldFormTemplate\", { static: true })\r\n attachmentFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"imageFieldFormTemplate\", { static: true })\r\n imageFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"listValueFieldFormTemplate\", { static: true })\r\n listValueFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"lookupFieldFormTemplate\", { static: true })\r\n lookupFieldFormTemplate: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Proprietà per gestire i metadata nei campi ti dipo Allegato o Immagine\r\n metadataColumns: Array<ConfigColumn>;\r\n //@ViewChild('metadataFieldsTable', { static: false }) metadataFieldsTable: EqpTableComponent;\r\n selectedMetadata: BaseField;\r\n //indexSelectedMetadata: number;\r\n //dialogMetadataRef: MatDialogRef<TemplateRef<any>>;\r\n dialogFormulaRef: MatDialogRef<TemplateRef<any>>;\r\n dialogVisibleIfRef: MatDialogRef<TemplateRef<any>>;\r\n //@ViewChild('dialogMetadata', { static: true }) dialogMetadata: TemplateRef<any>;\r\n @ViewChild(\"dialogFormula\", { static: true }) dialogFormula: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Proprietà per gestire le immagini nei capi di tipo elenco generico\r\n @ViewChild(\"buttonImagesKeyValueInputColumn\", { static: true })\r\n buttonImagesKeyValueInputColumn: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Enumeratori usati nell'html\r\n FieldTypeEnum = FieldTypeEnum;\r\n BoolPresentantioEnum = BoolPresentantioEnum;\r\n DateTimeTypeEnum = DateTimeTypeEnum;\r\n ListPresentationEnum = ListPresentationEnum;\r\n TextMaskEnum = TextMaskEnum;\r\n AttachmentType = AttachmentType;\r\n pickerModeEnum = PickerModeEnum;\r\n subscription: any;\r\n\r\n //#endregion\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private enumHelper: EnumHelper,\r\n private dialog: MatDialog,\r\n private cdr: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (\r\n !this.fieldTypesToExclude.includes(FieldTypeEnum[\"Form di dettaglio\"])\r\n ) {\r\n this.fieldTypesToExclude.push(FieldTypeEnum[\"Form di dettaglio\"]);\r\n }\r\n\r\n this.onFieldTypeChange(false);\r\n this.availableFields = this.availableFields\r\n ? this.availableFields.filter((f) => f != this.field)\r\n : [];\r\n //this.configureColumns();\r\n }\r\n\r\n /**\r\n * Metodo per impostare i valori da suggerire nell'autocomplete del campo Formula.\r\n * Viene scatenato al focus (in questo caso viene passato il parametro a null per differenziarlo\r\n * dall'evento di click sulla tastiera) e al keyup sull'input (il parametro è diverso da null).\r\n * @param keyboardEvent Evento scatenato al keyup sulla tastiera. Se null allora il metodo è stato invocato dal focus sull'input.\r\n * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input\r\n * oppure al keyup sulla tastiera di un tasto diverso dalle frecce.\r\n */\r\n // setFormulaAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n // // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n // // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n // // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n // // si prederebbe la selezione appena fatta).\r\n // if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n // this.formulaAutocompleteOptions = UtilityHelperService.GetAutocompleteOptions(this.availableFields, this.field.Formula);\r\n // }\r\n // }\r\n setVisibleIfAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n // si prederebbe la selezione appena fatta).\r\n if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n this.VisibleIfAutocompleteOptions =\r\n UtilityHelperService.GetAutocompleteOptions(\r\n this.availableFields,\r\n this.field.VisibleIf\r\n );\r\n }\r\n }\r\n omit_special_char(event) {\r\n var k;\r\n k = event.keyCode; // k = event.keyCode; (Both can be used)\r\n if (k == 34) {\r\n event.keyCode = 0;\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Crea il FormGroup per l'aggiunta di un nuovo campo all'interno della form.\r\n * Metodo richiamato ogni volta che cambia il tipo del campo scelto o viene aggiunto/modificato un Field\r\n */\r\n createFieldForm() {\r\n this.fieldFormGroup = this.formBuilder.group({\r\n Label: [\r\n this.field.Label,\r\n [\r\n Validators.required,\r\n this.questionPoll,\r\n Validators.pattern(\"^[a-zA-Z ]*$\"),\r\n ],\r\n ],\r\n Description: [\r\n this.field.Description,\r\n [Validators.required, this.questionPoll],\r\n ],\r\n Readonly: [this.field.Readonly],\r\n Required: [this.field.Required],\r\n FieldType: [\r\n this.field.FieldType,\r\n [Validators.required, this.questionPoll],\r\n ],\r\n ColSpanSizes: [this.field.ColSpanSizes],\r\n InListView: [this.field.InListView],\r\n VisibleIf: [this.field.VisibleIf, this.questionPoll],\r\n Tooltip: [this.field.Tooltip, this.questionPoll],\r\n LabelstyleCSS: [this.field.LabelstyleCSS, this.questionPoll],\r\n FieldstyleCSS: [this.field.FieldstyleCSS, this.questionPoll],\r\n Formula: [this.field.Formula, this.questionPoll],\r\n\r\n AnswerStyleLabelstyleCSS: [this.field.AnswerStyle.LabelstyleCSS, this.questionPoll],\r\n AnswerStyleFieldstyleCSS: [this.field.AnswerStyle.FieldstyleCSS, this.questionPoll],\r\n AnswerStyleVisibleIf: [this.field.AnswerStyle.VisibleIf, this.questionPoll],\r\n AnswerStyleColSpanSizes: [this.field.AnswerStyle.ColSpanSizes],\r\n AnswerStyleInListView: [this.field.AnswerStyle.InListView],\r\n });\r\n\r\n if (this.formFieldsGroups) {\r\n this.fieldFormGroup.addControl(\r\n \"FieldGroup\",\r\n new UntypedFormControl(this.field.FieldGroup, Validators.required)\r\n );\r\n }\r\n }\r\n questionPoll(control: FormControl): { [s: string]: boolean } {\r\n // c'è un FormControl che è vuoto che da problemi (probabilmente type Data, campo Formato)\r\n if (control.value != undefined) {\r\n if (\r\n UtilityHelperService.stringCheckParentesis(\r\n control.value,\r\n control.hasValidator(Validators.required)\r\n )\r\n ) {\r\n return null;\r\n } else {\r\n return { \"Missing Parenthesis\": true };\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n stringSanitaizedValidator(control: FormControl): { [s: string]: boolean } {\r\n // c'è un FormControl che è vuoto che da problemi (probabilmente type Data, campo Formato)\r\n if (control.value != undefined) {\r\n if (\r\n UtilityHelperService.stringCheckParentesis(\r\n control.value,\r\n control.hasValidator(Validators.required)\r\n )\r\n ) {\r\n return null;\r\n } else {\r\n return { \"La formula non è valida\": true };\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n // getAllFormValidationErrors() {\r\n // Object.keys(this.fieldFormGroup.controls).forEach((key) => {\r\n // const controlErrors: ValidationErrors =\r\n // this.fieldFormGroup.get(key).errors;\r\n // if (controlErrors != null) {\r\n // Object.keys(controlErrors).forEach((keyError) => {\r\n // console.log(\r\n // \"Key control: \" + key + \", keyError: \" + keyError + \", err value: \",\r\n // controlErrors[keyError]\r\n // );\r\n // });\r\n // }\r\n // });\r\n // }\r\n\r\n /**\r\n * Metodo chiamato dai mat-error per prendere gli errori generati relativi al campo.\r\n * @param control è il nome del GroupControl di cui leggere se ci sono errori\r\n */\r\n getFormValidationErrors(control: string) {\r\n if (control == \"Label\") GlobalService.debugLog('getFormValidationErrors', this.fieldFormGroup.controls[\"Label\"]);\r\n\r\n const controlErrors: ValidationErrors =\r\n this.fieldFormGroup.controls[control].errors;\r\n let errors = [];\r\n let values = [];\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach((keyError) => {\r\n errors.push(keyError);\r\n });\r\n GlobalService.debugLog('control: ', control);\r\n GlobalService.debugLog('errors: ', errors);\r\n GlobalService.debugLog('values: ', values);\r\n }\r\n return errors.join(\", \");\r\n }\r\n\r\n /**\r\n * Metodo chiamato quando cambia il FieldType del BaseField che si sta aggiungendo/modificando.\r\n * Ricrea l'oggetto field popolando solo le proprietà del BaseField inserite dall'utente\r\n * (quelle comuni a tutte le tipologie di campo), ricrea la form e, in base al FieldType scelto,\r\n * aggiunge alla form i FormControl necessari e seleziona il template corretto da usare.\r\n * @param restoreField Se TRUE ripristina i valori base (ereditati dal modello BaseField) del campo aggiunto/modificato\r\n */\r\n onFieldTypeChange(restoreField: boolean = true) {\r\n if (restoreField) {\r\n this.restoreBaseFieldProperties();\r\n }\r\n\r\n this.createFieldForm();\r\n this.onColSpanSizeSelect();\r\n if ((this.field as BaseField).InListView == null) {\r\n this.field.InListView = true;\r\n }\r\n this.fieldTypeFormTemplate = null;\r\n\r\n switch (this.field.FieldType) {\r\n\r\n // CAMPO DI TESTO\r\n case FieldTypeEnum[\"Campo di testo\"]:\r\n if ((this.field as TextField).Microphone == null) {\r\n this.field.Microphone = false;\r\n }\r\n this.fieldFormGroup.addControl(\r\n \"TextMask\",\r\n new UntypedFormControl((this.field as TextField).TextMask)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MaxLenght\",\r\n new UntypedFormControl((this.field as TextField).MaxLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MinLenght\",\r\n new UntypedFormControl((this.field as TextField).MinLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"Microphone\",\r\n new UntypedFormControl((this.field as TextField).Microphone)\r\n );\r\n this.fieldTypeFormTemplate = this.textFieldFormTemplate;\r\n break;\r\n\r\n // AREA DI TESTO \r\n case FieldTypeEnum[\"Area di testo\"]:\r\n if ((this.field as TextareaField).Microphone == null) {\r\n this.field.Microphone = false;\r\n }\r\n this.fieldFormGroup.addControl(\r\n \"Rows\",\r\n new UntypedFormControl((this.field as TextareaField).Rows, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MaxLenght\",\r\n new UntypedFormControl((this.field as TextareaField).MaxLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MinLenght\",\r\n new UntypedFormControl((this.field as TextareaField).MinLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"Microphone\",\r\n new UntypedFormControl((this.field as TextareaField).Microphone)\r\n );\r\n this.fieldTypeFormTemplate = this.textareaFieldFormTemplate;\r\n break;\r\n\r\n // BOOLEANO\r\n case FieldTypeEnum.Booleano:\r\n this.fieldFormGroup.addControl(\r\n \"IsTristate\",\r\n new UntypedFormControl((this.field as BooleanField).IsTristate)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"PresetationType\",\r\n new UntypedFormControl(\r\n (this.field as BooleanField).PresetationType,\r\n Validators.required\r\n )\r\n );\r\n this.fieldTypeFormTemplate = this.booleadFieldFormTemplate;\r\n break;\r\n\r\n // DATA E/I ORA\r\n case FieldTypeEnum[\"Data e/o ora\"]:\r\n if (this.field.IsOnlyDate == null) {\r\n this.field.IsOnlyDate = DateTimeTypeEnum[\"Solo data\"];\r\n }\r\n this.fieldFormGroup.addControl(\r\n \"IsOnlyDate\",\r\n new UntypedFormControl((this.field as DateField).IsOnlyDate, [\r\n Validators.required,\r\n this.questionPoll,\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MinDate\",\r\n new UntypedFormControl(\r\n (this.field as DateField).MinDate,\r\n this.questionPoll\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MaxDate\",\r\n new UntypedFormControl(\r\n (this.field as DateField).MaxDate,\r\n this.questionPoll\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"DateFormat\",\r\n new UntypedFormControl((this.field as DateField).DateFormat)\r\n );\r\n this.fieldTypeFormTemplate = this.dateFieldFormTemplate;\r\n break;\r\n\r\n // CAMPO NUMERICO\r\n case FieldTypeEnum[\"Campo numerico\"]:\r\n if ((this.field as NumericField).IsInteger == null) {\r\n this.field.IsInteger = true;\r\n }\r\n\r\n this.fieldFormGroup.addControl(\r\n \"IsInteger\",\r\n new UntypedFormControl((this.field as NumericField).IsInteger)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MinValue\",\r\n new UntypedFormControl((this.field as NumericField).MinValue, [\r\n this.questionPoll,\r\n Validators.pattern(\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\"), //(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MaxValue\",\r\n new UntypedFormControl((this.field as NumericField).MaxValue, [\r\n this.questionPoll,\r\n Validators.pattern(\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\"), //(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"DecimalSeparator\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).DecimalSeparator,\r\n [this.questionPoll, Validators.pattern(\"^[a-zA-Z -/',._/\\\\^<>]+\")]\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"DecimalPrecision\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).DecimalPrecision,\r\n [this.questionPoll, Validators.pattern(\"^[0-9]+$\")]\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"ThousandsSeparator\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).ThousandsSeparator,\r\n [this.questionPoll, Validators.pattern(\"^[a-zA-Z -/',._/\\\\^<>]+\")]\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"CurrencySymbol\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).CurrencySymbol,\r\n this.questionPoll\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MeasureUnit\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).MeasureUnit,\r\n this.questionPoll\r\n )\r\n );\r\n this.fieldTypeFormTemplate = this.numericFieldFormTemplate;\r\n break;\r\n\r\n // ALLEGATO\r\n case FieldTypeEnum.Allegato:\r\n this.fieldFormGroup.addControl(\r\n \"AllowedExtensions\",\r\n new UntypedFormControl(\r\n (this.field as AttachmentField).AllowedExtensions\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiAttach\",\r\n new UntypedFormControl((this.field as AttachmentField).IsMultiAttach)\r\n );\r\n this.fieldTypeFormTemplate = this.attachmentFieldFormTemplate;\r\n break;\r\n\r\n // IMMAGINE\r\n case FieldTypeEnum.Immagine:\r\n (this.field as ImageField).AttachDefinition = new AttachmentField();\r\n this.fieldFormGroup.addControl(\r\n \"EnableDrawing\",\r\n new UntypedFormControl((this.field as ImageField).EnableDrawing)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"ImageIsContextualAttachment\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ImageIsContextualAttachment\r\n )\r\n );\r\n // Imposto i FormControl variabili.\r\n this.onImageIsContextualAttachmentChange();\r\n this.fieldTypeFormTemplate = this.imageFieldFormTemplate;\r\n break;\r\n\r\n // ELENCO GENERICO\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if ((this.field as ListValueField).InListView == null) {\r\n this.field.InListView = true;\r\n }\r\n\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiChoiche\",\r\n new UntypedFormControl((this.field as ListValueField).IsMultiChoiche)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"PresentationMode\",\r\n new UntypedFormControl(\r\n (this.field as ListValueField).PresentationMode,\r\n Validators.required\r\n )\r\n );\r\n this.fieldTypeFormTemplate = this.listValueFieldFormTemplate;\r\n\r\n break;\r\n\r\n // LOOKUP\r\n case FieldTypeEnum.Lookup:\r\n this.fieldFormGroup.addControl(\r\n \"EntitySourceName\",\r\n new UntypedFormControl(\r\n (this.field as LookupField).EntitySourceName,\r\n Validators.required\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"UseAsGetOrDiscard\",\r\n new UntypedFormControl((this.field as LookupField).UseAsGetOrDiscard)\r\n );\r\n this.fieldTypeFormTemplate = this.lookupFieldFormTemplate;\r\n break;\r\n }\r\n if (\r\n [\r\n FieldTypeEnum.Allegato,\r\n FieldTypeEnum.Immagine,\r\n FieldTypeEnum[\"Form di dettaglio\"],\r\n ].includes(this.field.FieldType)\r\n ) {\r\n this.field.Formula = null;\r\n this.fieldFormGroup.controls[\"Formula\"].disable();\r\n this.fieldFormGroup.controls[\"InListView\"].disable();\r\n } else {\r\n this.fieldFormGroup.controls[\"Formula\"].enable();\r\n this.fieldFormGroup.controls[\"InListView\"].enable();\r\n }\r\n if (\r\n [\r\n FieldTypeEnum.Allegato,\r\n FieldTypeEnum.Immagine,\r\n FieldTypeEnum[\"Form di dettaglio\"],\r\n FieldTypeEnum[\"Data e/o ora\"],\r\n ].includes(this.field.FieldType)\r\n ) {\r\n this.field.Formula = null;\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].disable();\r\n this.fieldFormGroup.controls[\"FieldstyleCSS\"].disable();\r\n } else {\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].enable();\r\n this.fieldFormGroup.controls[\"FieldstyleCSS\"].enable();\r\n }\r\n if ([FieldTypeEnum.Booleano].includes(this.field.FieldType)) {\r\n this.field.Formula = null;\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].disable();\r\n } else {\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].enable();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore della proprietà ImageIsContextualAttachment nel caso\r\n * di campi di tipo Immagine. Se TRUE allora rimuove i FormControl per le proprietà IsMultiAttach\r\n * e AllowedExtensions e aggiunge i FormControl per le proprietà ImgName e ContextualAttachment,\r\n * altrimenti il contrario.\r\n */\r\n onImageIsContextualAttachmentChange() {\r\n (this.field as ImageField).ImgName = null;\r\n (this.field as ImageField).AttachDefinition.AllowedExtensions = [];\r\n (this.field as ImageField).AttachDefinition.IsMultiAttach = false;\r\n (this.field as ImageField).ContextualAttachment = null;\r\n\r\n if ((this.field as ImageField).ImageIsContextualAttachment) {\r\n this.fieldFormGroup.removeControl(\"IsMultiAttach\");\r\n this.fieldFormGroup.removeControl(\"AllowedExtensions\");\r\n this.fieldFormGroup.addControl(\r\n \"ImgName\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ImgName,\r\n Validators.required\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"ContextualAttachment\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ContextualAttachment,\r\n Validators.required\r\n )\r\n );\r\n } else {\r\n this.fieldFormGroup.removeControl(\"ImgName\");\r\n this.fieldFormGroup.removeControl(\"ContextualAttachment\");\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiAttach\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).AttachDefinition.IsMultiAttach\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"AllowedExtensions\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).AttachDefinition.AllowedExtensions\r\n )\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per intercettare l'aggiunta di un allegato nei campi di tipo Immagine per aggiornare\r\n * il valore della proprietà ContextualAttachment e la validazione del relativo FormControl.\r\n * @param event Array contenente l'elenco aggiornato degli allegati caricati (nel nostro caso ne contiene al più 1).\r\n */\r\n catchContextualAttachmentChange(event: Array<IAttachmentDTO>) {\r\n if (event && event.length > 0) {\r\n (this.field as ImageField).ContextualAttachment = event[0];\r\n } else {\r\n (this.field as ImageField).ContextualAttachment = null;\r\n }\r\n this.fieldFormGroup.controls[\"ContextualAttachment\"].setValue(\r\n (this.field as ImageField).ContextualAttachment\r\n );\r\n }\r\n\r\n /**\r\n * Metodo invocato alla selezione di una classe nella select per le colonne di bootstrap\r\n * da usare nella visualizzazione del campo. Questa funzione manipola la sorgente dati per\r\n * la eqp-select in modo da escludere i valori dell'enumeratore che fanno riferimento ad\r\n * una larghezza di schermo già selezionata. Esempio: per gli schermi piccoli (sm) l'utente\r\n * seleziona la classe \"col-sm-6\", al change del valore questo metodo rimuove dalla select\r\n * tutti gli altri valori per la grandezza di schermo selezionata.\r\n */\r\n onColSpanSizeSelect() {\r\n // Recupero l'array degli oggetti chiave-valore che rappreseta l'enumeratore\r\n let colSizeClassEnumArray = this.enumHelper.getEnumArray(\r\n ColSpanSizesEnum,\r\n false,\r\n null\r\n );\r\n // Costruisco l'array delle classi selezionate dall'utente in formato stringa\r\n let selectedDimensions: Array<string> = this.field.ColSpanSizes\r\n ? this.field.ColSpanSizes.map((col) => ColSpanSizesEnum[col])\r\n : [];\r\n // Filtro i valori ottenuti dall'enumeratore per escludere tutti i valori per le\r\n // grandezze di schermo già selezionatead esclusione dei valori selezionati.\r\n this.availableColSpanSizes = colSizeClassEnumArray.filter(\r\n (value: { key: number; value: string }) =>\r\n !selectedDimensions.find(\r\n (col) =>\r\n value.value.includes(col.substring(4, 6)) && value.value != col\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del tipo di visualizzazione scelta per i campi di tipo elenco generico.\r\n * Se viene scelta la visualizzazione ad immagini svuota la lista delle coppie chiave-valore inserite\r\n * in precedenza, altrimenti svuota la lista delle immagini caricate.\r\n */\r\n onPresentationModeChange() {\r\n if (\r\n (this.field as ListValueField).PresentationMode ===\r\n ListPresentationEnum.Immagini\r\n ) {\r\n (this.field as ListValueField).ValuePairs = null;\r\n } else {\r\n (this.field as ListValueField).ButtonImageList = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato quando viene caricato il componente eqp-attachments per caricare le immagini da usare\r\n * nella visualizzazione ad immagini dei campi di tipo \"Elenco generico\". Aggiunge due colonne a quelle\r\n * configurate nel componente in cui l'utente può indicare chiave e valore della scelta.\r\n * @param component Istanza del componente eqp-attachments in cui effettuare la modifica.\r\n */\r\n configureButtonImagesColumns(component: EqpAttachmentsComponent) {\r\n component.attachmentsColumns.splice(\r\n component.attachmentsColumns.length - 1,\r\n 0,\r\n {\r\n key: \"ButtonKey\",\r\n display: \"Label\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.buttonImagesKeyValueInputColumn,\r\n }\r\n );\r\n component.attachmentsColumns.splice(\r\n component.attachmentsColumns.length - 1,\r\n 0,\r\n {\r\n key: \"ButtonValue\",\r\n display: \"Valore\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.buttonImagesKeyValueInputColumn,\r\n }\r\n );\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio degli allegati quando viene configurato un campo di tipo \"Elenco generico\"\r\n * con il tipo di visualizzazione ad immagini. Intercetta l'elenco aggiornato delle immagini caricate e lo\r\n * memorizza nell'oggetto field corrente.\r\n * @param attachments Array aggiornato degli allegati caricati.\r\n */\r\n catchButtonImagesChange(attachments: Array<IAttachmentDTO>) {\r\n (this.field as ListValueField).ButtonImageList =\r\n attachments as Array<ButtonImage>;\r\n }\r\n\r\n /**\r\n * Metodo chiamato al keyup degli input testuali che prevedono l'aggiunta del valore inserito in un array.\r\n * Se l'utente preme il tasto invio, in base al tipo di campo che sta inserendo/modificando, questo metodo\r\n * aggiunge il valore inserito dall'utente nella lista di stringhe corretta (in input viene passato il nome\r\n * della proprietà in cui inserire la stringa).\r\n * @param event Evento che rappresenta il keyup dell'utente\r\n * @param propertyName Nome della proprietà del field in cui inserire la stringa digitata.\r\n */\r\n onMultiSelectInputKeyup(event, propertyName: string) {\r\n if (event.code === \"Enter\" || event.code === \"NumpadEnter\") {\r\n switch (this.field.FieldType) {\r\n case FieldTypeEnum.Lookup:\r\n case FieldTypeEnum.Allegato:\r\n if (!this.field[propertyName]) {\r\n this.field[propertyName] = new Array<string>();\r\n }\r\n this.field[propertyName].push(event.currentTarget.value);\r\n break;\r\n case FieldTypeEnum.Immagine:\r\n if (!(this.field as ImageField).AttachDefinition[propertyName]) {\r\n (this.field as ImageField).AttachDefinition[propertyName] =\r\n new Array<string>();\r\n }\r\n (this.field as ImageField).AttachDefinition[propertyName].push(\r\n event.currentTarget.value\r\n );\r\n break;\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if (!this.keyValueObject.key || !this.keyValueObject.value) {\r\n return;\r\n }\r\n if (!(this.field as ListValueField).ValuePairs) {\r\n (this.field as ListValueField).ValuePairs = {};\r\n }\r\n (this.field as ListValueField).ValuePairs[this.keyValueObject.key] =\r\n this.keyValueObject.value;\r\n this.keyValueObject = { key: \"\", value: \"\" };\r\n break;\r\n }\r\n event.currentTarget.value = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo chiamato per mostrare come elenco le opzioni aggiunte in un campo di tipo \"Elenco generico\".\r\n * @returns Restituisce un array di oggetti del tipo { key: string, value: string } con i valori inseriti dall'utente.\r\n */\r\n getDictionaryKeyValue() {\r\n if ((this.field as ListValueField).ValuePairs) {\r\n return Object.keys((this.field as ListValueField).ValuePairs).map((k) => {\r\n return {\r\n key: k,\r\n value: (this.field as ListValueField).ValuePairs[k],\r\n };\r\n });\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per rimuovere una opzione aggiunta al campo di tipo \"Elenco generico\"\r\n * @param key Nome della chiave da rimuovere\r\n */\r\n deleteKeyFromDictionary(key: string) {\r\n delete (this.field as ListValueField).ValuePairs[key];\r\n }\r\n\r\n /**\r\n * Metodo per aprire il dialog per aggiungere/modificare un metadata in un campo di tipo Allegato o Immagine.\r\n * @param metadata Metadata da modificare, se null allora ne sto creando uno nuovo.\r\n */\r\n // openMetadataDialog(field: BaseField = null) {\r\n // if (field) {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // this.indexSelectedMetadata = (this.field as AttachmentField).MetadataFields.indexOf(field);\r\n // this.selectedMetadata = JSON.parse(JSON.stringify(field));\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // this.indexSelectedMetadata = (this.field as ImageField).AttachDefinition.MetadataFields.indexOf(field);\r\n // this.selectedMetadata = JSON.parse(JSON.stringify(field));\r\n // }\r\n // } else {\r\n // this.selectedMetadata = new BaseField();\r\n // this.indexSelectedMetadata = null;\r\n // }\r\n // this.dialogMetadataRef = this.dialog.open(this.dialogMetadata, {\r\n // disableClose: true,\r\n // hasBackdrop: true,\r\n // width: '75%'\r\n // });\r\n // }\r\n openFormulaDialog() {\r\n this.dialogFormulaRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n fields: this.availableFields,\r\n formula: this.field.Formula,\r\n },\r\n });\r\n this.dialogFormulaRef.afterClosed().subscribe((result) => {\r\n this.field.Formula = result.formula.toString();\r\n });\r\n }\r\n\r\n openVisibleIfDialog() {\r\n this.dialogVisibleIfRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n fields: this.availableFields,\r\n formula: this.field.VisibleIf,\r\n },\r\n });\r\n this.dialogVisibleIfRef.afterClosed().subscribe((result) => {\r\n this.field.VisibleIf = result.formula.toString();\r\n });\r\n }\r\n openAnswerStyleVisibleIfDialog() {\r\n this.dialogVisibleIfRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n fields: this.availableFields,\r\n formula: this.field.AnswerStyle.VisibleIf,\r\n },\r\n });\r\n this.dialogVisibleIfRef.afterClosed().subscribe((result) => {\r\n this.field.AnswerStyle.VisibleIf = result.formula.toString();\r\n });\r\n }\r\n\r\n stringSanitizer(value) {\r\n if (!UtilityHelperService.stringCheckParentesis(value)) {\r\n // alert(\"errore!\");\r\n }\r\n }\r\n /**\r\n * Metodo invocato dall'output dal dialog per aggiungere/modificare un metadata\r\n * nei campi di tipo Allegato o Immagine. Prima di aggiungere il metadata nell'elenco\r\n * contolla se esiste un altro metadata con lo stesso nome e nel caso genera un errore\r\n * (i metadata, come per i campi della form, devono avere un nome univoco).\r\n * @param metadata Metadata aggiunto o modificato, se null allora il dialog è stato chiuso senza fare modifiche.\r\n */\r\n // onSaveMetadata(metadata: BaseField) {\r\n // if (metadata) {\r\n // if (\r\n // (this.field.FieldType === FieldTypeEnum.Allegato\r\n // && (this.field as AttachmentField).MetadataFields\r\n // && (this.field as AttachmentField).MetadataFields.find(\r\n // (m, i) => m.Label === metadata.Label\r\n // && (this.indexSelectedMetadata == null ? true : this.indexSelectedMetadata !== i)\r\n // )\r\n // ) ||\r\n // (this.field.FieldType === FieldTypeEnum.Immagine\r\n // && (this.field as ImageField).AttachDefinition.MetadataFields\r\n // && (this.field as ImageField).AttachDefinition.MetadataFields.find(\r\n // (m, i) => m.Label === metadata.Label\r\n // && (this.indexSelectedMetadata == null ? true : this.indexSelectedMetadata !== i)\r\n // )\r\n // )\r\n // ) {\r\n // EqpDynamicModuleDialogService.Warning('Impossibile inserire due metadata con la stessa label.');\r\n // throw new Error('Impossibile inserire due metadata con la stessa label.');\r\n // }\r\n\r\n // if (this.indexSelectedMetadata != null && this.indexSelectedMetadata >= 0) {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // (this.field as AttachmentField).MetadataFields[this.indexSelectedMetadata] = metadata;\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields[this.indexSelectedMetadata] = metadata;\r\n // }\r\n // } else {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // if (!(this.field as AttachmentField).MetadataFields) {\r\n // (this.field as AttachmentField).MetadataFields = new Array<BaseField>();\r\n // }\r\n // (this.field as AttachmentField).MetadataFields.push(metadata);\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // if (!(this.field as ImageField).AttachDefinition.MetadataFields) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields = new Array<BaseField>();\r\n // }\r\n // (this.field as ImageField).AttachDefinition.MetadataFields.push(metadata);\r\n // }\r\n // }\r\n // }\r\n // this.dialogMetadataRef.close();\r\n // this.setMetadataOrdinalPosition();\r\n // this.reloadMetadataTable();\r\n // }\r\n\r\n /**\r\n * Metodo per disabilitare il pulsante per salvare il campo inserito/modificato.\r\n * @returns Restituisce un booleano, se true il salvataggio viene disabilitato.\r\n */\r\n disableSaveField(): boolean {\r\n if (this.fieldFormGroup.invalid) {\r\n return true;\r\n }\r\n\r\n switch (this.field.FieldType) {\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if (\r\n (this.field as ListValueField).PresentationMode !=\r\n ListPresentationEnum.Immagini\r\n ) {\r\n if (\r\n (this.field as ListValueField).Formula != undefined &&\r\n (this.field as ListValueField).Formula != \"\"\r\n ) {\r\n if (!(this.field as ListValueField).ValuePairs) {\r\n (this.field as ListValueField).ValuePairs = {};\r\n }\r\n return false;\r\n }\r\n\r\n if(\r\n (this.field as ListValueField).ValueString != undefined &&\r\n (this.field as ListValueField).ValueString != null &&\r\n (this.field as ListValueField).ValueString != \"\"){\r\n return false\r\n }\r\n\r\n return (\r\n !(this.field as ListValueField).ValuePairs ||\r\n (this.field as ListValueField).ValuePairs.length === 0\r\n );\r\n } else {\r\n return (\r\n !(this.field as ListValueField).ButtonImageList ||\r\n (this.field as ListValueField).ButtonImageList.length === 0 ||\r\n !!(this.field as ListValueField).ButtonImageList.find(\r\n (i) => !i.ButtonKey || !i.ButtonValue\r\n )\r\n );\r\n }\r\n case FieldTypeEnum.Lookup:\r\n return (\r\n !(this.field as LookupField).FieldNames ||\r\n (this.field as LookupField).FieldNames.length === 0\r\n );\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare il campo inserito/modificato.\r\n * Se è stato inserito un field con la stessa label viene generato un errore (le label devono essere univoche).\r\n * Una volta aggiunto/aggiornato il campo nell'elenco dei Field della Form chiude il dialog e ricarica la tabella\r\n * che mostra l'elenco dei campi aggiunti alla form.\r\n */\r\n saveAndExitAddField(save: boolean) {\r\n if (save) {\r\n GlobalService.debugLog('add-form-field save', this.field)\r\n this.saveFieldEvent.emit(this.field);\r\n } else {\r\n this.saveFieldEvent.emit(null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per ripristinare l'oggetto field al cambio del tipo selezionato.\r\n * Lascia valorizzate solo le proprietà dell'oggetto BaseField comune a tutti i tipi di campo.\r\n */\r\n private restoreBaseFieldProperties() {\r\n if (this.field) {\r\n const tmpBaseField = JSON.parse(JSON.stringify(this.field));\r\n this.field = new BaseField();\r\n this.field.Label = tmpBaseField.Label;\r\n this.field.Description = tmpBaseField.Description;\r\n this.field.Required = tmpBaseField.Required;\r\n this.field.FieldType = tmpBaseField.FieldType;\r\n this.field.Formula = tmpBaseField.Formula;\r\n this.field.ColSpanSizes = tmpBaseField.ColSpanSizes;\r\n this.field.InListView = tmpBaseField.InListView;\r\n this.field.Tooltip = tmpBaseField.Tooltip;\r\n this.field.Readonly = tmpBaseField.Readonly;\r\n this.field.FieldGroup = tmpBaseField.FieldGroup;\r\n this.field.VisibleIf = tmpBaseField.VisibleIf;\r\n }\r\n }\r\n\r\n // private configureColumns() {\r\n // this.metadataColumns = [\r\n // {\r\n // key: 'action', display: '', type: TypeColumn.MenuAction, buttonMenuIcon: 'more_vert', styles: { flex: '0 0 6%' },\r\n // actions: [\r\n // { name: 'Modifica', icon: 'edit', fn: (element, index, col) => this.openMetadataDialog(element) },\r\n // { name: 'Elimina', icon: 'delete', fn: (element, index, col) => this.deleteMetadata(element) },\r\n // ]\r\n // },\r\n // { key: 'FieldType', display: 'Tipologia', type: TypeColumn.Enum, enumModel: FieldTypeEnum },\r\n // { key: 'Label', display: 'Label' },\r\n // { key: 'Description', display: 'Descrizione' },\r\n // {\r\n // key: 'Required', display: 'Obbligatorio',\r\n // value: (element) => !!element.Required,\r\n // type: TypeColumn.Boolean,\r\n // booleanValues: {\r\n // true: '<i class=\"fa fa-check success-color\"></i>',\r\n // false: '<i class=\"fa fa-close error-color\"></i>'\r\n // },\r\n // styles: { flex: '0 0 7%', cellAlignment: CellAlignmentEnum.CENTER }\r\n // },\r\n // ];\r\n // }\r\n\r\n /**\r\n * Metodo per eliminare un metadata aggiunto per un campo di tipo Allegato o Immagine.\r\n * @param metadata Metadata da eliminare.\r\n */\r\n // private deleteMetadata(metadata: BaseField) {\r\n // EqpDynamicModuleDialogService.Confirm('Eliminare il metadata selezionato?', () => {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // (this.field as AttachmentField).MetadataFields.splice((this.field as AttachmentField).MetadataFields.indexOf(metadata), 1);\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields.splice((this.field as ImageField).AttachDefinition.MetadataFields.indexOf(metadata), 1);\r\n // }\r\n // this.setMetadataOrdinalPosition();\r\n // this.reloadMetadataTable();\r\n // }, false, 'Richiesta conferma');\r\n // }\r\n\r\n /**\r\n * Imposta l'ordinamento dei metadata all'interno dei campi di tipo Allegato e Immagine.\r\n */\r\n // private setMetadataOrdinalPosition() {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // if ((this.field as AttachmentField).MetadataFields) {\r\n // (this.field as AttachmentField).MetadataFields.forEach(metadata => {\r\n // metadata.OrdinalPosition = (this.field as AttachmentField).MetadataFields.indexOf(metadata);\r\n // });\r\n // }\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // if ((this.field as ImageField).AttachDefinition.MetadataFields) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields.forEach(metadata => {\r\n // metadata.OrdinalPosition = (this.field as ImageField).AttachDefinition.MetadataFields.indexOf(metadata);\r\n // });\r\n // }\r\n // }\r\n // }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della tabella dei metadata visualizzata nella creazione/modifica\r\n * dei campi di tipo Allegato o Immagine.\r\n */\r\n // private reloadMetadataTable() {\r\n // if (this.metadataFieldsTable) {\r\n // this.metadataFieldsTable.reloadDatatable();\r\n // }\r\n // }\r\n}\r\n","<!-- <div class=\"add-form-field bigwrapper\" style=\"max-height: 100vh !important; overflow-x: hidden; overflow-y: auto;\"> -->\r\n\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n {{indexField != null && indexField >= 0 ? \"Modifica\" : \"Aggiungi\"}} campo\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent \">\r\n <form [formGroup]=\"fieldFormGroup\" style=\"height: 100%;\">\r\n <!--#region AREA PRINCIPALE -->\r\n <div class=\"row eqp-dform-add-form-field-main\">\r\n <!--#region TIPO CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 tipoCampo\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldType'].status != 'VALID' && fieldFormGroup.controls['FieldType'].touched }\">\r\n Tipo campo *\r\n </mat-label>\r\n <eqp-select [enumData]=\"FieldTypeEnum\" [(ngModelInput)]=\"field.FieldType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'FieldType'\"\r\n [enumDataToExclude]=\"fieldTypesToExclude\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO CAMPO -->\r\n\r\n <!--#region CODICE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Label'].status != 'VALID' && fieldFormGroup.controls['Label'].touched }\">\r\n Codice *\r\n </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Label\" required matInput [(ngModel)]=\"field.Label\"\r\n (keypress)=\"omit_special_char($event)\" spellcheck=\"false\" autocomplete=\"off\"\r\n (focusout)=\"stringSanitizer(field.Label)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Label') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['pattern']\">\r\n Si possono inserire solo lettere a-z\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion CODICE -->\r\n\r\n <!--#region DESCRIZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Description'].status != 'VALID' && fieldFormGroup.controls['Description'].touched }\">\r\n Descrizione *\r\n </mat-label>\r\n <mat-form-field>\r\n <input name=\"Description\" formControlName=\"Description\" required matInput\r\n [(ngModel)]=\"field.Description\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Description)\">\r\n <!-- <mat-error *ngIf=\"!field.Description.valid && field.FormFormGroup.controls[field.Description].touched\"> -->\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Description') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion DESCRIZIONE -->\r\n\r\n <!--#region FORMULA -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Formula (Javascript) </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Formula\" matInput [(ngModel)]=\"field.Formula\"\r\n (click)=\"openFormulaDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formula)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formula') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FORMULA -->\r\n\r\n <!--#region SEZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\" *ngIf=\"formFieldsGroups\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldGroup'].status != 'VALID' && fieldFormGroup.controls['FieldGroup'].touched }\">Sezione\r\n *</mat-label>\r\n <eqp-select [arrayData]=\"formFieldsGroups\" [(ngModelInput)]=\"field.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'FieldGroup'\" required [includeFullObject]=\"false\">\r\n </eqp-select>\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldGroup') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['FieldGroup'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </div>\r\n <!--#endregion SEZIONE -->\r\n\r\n <!--#region OBBLIGATORIO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Required\" formControlName=\"Required\"\r\n color=\"primary\">\r\n Obbligatorio\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion OBBLIGATORIO -->\r\n\r\n <!--#region READONLY -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Readonly\" formControlName=\"Readonly\"\r\n color=\"primary\">\r\n ReadOnly\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion READONLY -->\r\n\r\n </div>\r\n <!--#endregion AREA PRINCIPALE -->\r\n\r\n <!--#region AREA TABS -->\r\n <mat-tab-group class=\"eqp-dform-add-form-field-tabs\" mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\r\n <!--#region STILE COMPILAZIONE -->\r\n <mat-tab label=\"Stile Compilazione\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizes\" [(ngModelInput)]=\"field.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'ColSpanSizes'\"\r\n [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['LabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['FieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n \r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['VisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n <!--#region TOOLTIP -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Tooltip </mat-label>\r\n <mat-form-field>\r\n <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput [(ngModel)]=\"field.Tooltip\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Tooltip') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion TOOLTIP -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE COMPILAZIONE -->\r\n\r\n <!--#region STILE DELLA RISPSOTA -->\r\n <mat-tab label=\"Stile Risposta\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizes\" [(ngModelInput)]=\"field.AnswerStyle.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleColSpanSizes'\"\r\n [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleLabelstyleCSS\" formControlName=\"AnswerStyleLabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleLabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleFieldstyleCSS\" formControlName=\"AnswerStyleFieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleFieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n\r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.AnswerStyle.VisibleIf != null || field.AnswerStyle.VisibleIf != undefined) && field.AnswerStyle.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.AnswerStyle.InListView\" formControlName=\"AnswerStyleInListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['AnswerStyleInListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleVisibleIf\" formControlName=\"AnswerStyleVisibleIf\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.VisibleIf\" (click)=\"openAnswerStyleVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleVisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE DELLA RISPSOTA -->\r\n\r\n <!--#region SPECIFICHE -->\r\n <mat-tab label=\"Specifiche\">\r\n <div class=\"row\">\r\n <ng-container *ngTemplateOutlet=\"fieldTypeFormTemplate\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n <!--#endregion SPECIFICHE -->\r\n\r\n </mat-tab-group>\r\n <!--#region AREA TABS -->\r\n\r\n <!--#region listValueFieldFormTemplate vallues -->\r\n \r\n <!--#endregion listValueFieldFormTemplate vallues -->\r\n\r\n </form>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-footer>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\">\r\n <!-- <div class=\"buttonsForma\"> -->\r\n <button class=\"btn mat-raised-button cancel\" (click)=\"saveAndExitAddField(false)\" type=\"button\">\r\n Annulla\r\n </button>\r\n <span class=\"me-2\"></span>\r\n <button class=\"mr-2 save\" mat-raised-button color=\"primary\" (click)=\"saveAndExitAddField(true)\"\r\n [disabled]=\"disableSaveField()\" type=\"button\">\r\n Salva\r\n </button>\r\n <!-- </div> -->\r\n </div>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- </div> -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI DI TESTO -->\r\n<ng-template #textFieldFormTemplate>\r\n <!--#region MASCHERA -->\r\n <div class=\"col-sm-12 col-md-6\">\r\n <mat-label>Maschera</mat-label>\r\n <eqp-select [enumData]=\"TextMaskEnum\" [(ngModelInput)]=\"field.TextMask\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'TextMask'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion MASCHERA -->\r\n\r\n <!--#region SPEECH TO TEXT -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SPEECH TO TEXT -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MinLenght'].status != 'VALID' && fieldFormGroup.controls['MinLenght'].touched }\">\r\n Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MaxLenght'].status != 'VALID' && fieldFormGroup.controls['MaxLenght'].touched }\">\r\n Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI DI TESTO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI AREA DI TESTO -->\r\n<ng-template #textareaFieldFormTemplate>\r\n <!--#region RIGHE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Righe </mat-label>\r\n <mat-form-field class=\"righe\">\r\n <input id=\"rows\" formControlName=\"Rows\" type=\"number\" [min]=\"0\" matInput [(ngModel)]=\"field.Rows\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Rows)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Rows') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion RIGHE -->\r\n\r\n <!--#region SpeechToText -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SpeechToText -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI AREA DI TESTO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI BOOLEANI -->\r\n<ng-template #booleadFieldFormTemplate>\r\n <!--#region A TRE STATI -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsTristate\" formControlName=\"IsTristate\" color=\"primary\">\r\n A tre stati\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion A TRE STATI -->\r\n\r\n <!--#region TIPO PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di presentazione *</mat-label>\r\n <eqp-select [enumData]=\"BoolPresentantioEnum\" [(ngModelInput)]=\"field.PresetationType\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresetationType'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO PRESENTAZIONE -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI BOOLEANI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI DATA -->\r\n<ng-template #dateFieldFormTemplate>\r\n <!--#region TIPO DI DATA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di data</mat-label>\r\n <eqp-select [enumData]=\"DateTimeTypeEnum\" [(ngModelInput)]=\"field.IsOnlyDate\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IsOnlyDate'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI DATA -->\r\n\r\n <!--#region FORMATO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Formato </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DateFormat\" matInput [(ngModel)]=\"field.DateFormat\"\r\n [matTooltip]=\"'Indicare il formato seguendo la guida del pacchetto momentjs.'\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formato)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formato') }} -->\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FORMATO -->\r\n\r\n <!--#region DATA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data minima </mat-label>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"pickerModeEnum.DATE\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"pickerModeEnum.DATETIME\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"pickerModeEnum.TIME\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MINIMA -->\r\n\r\n <!--#region DATA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data massima </mat-label>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"pickerModeEnum.DATE\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"pickerModeEnum.DATETIME\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"pickerModeEnum.TIME\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI DATA -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI NUMERICI -->\r\n<ng-template #numericFieldFormTemplate>\r\n <!--#region VALORE INTERO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsInteger\" formControlName=\"IsInteger\" color=\"primary\">\r\n Valore intero\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion VALORE INTERO -->\r\n\r\n <!--#region SEPARATORE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalSeparator\" matInput [(ngModel)]=\"field.DecimalSeparator\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.DecimalSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['pattern']\">\r\n Non è possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE DECIMALI -->\r\n\r\n <!--#region PRECISIONE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Precisione decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalPrecision\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.DecimalPrecision\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.DecimalPrecision)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalPrecision') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion PRECISIONE DECIMALI -->\r\n\r\n <!--#region SEPARATORE MIGLIAIA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore migliaia </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ThousandsSeparator\" matInput [(ngModel)]=\"field.ThousandsSeparator\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.ThousandsSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('ThousandsSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['pattern']\">\r\n Non è possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE MIGLIAIA -->\r\n\r\n <!--#region SIMBOLO VALUTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo prima del valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Simbolo valuta </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"CurrencySymbol\" matInput [(ngModel)]=\"field.CurrencySymbol\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.CurrencySymbol)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('CurrencySymbol') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['CurrencySymbol'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SIMBOLO VALUTA -->\r\n\r\n <!--#region UNITA DI MISURA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo dopo il valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Unità di misura </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MeasureUnit\" matInput [(ngModel)]=\"field.MeasureUnit\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.MeasureUnit)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MeasureUnit') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MeasureUnit'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion UNITA DI MISURA -->\r\n\r\n <!--#region VALORE MINIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore minimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MinValue\" type=\"number\" matInput [(ngModel)]=\"field.MinValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MINIMO -->\r\n\r\n <!--#region VALORE MASSIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore massimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MaxValue\" type=\"number\" matInput [(ngModel)]=\"field.MaxValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MASSIMO -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI NUMERICI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI ALLEGATO -->\r\n<ng-template #attachmentFieldFormTemplate>\r\n <!--#region ALLEGATI MULTIPLI -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiAttach\" formControlName=\"IsMultiAttach\" color=\"primary\">\r\n Allegati multipli\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion ALLEGATI MULTIPLI -->\r\n\r\n <!--#region ESTENSIONI ACCETTATE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Estensioni accettate</mat-label>\r\n <eqp-select [arrayData]=\"AvailableFileExtensions.concat(AvailableImageExtensions)\"\r\n [(ngModelInput)]=\"field.AllowedExtensions\" [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedExtensions'\"\r\n [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion ESTENSIONI ACCETTATE -->\r\n\r\n <!-- <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 col-md-6\">\r\n <div class=\"header-title-standard\">\r\n Elenco metadata\r\n </div>\r\n </div>\r\n <div class=\"col-sm-12 col-md-6 text-right buttonsForm\">\r\n <button class=\"btn btn-primary save\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"openMetadataDialog()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px;\">Aggiungi allegato</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table #metadataFieldsTable [createMatCard]=\"false\" [columns]=\"metadataColumns\"\r\n [data]=\"field.MetadataFields\" [emptyTableMessage]=\"'Nessun metadata inserito'\" [searchText]=\"'Cerca'\">\r\n </eqp-table>\r\n </div> -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI ALLEGATO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI IMMAGINE -->\r\n<ng-template #imageFieldFormTemplate>\r\n <div class=\"col-sm-12 col-md-4 mt-2 mb-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.ImageIsContextualAttachment\" formControlName=\"ImageIsContextualAttachment\"\r\n color=\"primary\" (ngModelChange)=\"onImageIsContextualAttachmentChange()\">\r\n Immagine pre-caricata nel campo\r\n </mat-slide-toggle>\r\n </div>\r\n <!-- CAMPO NASCOSTO DA RIPARARE FUNZIONAMENTO -->\r\n <div [hidden]=\"true\" class=\"col-sm-12 col-md-4 mt-2 mb-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.EnableDrawing\" formControlName=\"EnableDrawing\" color=\"primary\">\r\n Abilita il disegno\r\n </mat-slide-toggle>\r\n </div>\r\n <!-- /. CAMPO DA RIPARARE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\"\r\n *ngIf=\"!field.ImageIsContextualAttachment\">\r\n <mat-slide-toggle [(ngModel)]=\"field.AttachDefinition.IsMultiAttach\" formControlName=\"IsMultiAttach\"\r\n color=\"primary\">\r\n Immagini multiple\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" *ngIf=\"!field.ImageIsContextualAttachment\">\r\n <mat-label>Estensioni accettate</mat-label>\r\n <eqp-select [arrayData]=\"AvailableImageExtensions\" [(ngModelInput)]=\"field.AttachDefinition.AllowedExtensions\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedExtensions'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\" *ngIf=\"field.ImageIsContextualAttachment\">\r\n <mat-label> Nome immagine* </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ImgName\" matInput [(ngModel)]=\"field.ImgName\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.ImgName)\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ImgName') }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\" *ngIf=\"field.ImageIsContextualAttachment\">\r\n <eqp-attachments [attachmentsList]=\"field._contextualAttachments\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n (localEditedAttachments)=\"catchContextualAttachmentChange($event)\" #contextualAttachmentEqpAttachments>\r\n </eqp-attachments>\r\n </div>\r\n <!-- <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 col-md-6\">\r\n <div class=\"header-title-standard\">\r\n Elenco metadata\r\n </div>\r\n </div>\r\n <div class=\"col-sm-12 col-md-6 text-right buttonsForm\">\r\n <button class=\"btn btn-primary save\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"openMetadataDialog()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px;\">Aggiungi</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table #metadataFieldsTable [createMatCard]=\"false\" [columns]=\"metadataColumns\"\r\n [data]=\"field.AttachDefinition.MetadataFields\" [emptyTableMessage]=\"'Nessun metadata inserito'\"\r\n [searchText]=\"'Cerca'\">\r\n </eqp-table>\r\n </div> -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI IMMAGINE -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI LISTA DI VALORI -->\r\n<ng-template #listValueFieldFormTemplate>\r\n <!--#region SCELTA MULTIPLA -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SCELTA MULTIPLA -->\r\n\r\n <!--#region TIPO DI PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Tipo di presentazione*</mat-label>\r\n <eqp-select [enumData]=\"ListPresentationEnum\" [(ngModelInput)]=\"field.PresentationMode\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresentationMode'\"\r\n (ngModelInputChange)=\"onPresentationModeChange()\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI PRESENTAZIONE -->\r\n \r\n <!--#region GESTIONE OPZIONI CASO PRESENTAZIONE AD IMMAGINI -->\r\n <div class=\"col-sm-12 col-md-12 mt-2\" *ngIf=\"field.PresentationMode == ListPresentationEnum.Immagini\">\r\n <eqp-attachments [attachmentsList]=\"field.ButtonImageList\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"true\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"catchButtonImagesChange($event)\"\r\n (onComponentLoaded)=\"configureButtonImagesColumns($event)\">\r\n </eqp-attachments>\r\n </div>\r\n <!--#endregion GESTIONE OPZIONI CASO PRESENTAZIONE AD IMMAGINI -->\r\n\r\n <!--#region GESTIONE OPZIONI -->\r\n <div class=\"col-sm-12 mt-2\" *ngIf=\"field.PresentationMode != ListPresentationEnum.Immagini\">\r\n\r\n <mat-label> area dei valori da inserire </mat-label>\r\n <mat-form-field>\r\n <textarea matInput \r\n placeholder=\"key1|value1;key2|value2\" \r\n [(ngModel)]=\"field.ValueString\"\r\n spellcheck=\"false\" \r\n autocomplete=\"off\"\r\n >\r\n </textarea>\r\n </mat-form-field>\r\n\r\n <!-- <div class=\"row\">\r\n <h4 class=\"key-value-list-section-title\"> </h4>\r\n <div class=\"col-md-4\">\r\n <mat-label> Label opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.key\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <mat-label> Valore opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.value\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4 align-self-center\">\r\n <span class=\"mr-3\">Opzioni inserite:</span>\r\n <ul class=\"value-pairs-list\">\r\n <li *ngFor=\"let keyValuePair of getDictionaryKeyValue()\">\r\n <mat-icon class=\"mr-1\" (click)=\"deleteKeyFromDictionary(keyValuePair.key)\">close\r\n </mat-icon>\r\n <span><b>Label: </b> {{keyValuePair.key}} - <b>Valore: </b> {{keyValuePair.value}}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div> -->\r\n\r\n </div> \r\n <!--#endregion GESTIONE OPZIONI -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI LISTA DI VALORI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI LOOKUP -->\r\n<ng-template #lookupFieldFormTemplate>\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.UseAsGetOrDiscard\" formControlName=\"UseAsGetOrDiscard\" color=\"primary\"\r\n matTooltip=\"Se true la lookup viene visualizzata in una modale per lo scegli scarta\">\r\n Usa per scegli o scarta\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Nome entità </mat-label>\r\n <mat-form-field matTooltip=\"Nome dell'entità relazionata\">\r\n <input formControlName=\"EntitySourceName\" required matInput [(ngModel)]=\"field.EntitySourceName\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.EntitySourceName)\">\r\n <mat-error>\r\n {{ getFormValidationErrors('EntitySourceName') }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <mat-label> Nomi dei campi (invio per confermare) </mat-label>\r\n <mat-form-field\r\n matTooltip=\"Elenco di campi ordinato che verrà visualizzato nella lookup (premere invio per confermare)\">\r\n <input matInput (keyup)=\"onMultiSelectInputKeyup($event, 'FieldNames')\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8 align-self-center\">\r\n <span class=\"mr-3\">Nomi selezionati:</span>\r\n <div class=\"extension-container\" *ngFor=\"let extension of field.FieldNames; let i = index\">\r\n <span>{{extension}}</span>\r\n <mat-icon class=\"ml-1\" (click)=\"field.FieldNames.splice(i,1)\">close\r\n </mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI LOOKUP -->\r\n\r\n<!-- DIALOG PER AGGIUNGERE UN METADATA NEI CAMPI DI TIPO ALLEGATO O IMMAGINE -->\r\n<!-- <ng-template #dialogMetadata>\r\n <eqp-dynamic-module-add-form-field [field]=\"selectedMetadata\" [availableFields]=\"availableFields\"\r\n [indexField]=\"indexSelectedMetadata\" (saveFieldEvent)=\"onSaveMetadata($event)\" [fieldTypesToExclude]=\"[6,7,10]\">\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template> -->\r\n\r\n<ng-template #buttonImagesKeyValueInputColumn let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> {{col.display}} </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\" required spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n</ng-template>\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>","// import { ThrowStmt } from '@angular/compiler';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport {\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport {\r\n CellAlignmentEnum,\r\n ConfigColumn,\r\n EqpTableComponent,\r\n TypeColumn,\r\n} from \"@eqproject/eqp-table\";\r\nimport { NumericField } from \"../../../models/fields/numericField.model\";\r\nimport { BaseField, ColSpanSizesEnum, FieldTypeEnum } from \"../../../models/baseField.model\";\r\nimport { Context } from \"../../../models/context.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"../../../models/endPointConfiguration.model\";\r\nimport {\r\n ActionOnRecord,\r\n Form,\r\n FormFieldGroup,\r\n FormScalarTypeEnum,\r\n FormTypeEnum,\r\n} from \"../../../models/form.model\";\r\nimport { ArrayValidators } from \"../../../services/custom-form-validators.service\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { DynamicModuleCompileConfig } from \"../../../models/dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleConfiguratorConfig } from \"../../../models/dynamicModuleConfiguratorConfig.model\";\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\n\r\n@Component({\r\n selector: \"eqp-dynamic-module-configurator\",\r\n templateUrl: \"./eqp-dynamic-module-configurator.component.html\",\r\n styleUrls: [\"./eqp-dynamic-module-configurator.component.scss\"],\r\n})\r\nexport class EqpDynamicModuleConfiguratorComponent implements OnInit {\r\n \r\n @Input() debugMode: boolean = false;\r\n debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element)\r\n }\r\n }\r\n \r\n @Input() configurations: DynamicModuleConfiguratorConfig =\r\n new DynamicModuleConfiguratorConfig();\r\n @Input() formID: string = null;\r\n @Input() viewMode: string = \"addOrEdit\"; // Export\r\n\r\n loader: boolean = false;\r\n /**\r\n * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n */\r\n userToken: string = null;\r\n /**\r\n * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n */\r\n endPointConfiguration: EndPointConfiguration = null;\r\n /**\r\n * Url del server da chiamare per recuerare, salvare o eliminare i record.\r\n * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n */\r\n baseServerUrl: string = null;\r\n context: Context = new Context();\r\n\r\n /* export variables */\r\n downloadName: string;\r\n downloadJsonHref: any;\r\n stringifiedForm: string;\r\n\r\n /* import variables */\r\n importedModule: string = null; // json object\r\n dialogImportRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogImport\", { static: true }) dialogImport: TemplateRef<any>;\r\n\r\n form: Form = new Form();\r\n orgaID: string = null;\r\n UserID: number = 36;\r\n innerFormManagment: boolean = false;\r\n innerFormRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n /* CONFIGURAZIONE PER VISUALIZZAZIONE FORM CREATA */\r\n viewConfig: DynamicModuleCompileConfig = new DynamicModuleCompileConfig(\r\n true,\r\n false,\r\n false,\r\n \"0\"\r\n );\r\n\r\n formFormGroup: UntypedFormGroup;\r\n formCompleted = false;\r\n previewForm: Form;\r\n formFieldGroupName: string;\r\n\r\n actionAutocompleteOptions: Array<{ label: string; value: string }>;\r\n\r\n //#region Enumeratori usati nell'html\r\n FormTypeEnum = FormTypeEnum;\r\n FormScalarTypeEnum = FormScalarTypeEnum;\r\n //#endregion\r\n\r\n //#region Proprietà per creazione/modifica campo\r\n fieldsColumns: Array<ConfigColumn>;\r\n @ViewChild(\"fieldsTable\", { static: false }) fieldsTable: EqpTableComponent;\r\n selectedField: BaseField | any;\r\n indexSelectedField: number;\r\n actionOnRecordFormGroup: UntypedFormGroup;\r\n dialogFieldRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogField\", { static: true }) dialogField: TemplateRef<any>;\r\n @ViewChild(\"fieldSectionColumnTemplate\", { static: true })\r\n fieldSectionColumnTemplate: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Proprietà per creare/modificare una Form di dettaglio\r\n selectedInnerForm: Form;\r\n indexSelectedInnerForm: number;\r\n dialogInnerFormRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogInnerForm\", { static: true })\r\n dialogInnerForm: TemplateRef<any>;\r\n innerFormConfig: DynamicModuleConfiguratorConfig;\r\n //#endregion\r\n\r\n //#region Proprietà per creare/modificare una action sui record di una Form\r\n actionsOnRecordColumns: Array<ConfigColumn>;\r\n @ViewChild(\"actionsOnRecordTable\", { static: false })\r\n actionsOnRecordTable: EqpTableComponent;\r\n selectedAction: ActionOnRecord;\r\n indexSelectedAction: number;\r\n dialogActionOnRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogActionOnRecord\", { static: true })\r\n dialogActionOnRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n /**\r\n * Evento emesso quando si salva una form e non è stato specificato un endpoint da chiamare.\r\n */\r\n @Output() saveFormEvent: EventEmitter<Form> = new EventEmitter<Form>();\r\n\r\n /**\r\n * Evento emesso DOPO aver eseguito una chiamata al server per il salvataggiodi una form all'endpoint specificato.\r\n */\r\n @Output() afterSaveFormEvent: EventEmitter<Form> = new EventEmitter<Form>();\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private dialog: MatDialog,\r\n private utilityHelperService: UtilityHelperService,\r\n private sanitizer: DomSanitizer\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n GlobalService.debugLog('ngOnInit - configurations', this.configurations);\r\n GlobalService.debugLog('ngOnInit - formID', this.formID);\r\n\r\n this.baseServerUrl =\r\n this.configurations.dynamicModuleGeneralConfig.baseServerUrl;\r\n this.context = this.configurations.dynamicModuleGeneralConfig.context;\r\n this.endPointConfiguration =\r\n this.configurations.dynamicModuleGeneralConfig.endPointConfiguration;\r\n // this.formID = this.configurations.dynamicModuleGeneralConfig.formID;\r\n this.userToken = this.configurations.dynamicModuleGeneralConfig.userToken;\r\n\r\n this.form =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.form;\r\n this.orgaID =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.orgaID;\r\n this.UserID =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.UserID;\r\n this.innerFormManagment =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.innerFormManagment;\r\n this.innerFormRef =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.innerFormRef;\r\n\r\n this.configureDefaultEndPoints();\r\n this.getFormByID();\r\n if (this.context) {\r\n UtilityHelperService.SetContext(this.context);\r\n }\r\n this.loader = true;\r\n }\r\n\r\n /**\r\n * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n * a cui si deve connettere e al token da passare per autenticarsi.\r\n * Se la proprietà baseServerUrl è null e non sono stati configurati i vari endpoint allora\r\n * non viene eseguita nessuna chiamata http per recuperare/salvare i dati.\r\n */\r\n configureDefaultEndPoints() {\r\n if (!this.endPointConfiguration && this.baseServerUrl) {\r\n this.endPointConfiguration =\r\n this.utilityHelperService.ConfigureDefaultEndPoints(\r\n this.baseServerUrl,\r\n this.userToken\r\n );\r\n if (this.formID) {\r\n this.endPointConfiguration.Forms.GetByIDEndPoint.Params = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n }\r\n }\r\n }\r\n stringSanitizer(value) {\r\n if (!UtilityHelperService.stringCheckParentesis(value)) {\r\n alert(\"errore! erano presenti delle parentesi.\");\r\n return false\r\n } else {\r\n return true\r\n }\r\n }\r\n setName(Name: string) {\r\n if(!this.stringSanitizer(Name)){\r\n const RegExpParetesis = /[\\(\\)\\[\\]\\{\\}]/g;\r\n // Rimuovi tutte le parentesi non bilanciate\r\n this.form.Name = Name.replace(RegExpParetesis, '');\r\n }\r\n if(this.form.ID == null){ // this.form.Code == null || this.form.Code == undefined || this.form.Code == \"\" ){\r\n this.setCode(this.form.Name);\r\n }\r\n }\r\n setCode(Code: string) {\r\n this.stringSanitizer(Code);\r\n \r\n const RegExpPlain = /[^\\w]/g;\r\n this.form.Code = Code.toUpperCase().replace(RegExpPlain, \"\");\r\n }\r\n omit_special_char(event) {\r\n var k;\r\n k = event.keyCode; // k = event.keyCode; (Both can be used)\r\n if (k == 34) {\r\n event.keyCode = 0;\r\n return false;\r\n }\r\n }\r\n\r\n /* IMPORT FUNCTION */\r\n onImport(event) {\r\n const selectedFile = event.target.files[0];\r\n const fileReader = new FileReader();\r\n fileReader.readAsText(selectedFile, \"UTF-8\");\r\n fileReader.onload = () => {\r\n GlobalService.debugLog('onImport - fileReader.result.toString()', fileReader.result.toString());\r\n this.importedModule = fileReader.result.toString();\r\n\r\n if (this.importedModule != null) {\r\n if (confirm(\"stai per sovrascrivere il modulo\")) {\r\n // chiamo il parse così da non creare un referenceBinding\r\n this.setFormAndConfigure(JSON.parse(this.importedModule));\r\n this.closeImport();\r\n }\r\n } else {\r\n alert(\"seleziona un file\");\r\n }\r\n };\r\n fileReader.onerror = (error) => {\r\n alert(\"seleziona un file valido o controlla che non sia corrotto\");\r\n console.error(error);\r\n };\r\n }\r\n\r\n importModule() {\r\n this.dialogImportRef = this.dialog.open(this.dialogImport, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n // width: \"75%\",\r\n // maxHeight: \"80%\",\r\n // height: \"80%\",\r\n });\r\n }\r\n\r\n closeImport() {\r\n this.dialogImportRef.close();\r\n }\r\n /* END IMPORT FUNCTION */\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n */\r\n getFormByID() {\r\n if (\r\n this.formID &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Forms &&\r\n this.endPointConfiguration.Forms.GetByIDEndPoint\r\n ) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n /* getting ready for export */\r\n let clone = new Form();\r\n clone.Code = \"IMPORT_\" + res.Code;\r\n clone.Name = \"import_\" + res.Name;\r\n clone.Description = res.Description;\r\n clone.FormScalarType = res.FormScalarType;\r\n clone.FormFieldsGroups = res.FormFieldsGroups;\r\n clone.ActionsOnRecord = res.ActionsOnRecord;\r\n clone.Fields = res.Fields;\r\n clone.ObjectFields = res.ObjectFields;\r\n clone.InnerForms = res.InnerForms;\r\n clone.RootEntityID = res.RootEntityID;\r\n\r\n this.downloadName = \"export_\" + res.Name;\r\n this.stringifiedForm = JSON.stringify(clone);\r\n this.downloadJsonHref = this.sanitizer.bypassSecurityTrustUrl(\r\n \"data:text/json;charset=UTF-8,\" +\r\n encodeURIComponent(this.stringifiedForm)\r\n );\r\n /* end export */\r\n\r\n this.setFormAndConfigure(res);\r\n },\r\n (err) => {\r\n this.setFormAndConfigure(new Form());\r\n }\r\n );\r\n } else {\r\n this.setFormAndConfigure();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del tipo di visualizzazione della form.\r\n * Se l'utente sceglie una visualizzazione raggruppata il metodo aggiunge al FormGroup un nuovo\r\n * controllo per l'array dei nomi delle sezioni da creare.\r\n */\r\n onChangeFormScalarType() {\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n if (!this.formFormGroup.contains(\"FormFieldsGroups\")) {\r\n this.formFormGroup.removeControl(\"FormFieldsGroups\");\r\n this.formFormGroup.addControl(\r\n \"FormFieldsGroups\",\r\n new UntypedFormControl(this.form.FormFieldsGroups, [\r\n Validators.required,\r\n ArrayValidators.minLenght(1),\r\n ])\r\n );\r\n }\r\n } else {\r\n this.form.FormFieldsGroups = null;\r\n if (this.formFormGroup.contains(\"FormFieldsGroups\"))\r\n this.formFormGroup.removeControl(\"FormFieldsGroups\");\r\n }\r\n this.formFormGroup.updateValueAndValidity();\r\n this.configureColumns();\r\n }\r\n\r\n /**\r\n * Evento invocato al keyup nell'input per inserire i nomi delle sezioni per la visualizzazione\r\n * raggruppata della form. Quanto l'utente preme il tasto invio viene aggiunto il nuovo nome alle\r\n * sezioni dispobili se non ne esiste una con lo stesso nome.\r\n * @param event Evento che rappresenta il keyup sulla tastiera.\r\n */\r\n onFormFieldGroupNameKeyUp(event) {\r\n if (event.code === \"Enter\" || event.code === \"NumpadEnter\") {\r\n if (!this.form.FormFieldsGroups) {\r\n this.form.FormFieldsGroups = new Array<FormFieldGroup>();\r\n }\r\n if (\r\n !this.form.FormFieldsGroups.find(\r\n (n) => n.Name == this.formFieldGroupName\r\n )\r\n ) {\r\n this.form.FormFieldsGroups.push({ Name: this.formFieldGroupName });\r\n }\r\n // Imposto il nuovo valore del FormControl per aggiornare lo stato della form.\r\n this.formFormGroup.controls[\"FormFieldsGroups\"].setValue(\r\n this.form.FormFieldsGroups\r\n );\r\n this.formFieldGroupName = null;\r\n this.setFormFieldGroupOrdinalPosition();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per rimuovere la sezione selezionata da quelle disponibili per la form.\r\n * @param groupName Nome della sezione da eliminare.\r\n */\r\n onDeleteFormFieldGroupName(groupName: string) {\r\n this.form.FormFieldsGroups.splice(\r\n this.form.FormFieldsGroups.findIndex((g) => g.Name === groupName),\r\n 1\r\n );\r\n // Imposto il nuovo valore del FormControl per aggiornare lo stato della form.\r\n this.formFormGroup.controls[\"FormFieldsGroups\"].setValue(\r\n this.form.FormFieldsGroups\r\n );\r\n // Se esistono Field legati alla sezione che si vuole eliminare allora rompo il legame.\r\n if (this.form.Fields.find((f) => f.FieldGroup == groupName)) {\r\n this.form.Fields.filter((f) => f.FieldGroup == groupName).forEach(\r\n (f) => (f.FieldGroup = null)\r\n );\r\n }\r\n this.setFormFieldGroupOrdinalPosition();\r\n }\r\n\r\n /**\r\n * Metodo chiamato quando si vuole aggiungere un nuovo campo o si vuole modificare uno esistente.\r\n * Memorizza l'eventuale Field scelto one crea uno nuovo prima di aprire il dialog per modificarlo/aggiungerlo.\r\n * @param field Oggetto BaseField da modificare. Se null ne viene creata una nuova istanza per l'aggiunta.\r\n */\r\n openFieldDialog(field: BaseField = null) {\r\n if (field) {\r\n this.indexSelectedField = this.form.Fields.indexOf(field);\r\n this.selectedField = JSON.parse(JSON.stringify(field));\r\n if(this.selectedField.AnswerStyle == null){\r\n this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: \"\", LabelstyleCSS: \"\", ColSpanSizes: [] };\r\n }\r\n console.log('this.selectedField', this.selectedField)\r\n } else {\r\n this.selectedField = new BaseField();\r\n this.indexSelectedField = null;\r\n }\r\n this.dialogFieldRef = this.dialog.open(this.dialogField, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n height: \"80%\",\r\n });\r\n }\r\n\r\n /**\r\n * Metodo che salva il campo appena creato o modificato.\r\n * Prima del salvataggio controlla se esiste un altro campo con la stessa label, in questo\r\n * case genere un errore (i campi devono avere nomi, e quindi label, univoche - i nomi vengono\r\n * ricavati unendo le parole che formano la label tramite \"_\").\r\n * @param field Campo da salvare\r\n */\r\n onSaveField(field: BaseField) {\r\n if (field) {\r\n if (\r\n this.form.Fields &&\r\n this.form.Fields.find(\r\n (f, i) =>\r\n f.Label === field.Label &&\r\n (this.indexSelectedField == null\r\n ? true\r\n : this.indexSelectedField !== i)\r\n )\r\n ) {\r\n EqpDynamicModuleDialogService.Warning(\r\n \"Impossibile inserire due campi con lo stesso Codice.\"\r\n );\r\n throw new Error(\"Impossibile inserire due campi con lo stesso Codice.\");\r\n }\r\n\r\n if (this.indexSelectedField != null && this.indexSelectedField >= 0) {\r\n this.form.Fields[this.indexSelectedField] = field;\r\n } else {\r\n if (!this.form.Fields) {\r\n this.form.Fields = new Array<BaseField>();\r\n }\r\n this.form.Fields.push(field);\r\n }\r\n }\r\n GlobalService.debugLog(\"onSaveField\", this.form)\r\n this.closeFieldDialog();\r\n this.setFieldOrdinalPosition();\r\n this.reloadFieldsTable();\r\n }\r\n\r\n /**\r\n * Metodo che controlla se lo step per l'aggiunta dei campi nella form è concluso.\r\n * @returns Se TRUE lo step viene considerato completato ed è possbile passare al successivo.\r\n */\r\n isFieldStepCompleted(): boolean {\r\n if (!this.form.Fields) {\r\n return false;\r\n }\r\n if (\r\n this.form.FormScalarType != FormScalarTypeEnum.Semplice &&\r\n this.form.Fields.find((f) => !f.FieldGroup)\r\n ) {\r\n return false;\r\n }\r\n return this.form.Fields.length > 0;\r\n }\r\n\r\n /**\r\n * Metodo per aprire il dialog di creazione/modifica delle form di dettaglio.\r\n * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica.\r\n * @param innenrForm Form di dettaglio da modificare (se null allora vado in add).\r\n */\r\n openInnerFormDialog(innenrForm: Form = null) {\r\n this.innerFormConfig = new DynamicModuleConfiguratorConfig();\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormManagment =\r\n true;\r\n // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form\r\n // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form.OldName\r\n // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormRef\r\n // [form]=\"selectedInnerForm\"\r\n // [innerFormManagment]=\"true\"\r\n // [innerFormRef]=\"dialogInnerFormRef\"\r\n\r\n if (innenrForm) {\r\n this.indexSelectedInnerForm = this.form.InnerForms.indexOf(innenrForm);\r\n\r\n // this.selectedInnerForm = JSON.parse(JSON.stringify(innenrForm));\r\n // this.selectedInnerForm.OldName = innenrForm.Name;\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form =\r\n JSON.parse(JSON.stringify(innenrForm));\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form.OldName =\r\n innenrForm.Name;\r\n\r\n this.indexSelectedField = this.form.Fields.findIndex(\r\n (f) => f.Label === innenrForm.Name\r\n );\r\n } else {\r\n // this.selectedInnerForm = new Form();\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form =\r\n new Form();\r\n this.indexSelectedInnerForm = null;\r\n this.indexSelectedField = null;\r\n }\r\n // this.dialogInnerFormRef = this.dialog.open(this.dialogInnerForm, {\r\n\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormRef =\r\n this.dialog.open(this.dialogInnerForm, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"85%\",\r\n });\r\n }\r\n\r\n /**\r\n * Metodo scatenato al salvataggio di una form di dettaglio.\r\n * @param event Form creata/modificata dall'utente. Se è null allora l'utente ha abbandonato la configurazione.\r\n */\r\n onSaveOrExitInnerForm(event: Form) {\r\n if (event != null) {\r\n if (\r\n this.form.Name === event.Name ||\r\n (this.form.InnerForms &&\r\n this.form.InnerForms.find(\r\n (a, i) =>\r\n a.Name === event.Name &&\r\n (this.indexSelectedInnerForm == null\r\n ? true\r\n : this.indexSelectedInnerForm !== i)\r\n )) ||\r\n (this.form.Fields &&\r\n this.indexSelectedInnerForm == null &&\r\n this.form.Fields.find(\r\n (f, i) =>\r\n f.Label === event.Name &&\r\n (this.indexSelectedField == null\r\n ? true\r\n : this.indexSelectedField !== i)\r\n ))\r\n ) {\r\n EqpDynamicModuleDialogService.Warning(\r\n \"Impossibile inserire due form di dettaglio con lo stesso nome.\"\r\n );\r\n throw new Error(\r\n \"Impossibile inserire due form di dettaglio con lo stesso nome.\"\r\n );\r\n }\r\n\r\n const innerFormField: BaseField = new BaseField();\r\n innerFormField.Name = event.Name.split(\" \").join(\"_\");\r\n innerFormField.Label = event.Name;\r\n innerFormField.FieldType = FieldTypeEnum[\"Form di dettaglio\"];\r\n innerFormField.FieldGroup =\r\n this.indexSelectedField != null\r\n ? this.form.Fields[this.indexSelectedField].FieldGroup\r\n : null;\r\n\r\n if (\r\n this.indexSelectedInnerForm != null &&\r\n this.indexSelectedInnerForm >= 0\r\n ) {\r\n this.form.InnerForms[this.indexSelectedInnerForm] = event;\r\n this.form.Fields[this.indexSelectedField] = innerFormField;\r\n } else {\r\n if (!this.form.InnerForms) {\r\n this.form.InnerForms = new Array<Form>();\r\n }\r\n this.form.InnerForms.push(event);\r\n this.form.Fields.push(innerFormField);\r\n }\r\n this.reloadFieldsTable();\r\n }\r\n this.dialogInnerFormRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per aprire il dialog di creazione/modifica delle action.\r\n * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica.\r\n * @param action ActionOnRecord da modificare (se null allora vado in add).\r\n */\r\n openActionOnRecordDialog(action: ActionOnRecord = null) {\r\n if (action) {\r\n this.indexSelectedAction = this.form.ActionsOnRecord.indexOf(action);\r\n this.selectedAction = JSON.parse(JSON.stringify(action));\r\n } else {\r\n this.selectedAction = new ActionOnRecord();\r\n this.indexSelectedAction = null;\r\n }\r\n this.createActionOnRecordForm();\r\n this.dialogActionOnRecordRef = this.dialog.open(this.dialogActionOnRecord, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n });\r\n }\r\n\r\n /**\r\n * Metodo per impostare i valori da suggerire nell'autocomplete del campo Formula.\r\n * Viene scatenato al focus (in questo caso viene passato il parametro a null per differenziarlo\r\n * dall'evento di click sulla tastiera) e al keyup sull'input (il parametro è diverso da null).\r\n * @param keyboardEvent Evento scatenato al keyup sulla tastiera. Se null allora il metodo è stato invocato dal focus sull'input.\r\n * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input\r\n * oppure al keyup sulla tastiera di un tasto diverso dalle frecce.\r\n */\r\n setActionAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n // si prederebbe la selezione appena fatta).\r\n if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n this.actionAutocompleteOptions =\r\n UtilityHelperService.GetAutocompleteOptions(\r\n this.form.Fields,\r\n this.selectedAction.Action\r\n );\r\n }\r\n }\r\n /**\r\n * Metodo per salvare l'azione creata/modificate.\r\n */\r\n saveActionOnRecord() {\r\n if (\r\n this.form.ActionsOnRecord &&\r\n this.form.ActionsOnRecord.find(\r\n (a, i) =>\r\n a.Name === this.selectedAction.Name &&\r\n (this.indexSelectedAction == null\r\n ? true\r\n : this.indexSelectedAction !== i)\r\n )\r\n ) {\r\n EqpDynamicModuleDialogService.Warning(\r\n \"Impossibile inserire due action con lo stesso nome.\"\r\n );\r\n throw new Error(\"Impossibile inserire due action con lo stesso nome.\");\r\n }\r\n\r\n if (this.indexSelectedAction != null && this.indexSelectedAction >= 0) {\r\n this.form.ActionsOnRecord[this.indexSelectedAction] = this.selectedAction;\r\n } else {\r\n if (!this.form.ActionsOnRecord) {\r\n this.form.ActionsOnRecord = new Array<ActionOnRecord>();\r\n }\r\n this.form.ActionsOnRecord.push(this.selectedAction);\r\n }\r\n this.closeDialogActionOnRecord();\r\n this.setActionOrdinalPosition();\r\n this.reloadActionsOnRecordTable();\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog della inner form.\r\n */\r\n closeDialogInnerForm() {\r\n this.innerFormRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog di gestione delle action.\r\n */\r\n closeDialogActionOnRecord() {\r\n this.dialogActionOnRecordRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per segnare come conclusa la creazione della form e per crearne una copia\r\n * da visalizzare come anteprima.\r\n * @param completed Se TRUE segna la form come conclusa e ne crea una copia da visualizzare\r\n */\r\n setFormStatus(completed: boolean) {\r\n if (completed) {\r\n this.formCompleted = true;\r\n this.previewForm = JSON.parse(JSON.stringify(this.form));\r\n GlobalService.debugLog(\"previewForm\", this.previewForm)\r\n\r\n // Per visualizzare correttamente l'oanteprima della form appena creata\r\n // bisogna valorizzare la proprietà Name dei campi della form e delle InnerForms.\r\n this.previewForm.Fields.forEach((field) => {\r\n field.Name = field.Label.split(\" \").join(\"_\");\r\n });\r\n if (\r\n this.previewForm.InnerForms &&\r\n this.previewForm.InnerForms.length > 0\r\n ) {\r\n this.previewForm.InnerForms.forEach((form) => {\r\n form.Fields.forEach((field) => {\r\n field.Name = field.Label.split(\" \").join(\"_\");\r\n });\r\n });\r\n }\r\n } else {\r\n this.formCompleted = false;\r\n this.previewForm = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare la form creata alla fine del wizard.\r\n * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n * nel body della chiamata, altrimenti scatena l'evento \"saveFormEvent\".\r\n */\r\n saveForm() {\r\n if (\r\n this.endPointConfiguration != null &&\r\n this.endPointConfiguration.Forms.SaveEndPoint\r\n ) {\r\n // Per far arrivare al server l'array di Field bisogna passarli su Any\r\n this.form.ObjectFields = [];\r\n this.form.Fields.forEach((field) => {\r\n if (field.FieldType == FieldTypeEnum.Allegato) {\r\n const fldA: any = field;\r\n fldA.MetadataObjectFields = fldA.MetadataFields;\r\n fldA.MetadataFields = [];\r\n this.form.ObjectFields.push(fldA);\r\n } else {\r\n if (field.FieldType == FieldTypeEnum[\"Campo numerico\"]) {\r\n if (\r\n (<NumericField>field).MaxValue == undefined ||\r\n (<NumericField>field).MaxValue == null\r\n ) {\r\n (<NumericField>field).MaxValue = Number.MAX_SAFE_INTEGER;\r\n }\r\n if (\r\n (<NumericField>field).MinValue == undefined ||\r\n (<NumericField>field).MinValue == null\r\n ) {\r\n (<NumericField>field).MinValue = 0;\r\n }\r\n }\r\n this.form.ObjectFields.push(field);\r\n }\r\n });\r\n this.form.Fields = null;\r\n this.form.OrgaID = this.orgaID;\r\n if (this.form.CreationDate == null) {\r\n this.form.CreationDate = new Date();\r\n this.form.CreationUser = this.UserID;\r\n }\r\n this.form.ModifyUser = this.UserID;\r\n // chiamata effettiva\r\n const dynamicModuleParams = [\r\n {\r\n ParamName: \"Form\",\r\n ParamValue: this.form,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.SaveEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n EqpDynamicModuleDialogService.Success(\"Form salvata con successo!\");\r\n this.afterSaveFormEvent.emit(this.form);\r\n }\r\n );\r\n } else {\r\n this.saveFormEvent.emit(this.form);\r\n }\r\n }\r\n\r\n //#region FUNZIONI PRIVATE\r\n\r\n /**\r\n * Metodo per impostare la form e configurare colonne/FormGourp.\r\n * @param form Form da utilizzare.\r\n */\r\n private setFormAndConfigure(form: Form = null) {\r\n if (form != null) {\r\n this.form = form;\r\n }\r\n this.configureColumns();\r\n this.createFormForm();\r\n }\r\n\r\n /**\r\n * Configura le colonne per le tabelle necessarie alla creazione della form:\r\n * - per la visualizzazione dei campi inseriti\r\n * - per le form di dettaglio create\r\n * - per le azioni configurate sui record della form\r\n */\r\n private configureColumns() {\r\n this.fieldsColumns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 4rem\" },\r\n actions: [\r\n {\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.editField(element),\r\n },\r\n {\r\n name: \"Duplica\",\r\n icon: \"file_copy\",\r\n fn: (element, index, col) => this.duplicateField(element),\r\n },\r\n {\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) => this.deleteElement(element, \"Fields\"),\r\n },\r\n {\r\n name: \"Sposta su\",\r\n icon: \"arrow_upward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, true, \"Fields\"),\r\n disabled: (element) => this.form.Fields.indexOf(element) === 0,\r\n },\r\n {\r\n name: \"Sposta giù\",\r\n icon: \"arrow_downward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, false, \"Fields\"),\r\n disabled: (element) =>\r\n this.form.Fields.indexOf(element) >= this.form.Fields.length - 1,\r\n },\r\n ],\r\n },\r\n {\r\n key: \"FieldType\",\r\n display: \"Tipologia\",\r\n type: TypeColumn.Enum,\r\n enumModel: FieldTypeEnum,\r\n styles: { flex: \"0 0 12rem\" },\r\n },\r\n { key: \"Label\", display: \"Label\", styles: { flex: \"0 0 8rem\" } },\r\n {\r\n key: \"Description\",\r\n display: \"Descrizione\",\r\n styles: { flex: \"0 0 12rem\" },\r\n },\r\n {\r\n key: \"Required\",\r\n display: \"Obbligatorio\",\r\n value: (element) => !!element.Required,\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n {\r\n key: \"Formula\",\r\n display: \"Calcolato\",\r\n value: (element) => !!element.Formula,\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n ];\r\n\r\n if (\r\n this.form.FormScalarType &&\r\n this.form.FormScalarType != FormScalarTypeEnum.Semplice\r\n ) {\r\n this.fieldsColumns.splice(1, 0, {\r\n key: \"FieldGroup\",\r\n display: \"Sezione\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.fieldSectionColumnTemplate,\r\n styles: { flex: \"0 0 14rem\" },\r\n });\r\n // this.fieldsColumns.push(\r\n // {\r\n // key: \"FieldGroup\",\r\n // display: \"Sezione\",\r\n // type: TypeColumn.ExternalTemplate,\r\n // externalTemplate: this.fieldSectionColumnTemplate,\r\n // styles: { flex: \"0 0 14rem\" }\r\n // }\r\n // );\r\n }\r\n\r\n this.actionsOnRecordColumns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 6%\" },\r\n actions: [\r\n {\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.openActionOnRecordDialog(element),\r\n },\r\n {\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) =>\r\n this.deleteElement(element, \"ActionsOnRecord\"),\r\n },\r\n {\r\n name: \"Sposta su\",\r\n icon: \"arrow_upward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, true, \"ActionsOnRecord\"),\r\n disabled: (element) =>\r\n this.form.ActionsOnRecord.indexOf(element) === 0,\r\n },\r\n {\r\n name: \"Sposta giù\",\r\n icon: \"arrow_downward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, false, \"ActionsOnRecord\"),\r\n disabled: (element) =>\r\n this.form.ActionsOnRecord.indexOf(element) >=\r\n this.form.ActionsOnRecord.length - 1,\r\n },\r\n ],\r\n },\r\n { key: \"Icon\", display: \"Icona\", styles: { flex: \" 0 0 15%\" } },\r\n { key: \"Name\", display: \"Nome\", styles: { flex: \" 0 0 20%\" } },\r\n { key: \"Action\", display: \"Azione\" },\r\n ];\r\n }\r\n\r\n /**\r\n * Crea il FormGroup per l'oggetto Form\r\n */\r\n private createFormForm() {\r\n this.formFormGroup = this.formBuilder.group({\r\n Code: [this.form.Code, Validators.required],\r\n Name: [this.form.Name, Validators.required],\r\n Description: [this.form.Description],\r\n FormScalarType: [this.form.FormScalarType, Validators.required],\r\n });\r\n this.onChangeFormScalarType();\r\n }\r\n\r\n /**\r\n * Crea il FormGroup epr l'aggiunta o la modifica di una action sui record della Form.\r\n */\r\n private createActionOnRecordForm() {\r\n this.actionOnRecordFormGroup = this.formBuilder.group({\r\n Name: [this.selectedAction.Name, Validators.required],\r\n Icon: [this.selectedAction.Icon, Validators.required],\r\n Action: [this.selectedAction.Action, Validators.required],\r\n });\r\n }\r\n\r\n /**\r\n * Chiude il dialog per aggiungere/modificare un Field senza salvare\r\n */\r\n private closeFieldDialog() {\r\n if (this.dialogFieldRef != undefined) this.dialogFieldRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per gestire l'apertura del dialog per la modifica di un Field.\r\n * Se il field è di tipo \"Form di dettaglio\" apre il dialog per la modifica di una\r\n * InnerForm altrimenti apre quello per la modifica di un Field.\r\n * @param field Campo da modificare\r\n */\r\n private editField(field: BaseField) {\r\n if (field.FieldType != FieldTypeEnum[\"Form di dettaglio\"]) {\r\n this.openFieldDialog(field);\r\n } else {\r\n this.openInnerFormDialog(\r\n this.form.InnerForms.find((f) => f.Name == field.Label)\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per gestire la duplicazione di un Field.\r\n * @param field Campo da modificare\r\n */\r\n private duplicateField(field: BaseField) {\r\n if (field.FieldType != FieldTypeEnum[\"Form di dettaglio\"]) {\r\n // ricreo l'oggetto passando per un json\r\n let cloneField: BaseField = JSON.parse(JSON.stringify(field));\r\n\r\n cloneField.Label = field[\"Label\"] + \"Copy\";\r\n cloneField.OrdinalPosition = this.form.Fields.length + 1;\r\n\r\n this.selectedField = new BaseField();\r\n this.indexSelectedField = null;\r\n this.onSaveField(cloneField);\r\n } else {\r\n alert(\"non è possibile duplicare una form di dettaglio\");\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per rimuovere un Field all'interno di una Form.\r\n * Richiede conferma all'utente prima di rimuoverlo.\r\n * @param field BaseField da rimuovere\r\n */\r\n private deleteElement(\r\n element: BaseField | ActionOnRecord | Form,\r\n propertyName: string\r\n ) {\r\n EqpDynamicModuleDialogService.Confirm(\r\n \"Eliminare l'elemento selezionato?\",\r\n () => {\r\n this.form[propertyName].splice(\r\n this.form[propertyName].indexOf(element),\r\n 1\r\n );\r\n if (propertyName === \"Fields\") {\r\n this.setFieldOrdinalPosition();\r\n this.reloadFieldsTable();\r\n } else if (propertyName === \"ActionsOnRecord\") {\r\n this.setActionOrdinalPosition();\r\n this.reloadActionsOnRecordTable();\r\n }\r\n },\r\n false,\r\n \"Richiesta conferma\"\r\n );\r\n }\r\n\r\n /**\r\n * Metodo per spostare un campo all'interno della form.\r\n * @param field Oggetto di tipo BaseField da spostare.\r\n * @param moveUp Se TRUE allora sposta verso l'alto il campo (abbassa l'indice) altrimenti il contrario.\r\n */\r\n private moveElement(\r\n element: BaseField | ActionOnRecord,\r\n moveUp: boolean,\r\n propertyName: string\r\n ) {\r\n const startingIndex = this.form[propertyName].indexOf(element);\r\n const endingIndex = startingIndex + (moveUp ? -1 : 1);\r\n\r\n this.form[propertyName].splice(startingIndex, 1);\r\n this.form[propertyName].splice(endingIndex, 0, element);\r\n\r\n if (propertyName === \"Fields\") {\r\n this.setFieldOrdinalPosition();\r\n this.reloadFieldsTable();\r\n } else if (propertyName === \"ActionsOnRecord\") {\r\n this.setActionOrdinalPosition();\r\n this.reloadActionsOnRecordTable();\r\n }\r\n }\r\n\r\n /**\r\n * Imposta l'ordinamento delle sezioni che compongono la form.\r\n */\r\n private setFormFieldGroupOrdinalPosition() {\r\n this.form.FormFieldsGroups.forEach((g, i) => (g.OrdinalPosition = i));\r\n }\r\n\r\n /**\r\n * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente\r\n * ha definito nella tabella in cui sono mostrati\r\n */\r\n private setFieldOrdinalPosition() {\r\n if (this.form.Fields) {\r\n this.form.Fields.forEach((field) => {\r\n field.OrdinalPosition = this.form.Fields.indexOf(field);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della tabella dei campi aggiunti in una form\r\n */\r\n private reloadFieldsTable() {\r\n if (this.fieldsTable) {\r\n this.fieldsTable.reloadDatatable();\r\n }\r\n }\r\n\r\n /**\r\n * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente\r\n * ha definito nella tabella in cui sono mostrati\r\n */\r\n private setActionOrdinalPosition() {\r\n if (this.form.ActionsOnRecord) {\r\n this.form.ActionsOnRecord.forEach((action) => {\r\n action.OrdinalPosition = this.form.ActionsOnRecord.indexOf(action);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della tabella delle azioni aggiuntive sui record della Form.\r\n */\r\n private reloadActionsOnRecordTable() {\r\n if (this.actionsOnRecordTable) {\r\n this.actionsOnRecordTable.reloadDatatable();\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n}\r\n","<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n\r\n<div class=\"dynamic-module-configurator-header row title p-1\" *ngIf=\"innerFormManagment\">\r\n <div class=\"col-md-10\">\r\n <div class=\"header-title-standard\">Aggiunta form di dettaglio</div>\r\n </div>\r\n <div class=\"col-md-2 text-right\">\r\n <mat-icon class=\"close\" (click)=\"closeDialogInnerForm()\">close</mat-icon>\r\n </div>\r\n</div>\r\n\r\n<!--#region EXPORT MODULE -->\r\n<div class=\"dynamic-module-configurator-exporter\" *ngIf=\"loader && viewMode == 'Export'\" class=\"p-3\">\r\n <a\r\n class=\"btn btn-clear\"\r\n mat-raised-button\r\n color=\"primary\"\r\n title=\"Download JSON\"\r\n [href]=\"downloadJsonHref\"\r\n download=\"{{ downloadName }}.json\"\r\n >Export</a\r\n >\r\n <br />\r\n {{ stringifiedForm }}\r\n</div>\r\n<!--#endregion EXPORT MODULE -->\r\n\r\n<mat-horizontal-stepper\r\n *ngIf=\"loader && viewMode == 'addOrEdit'\"\r\n linear\r\n #stepper\r\n [ngClass]=\"{ outerForm: true, 'innerFormManagment-stepper': innerFormManagment }\"\r\n class=\"dynamic-module-configurator-stepper {{ 'last-edited-step-' + stepper.selectedIndex }}\"\r\n>\r\n <!--#region DATI GENERALI DELLA FORM -->\r\n <mat-step class=\"dynamic-module-configurator-general-data\" [stepControl]=\"formFormGroup\">\r\n <form [formGroup]=\"formFormGroup\" (keydown.enter)=\"(false)\">\r\n <ng-template matStepLabel>\r\n <div\r\n class=\"stepper-header-overlay\"\r\n (click)=\"setFormStatus(false)\"\r\n ></div>\r\n Dati generali della form\r\n </ng-template>\r\n\r\n <div class=\"row firstRow\">\r\n <div class=\"col-md-6\">\r\n <mat-label\r\n [matTooltip]=\"'Va inserito per essere utilizzato come riferimento nei template. non accetta caratteri speciali ne spazi.'\"\r\n >\r\n Codice Univoco \r\n </mat-label>\r\n <mat-form-field class=\"name\">\r\n <input\r\n matInput\r\n [matTooltip]=\"'Va inserito per essere utilizzato come riferimento nei template. non accetta caratteri speciali ne spazi.'\"\r\n formControlName=\"Code\"\r\n [(ngModel)]=\"form.Code\"\r\n required\r\n (focusout)=\"setCode(form.Code)\"\r\n disabled=\"true\"\r\n readonly=\"true\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n\r\n <div class=\"col-md-4\">\r\n <mat-label>Nome</mat-label>\r\n <mat-form-field class=\"name\">\r\n <input\r\n matInput\r\n formControlName=\"Name\"\r\n [(ngModel)]=\"form.Name\"\r\n required\r\n (focusout)=\"setName(form.Name)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col-md-4\">\r\n <mat-label>Tipo di visualizzazione</mat-label>\r\n <eqp-select\r\n class=\"nameSection\"\r\n [enumData]=\"FormScalarTypeEnum\"\r\n [(ngModelInput)]=\"form.FormScalarType\"\r\n [isRequired]=\"false\"\r\n required\r\n [showCancelButton]=\"false\"\r\n [formGroupInput]=\"formFormGroup\"\r\n [formControlNameInput]=\"'FormScalarType'\"\r\n (ngModelInputChange)=\"onChangeFormScalarType()\"\r\n >\r\n </eqp-select>\r\n </div>\r\n \r\n <div class=\"col-md-6\">\r\n <mat-label>Descrizione</mat-label>\r\n <mat-form-field class=\"name\">\r\n <input\r\n matInput\r\n formControlName=\"Description\"\r\n [(ngModel)]=\"form.Description\"\r\n (focusout)=\"stringSanitizer(form.Name)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div\r\n class=\"row inserted\"\r\n *ngIf=\"\r\n form.FormScalarType &&\r\n form.FormScalarType != FormScalarTypeEnum.Semplice\r\n \"\r\n >\r\n <div class=\"col-md-4\">\r\n <mat-label> Nome sezione (invio per confermare) </mat-label>\r\n <mat-form-field class=\"nameSection\">\r\n <input\r\n matInput\r\n [(ngModel)]=\"formFieldGroupName\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (keyup)=\"onFormFieldGroupNameKeyUp($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <span class=\"mr-3\">Sezioni inserite:</span>\r\n <ul class=\"section-list\">\r\n <li *ngFor=\"let groupName of form.FormFieldsGroups; let i = index\">\r\n <span class=\"sectionInsert\">\r\n <mat-icon\r\n class=\"mr-1\"\r\n (click)=\"onDeleteFormFieldGroupName(groupName.Name)\"\r\n >close </mat-icon\r\n >{{ groupName.Name }}\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end\">\r\n <!-- IMPORT -->\r\n <button\r\n *ngIf=\"!this.formID\"\r\n class=\"btn btn-clear button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"importModule()\"\r\n >\r\n Importa\r\n </button>\r\n <!-- END IMPORT -->\r\n\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n [disabled]=\"formFormGroup.invalid\"\r\n >\r\n Successivo\r\n </button>\r\n </div>\r\n </form>\r\n </mat-step>\r\n <!--#endregion DATI GENERALI DELLA FORM -->\r\n\r\n <!--#region AGGIUNTA DEI CAMPI DELLA FORM -->\r\n <mat-step class=\"dynamic-module-configurator-add-field\" [completed]=\"isFieldStepCompleted()\">\r\n <ng-template matStepLabel>\r\n <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n <mat-label>Campi da inserire</mat-label>\r\n </ng-template>\r\n\r\n <div class=\"row justify-content-start addButtons\">\r\n <div class=\"col\">\r\n <button\r\n class=\"btn btn-primary me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openFieldDialog()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi campo</span>\r\n </button>\r\n\r\n <button\r\n class=\"btn btn-outlined me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openInnerFormDialog()\"\r\n *ngIf=\"!innerFormManagment\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi form di dettaglio</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <eqp-table\r\n class=\"table\"\r\n #fieldsTable\r\n [createMatCard]=\"false\"\r\n [columns]=\"fieldsColumns\"\r\n [data]=\"form.Fields\"\r\n [emptyTableMessage]=\"'Nessun campo inserito'\"\r\n [searchText]=\"''\"\r\n >\r\n </eqp-table>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end\">\r\n <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n [disabled]=\"!isFieldStepCompleted()\"\r\n [ngClass]=\"{ disabled: formFormGroup.invalid }\"\r\n (click)=\"setFormStatus(false)\"\r\n >\r\n Successivo\r\n </button>\r\n </div>\r\n </mat-step>\r\n <!--#endregion AGGIUNTA DEI CAMPI DELLA FORM -->\r\n\r\n <ng-template matStepperIcon=\"edit\" let-index=\"index\">\r\n <mat-label>{{ index + 1 }}</mat-label>\r\n </ng-template>\r\n\r\n <!--#region AGGIUNTA DELLE OPERAZIONI SUI RECORD -->\r\n <mat-step>\r\n <ng-template matStepLabel>\r\n <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n Azioni aggiuntive sui record\r\n </ng-template>\r\n\r\n <div class=\"row justify-content-start addButtons\">\r\n <div class=\"col\">\r\n <button\r\n class=\"btn btn-primary\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openActionOnRecordDialog()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi azione</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table\r\n class=\"table\"\r\n #actionsOnRecordTable\r\n [createMatCard]=\"false\"\r\n [columns]=\"actionsOnRecordColumns\"\r\n [data]=\"form.ActionsOnRecord\"\r\n [emptyTableMessage]=\"'Nessuna action inserita'\"\r\n [searchText]=\"''\"\r\n >\r\n </eqp-table>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end buttonsNextDiv\">\r\n <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n (click)=\"setFormStatus(true)\"\r\n >\r\n Successivo\r\n </button>\r\n </div>\r\n </mat-step>\r\n <!--#endregion AGGIUNTA DELLE OPERAZIONI SUI RECORD -->\r\n\r\n <!--#region VISUALIZZAZIONE FORM CREATA -->\r\n <mat-step class=\"dynamic-module-configurator-preview\">\r\n <ng-template matStepLabel>\r\n <div\r\n class=\"stepper-header-overlay\"\r\n (click)=\"setFormStatus( formFormGroup.valid && form.Fields && form.Fields.length > 0 )\"\r\n ></div>\r\n Anteprima\r\n </ng-template>\r\n\r\n <add-form-record\r\n *ngIf=\"previewForm && formCompleted\"\r\n [form]=\"previewForm\"\r\n [configurations]=\"viewConfig\"\r\n [debugMode]=\"debugMode\"\r\n >\r\n </add-form-record>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end button-nextDiv\">\r\n <button\r\n class=\"mr-2 button-exit\"\r\n mat-raised-button\r\n matStepperPrevious\r\n (click)=\"setFormStatus(false)\"\r\n >\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"saveForm()\"\r\n >\r\n Salva form\r\n </button>\r\n </div>\r\n </mat-step>\r\n <!--#endregion VISUALIZZAZIONE FORM CREATA -->\r\n\r\n</mat-horizontal-stepper>\r\n\r\n<!-- DIALOG AGGIUNTA/MODIFICA CAMPO -->\r\n<ng-template #dialogField>\r\n <eqp-dynamic-module-add-form-field\r\n [debugMode]=\"debugMode\"\r\n [field]=\"selectedField\"\r\n [indexField]=\"indexSelectedField\"\r\n (saveFieldEvent)=\"onSaveField($event)\"\r\n [availableFields]=\"form.Fields\"\r\n [formFieldsGroups]=\"\r\n form.FormScalarType != FormScalarTypeEnum.Semplice\r\n ? form.FormFieldsGroups\r\n : null\r\n \"\r\n >\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<ng-template #fieldSectionColumnTemplate let-row=\"row\">\r\n <eqp-select\r\n [arrayData]=\"form.FormFieldsGroups\"\r\n [(ngModelInput)]=\"row.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\"\r\n [arrayValueProperty]=\"'Name'\"\r\n placeholder=\"Sezione\"\r\n [isRequired]=\"true\"\r\n [includeFullObject]=\"false\"\r\n >\r\n </eqp-select>\r\n</ng-template>\r\n\r\n<!-- DIALOG PER AGGIUNGERE/MODIFICARE UNA ACTION SUI RECORD DELLA FORM -->\r\n<ng-template #dialogActionOnRecord>\r\n <div\r\n class=\"container-fluid third-modal\"\r\n style=\"max-height: 70vh !important; overflow-x: hidden; overflow-y: auto\"\r\n >\r\n <form [formGroup]=\"actionOnRecordFormGroup\">\r\n <div class=\"row title\">\r\n <div class=\"header-title-standard\">\r\n {{\r\n indexSelectedAction != null && indexSelectedAction >= 0\r\n ? \"Modifica\"\r\n : \"Aggiungi\"\r\n }}\r\n azione sul record\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Nome </mat-label>\r\n <mat-form-field>\r\n <input\r\n formControlName=\"Name\"\r\n required\r\n matInput\r\n [(ngModel)]=\"selectedAction.Name\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Icona </mat-label>\r\n <mat-form-field>\r\n <input\r\n formControlName=\"Icon\"\r\n required\r\n matInput\r\n [(ngModel)]=\"selectedAction.Icon\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col-12 mt-2\">\r\n <mat-label>Azione (Javascript)</mat-label>\r\n <mat-form-field>\r\n <textarea\r\n matInput\r\n [rows]=\"3\"\r\n formControlName=\"Action\"\r\n required\r\n [(ngModel)]=\"selectedAction.Action\"\r\n [matAutocomplete]=\"actionAutocomplete\"\r\n (keyup)=\"setActionAutocompleteOptions($event)\"\r\n (focus)=\"setActionAutocompleteOptions(null)\"\r\n style=\"\r\n border: 1px solid lightgray !important;\r\n border-radius: 10px !important;\r\n \"\r\n ></textarea>\r\n <mat-autocomplete #actionAutocomplete=\"matAutocomplete\">\r\n <mat-option\r\n *ngFor=\"let option of actionAutocompleteOptions\"\r\n [value]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1\">\r\n <div class=\"buttonsForm\">\r\n <button\r\n class=\"btn mat-raised-button cancel\"\r\n (click)=\"closeDialogActionOnRecord()\"\r\n type=\"button\"\r\n >\r\n Annulla\r\n </button>\r\n <button\r\n class=\"mr-2 save\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"saveActionOnRecord()\"\r\n [disabled]=\"actionOnRecordFormGroup.invalid\"\r\n type=\"button\"\r\n >\r\n Salva\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER CONFIGURARE LE FORM DI DETTAGLIO -->\r\n<ng-template #dialogInnerForm>\r\n <!-- [form]=\"selectedInnerForm\"\r\n [innerFormManagment]=\"true\"\r\n [innerFormRef]=\"dialogInnerFormRef\" -->\r\n <eqp-dynamic-module-configurator\r\n [configurations]=\"innerFormConfig\"\r\n (saveFormEvent)=\"onSaveOrExitInnerForm($event)\"\r\n >\r\n </eqp-dynamic-module-configurator>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER IMPORT -->\r\n<ng-template #dialogImport>\r\n <mat-card class=\"importDialog\">\r\n <mat-card-header class=\"p-2 justify-content-around\"> \r\n <mat-card-title>\r\n Import\r\n </mat-card-title> \r\n </mat-card-header>\r\n <mat-card-content class=\"p-2\">\r\n <input type=\"file\" class=\"input-file-btn pb-2\" (change)=\"onImport($event)\" />\r\n </mat-card-content>\r\n <mat-card-footer class=\"p-2 d-flex justify-content-end\">\r\n <button\r\n class=\"btn btn-clear button-back me-2\"\r\n mat-raised-button\r\n color=\"disabled\"\r\n (click)=\"closeImport()\"\r\n >\r\n Annulla\r\n </button>\r\n </mat-card-footer>\r\n </mat-card>\r\n</ng-template>\r\n","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { IBaseFieldComponent } from '../../../interfaces/iBaseFieldComponent.interface';\r\nimport { BaseField, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../form-records/list-form-record/list-form-record.component';\r\n\r\n@Component({\r\n selector: 'dynamic-module-field',\r\n templateUrl: './dynamic-module-field.component.html',\r\n styleUrls: ['./dynamic-module-field.component.scss']\r\n})\r\nexport class DynamicModuleFieldComponent implements OnInit, IBaseFieldComponent {\r\n\r\n @Input() field: BaseField;\r\n @Input() form: Form;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n selectedInnerForm: Form;\r\n selectedInnerFormRecord: Record;\r\n indexInnerFormRecord: number;\r\n onlyViewInnerFormRecord: boolean = false;\r\n dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldComponent>;\r\n @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n constructor(\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n\r\n updateField(): void {\r\n if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n this.fieldTemplate.forEach(f => f.updateField());\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.configList.values = this.record[this.field.Name]\r\n this.configList.showTitle = true;\r\n this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onRecordChange() {\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n /**\r\n * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n * @returns Restituisce un oggetto di tipo Form.\r\n */\r\n getInnerFormFromField(field: BaseField): Form {\r\n if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n return this.form.InnerForms.find(f => f.Name == field.Label);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aprire un dialog in cui aggiungere/modificare/visualizzare un record appartenente\r\n * a una form di dettaglio.\r\n * @param record Evento di output del componente list-form-record, contiene il record selezionato e un booleno che indica \r\n * se l'utente vuole modificare o visualizzare l'elemento selezionato.\r\n * @param innerForm Contiene la Form di dettaglio dalla quale è stato richiesto il record.\r\n */\r\n onAddViewEditInnerFormRecord(record: { record: Record, onlyView: boolean }, field: BaseField) {\r\n this.selectedInnerForm = this.getInnerFormFromField(field);\r\n if (record == null) {\r\n this.selectedInnerFormRecord = new Record();\r\n this.indexInnerFormRecord = null;\r\n this.onlyViewInnerFormRecord = false;\r\n } else {\r\n this.selectedInnerFormRecord = JSON.parse(JSON.stringify(record.record));\r\n this.indexInnerFormRecord = this.record[field.Name].indexOf(record);\r\n this.onlyViewInnerFormRecord = record.onlyView;\r\n }\r\n\r\n this.dialogInnerFormRecordRef = this.dialog.open(this.dialogInnerFormRecord, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: '75%'\r\n });\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio o alla chiusura del dialog di aggiunta/modifica/visualizzazione\r\n * di un record di una form di dettaglio.\r\n * @param record Oggetto restituito dal componente add-form-field (questo qui) contenente il Record \r\n * aggiornato dall'utente. Se null allora l'utente non ha modificato nulla e ha chiuso il dialog.\r\n */\r\n onSaveInnerFormRecord(record: Record) {\r\n if (record != null) {\r\n const arrayName: string = this.selectedInnerForm.Name.split(' ').join('_');\r\n if (this.indexInnerFormRecord != null && this.indexInnerFormRecord >= 0) {\r\n this.record[arrayName][this.indexInnerFormRecord] = record;\r\n } else {\r\n if (!this.record[arrayName]) {\r\n this.record[arrayName] = [];\r\n }\r\n this.record[arrayName].push(record);\r\n }\r\n }\r\n this.dialogInnerFormRecordRef.close();\r\n\r\n // Ricarico la tabella dei record per visualizzare le modifiche fatte dall'utente.\r\n if (this.listInnerFormRecords && this.listInnerFormRecords.length > 0) {\r\n this.listInnerFormRecords.forEach(list => {\r\n if (list && list.tableRecords) {\r\n list.tableRecords.reloadDatatable();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","<text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</text-field-template>\r\n\r\n<textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</textarea-field-template>\r\n\r\n<boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</boolean-field-template>\r\n\r\n<date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</date-field-template>\r\n\r\n<numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</numeric-field-template>\r\n\r\n<list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</list-value-field-template>\r\n\r\n<attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</attachment-field-template>\r\n\r\n<image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</image-field-template>\r\n\r\n<list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n</list-form-record>\r\n\r\n<!-- DIALOG PER AGGIUNGERE/MODIFICARE/VISUALIZZARE UN RECORD IN UNA FORM DI DETTAGLIO -->\r\n<ng-template #dialogInnerFormRecord>\r\n <add-form-record [form]=\"selectedInnerForm\" [record]=\"selectedInnerFormRecord\" [onlyView]=\"onlyViewInnerFormRecord\"\r\n (saveRecordEvent)=\"onSaveInnerFormRecord($event)\"></add-form-record>\r\n</ng-template>","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { EqpDynamicModuleComponent } from './components/exported/eqp-dynamic-module/eqp-dynamic-module.component';\r\nimport { MaterialModule } from './modules/material.module';\r\nimport { EqpTableModule } from '@eqproject/eqp-table';\r\nimport { EqpAttachmentsModule } from '@eqproject/eqp-attachments';\r\nimport { EqpSelectModule } from '@eqproject/eqp-select';\r\nimport { EqpDatetimepickerModule } from '@eqproject/eqp-datetimepicker';\r\nimport { EqpFiltersModule } from '@eqproject/eqp-filters';\r\nimport { EqpNumericModule } from '@eqproject/eqp-numeric';\r\nimport { EqpDynamicModuleConfiguratorComponent } from './components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';\r\nimport { AddFormFieldComponent } from './components/private/add-form-field/add-form-field.component';\r\nimport { TextFieldTemplateComponent } from './components/private/field-templates/text-field-template/text-field-template.component';\r\nimport { BooleanFieldTemplateComponent } from './components/private/field-templates/boolean-field-template/boolean-field-template.component';\r\nimport { DateFieldTemplateComponent } from './components/private/field-templates/date-field-template/date-field-template.component';\r\nimport { TextareaFieldTemplateComponent } from './components/private/field-templates/textarea-field-template/textarea-field-template.component';\r\nimport { NumericFieldTemplateComponent } from './components/private/field-templates/numeric-field-template/numeric-field-template.component';\r\nimport { ListValueFieldTemplateComponent } from './components/private/field-templates/list-value-field-template/list-value-field-template.component';\r\nimport { AttachmentFieldTemplateComponent } from './components/private/field-templates/attachment-field-template/attachment-field-template.component';\r\nimport { ImageFieldTemplateComponent } from './components/private/field-templates/image-field-template/image-field-template.component';\r\nimport { ListFormRecordComponent } from './components/private/form-records/list-form-record/list-form-record.component';\r\nimport { AddFormRecordComponent } from './components/private/form-records/add-form-record/add-form-record.component';\r\nimport { DynamicModuleFieldComponent } from './components/private/dynamic-module-field/dynamic-module-field.component';\r\nimport { SpinnerComponent } from './components/private/spinner/spinner.component';\r\nimport { DynamicModuleFieldFixComponent } from './components/private/dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { AddFormulaComponent,DialogDataExampleDialog } from './components/private/add-formula-field/add-formula-field.component';\r\nimport { RepairFormFieldsComponent } from './components/private/form-records/repair-form-fields/repair-form-fields.component';\r\nimport { ListViewFormRecordComponent } from './components/private/form-records/list-view-form-record/list-view-form-record.component';\r\nimport { ViewFormRecordComponent } from './components/private/form-records/view-form-record/view-form-record.component';\r\nimport { SingleRecordComponent } from './components/private/form-records/list-view-form-record/single-record/single-record.component';\r\nimport { FilterFormStatisticComponent } from './components/private/form-statistics/filter-form-statistic/filter-form-statistic.component';\r\nimport { DynamicModuleFilterFixComponent } from './components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component';\r\nimport { TextFilterTemplateComponent } from './components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component';\r\nimport { NumericFilterTemplateComponent } from './components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component';\r\nimport { BooleanFilterTemplateComponent } from './components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component';\r\nimport { DateFilterTemplateComponent } from './components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component';\r\nimport { ListValueFilterTemplateComponent } from './components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component';\r\nimport { TextareaFilterTemplateComponent } from './components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component';\r\nimport { AttachmentFilterTemplateComponent } from './components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component';\r\nimport { ImageFilterTemplateComponent } from './components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component';\r\nimport { ListFormRecordFilterTemplateComponent } from './components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component';\r\nimport { GraphsComponent } from './components/private/graphs/graphs.component';\r\nimport { GraphComponent } from './components/private/graphs/graph/graph.component';\r\nimport { CanvasJSAngularStockChartsModule, CanvasJSChart, CanvasJSStockChart } from '@canvasjs/angular-stockcharts';\r\n\r\n@NgModule({\r\n declarations: [\r\n EqpDynamicModuleComponent,\r\n EqpDynamicModuleConfiguratorComponent,\r\n AddFormFieldComponent,\r\n TextFieldTemplateComponent,\r\n BooleanFieldTemplateComponent,\r\n DateFieldTemplateComponent,\r\n TextareaFieldTemplateComponent,\r\n NumericFieldTemplateComponent,\r\n ListValueFieldTemplateComponent,\r\n AttachmentFieldTemplateComponent,\r\n ImageFieldTemplateComponent,\r\n ListFormRecordComponent,\r\n ListViewFormRecordComponent,\r\n AddFormRecordComponent,\r\n ViewFormRecordComponent,\r\n DynamicModuleFieldComponent,\r\n DynamicModuleFieldFixComponent,\r\n SpinnerComponent,\r\n AddFormulaComponent,\r\n DialogDataExampleDialog,\r\n RepairFormFieldsComponent,\r\n SingleRecordComponent,\r\n FilterFormStatisticComponent,\r\n DynamicModuleFilterFixComponent,\r\n TextFilterTemplateComponent,\r\n NumericFilterTemplateComponent,\r\n BooleanFilterTemplateComponent,\r\n DateFilterTemplateComponent,\r\n ListValueFilterTemplateComponent,\r\n TextareaFilterTemplateComponent,\r\n AttachmentFilterTemplateComponent,\r\n ImageFilterTemplateComponent,\r\n ListFormRecordFilterTemplateComponent,\r\n GraphsComponent,\r\n GraphComponent\r\n ],\r\n imports: [\r\n MaterialModule,\r\n FormsModule,\r\n CommonModule,\r\n ReactiveFormsModule,\r\n EqpTableModule,\r\n EqpAttachmentsModule,\r\n EqpSelectModule,\r\n EqpDatetimepickerModule,\r\n EqpFiltersModule,\r\n EqpNumericModule,\r\n CanvasJSAngularStockChartsModule\r\n ],\r\n exports: [\r\n EqpDynamicModuleComponent,\r\n EqpDynamicModuleConfiguratorComponent,\r\n CanvasJSChart,\r\n CanvasJSStockChart\r\n ]\r\n})\r\nexport class EqpDynamicModuleModule { }\r\n","import { DynamicModuleCompileConfig } from \"./dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"./dynamicModuleGeneralConfig.model\";\r\nimport { DynamicModuleListConfig } from \"./dynamicModuleListConfig.model\";\r\nimport { DynamicModuleRepairConfig } from \"./dynamicModuleRepairConfig.model\";\r\n\r\nexport class DynamicModuleConfig {\r\n dynamicModuleGeneralConfig: DynamicModuleGeneralConfig;\r\n dynamicModuleCompileConfig: DynamicModuleCompileConfig;\r\n dynamicModuleListConfig: DynamicModuleListConfig;\r\n dynamicModuleRepairConfig: DynamicModuleRepairConfig;\r\n\r\n constructor(\r\n general: DynamicModuleGeneralConfig,\r\n compile: DynamicModuleCompileConfig,\r\n list: DynamicModuleListConfig,\r\n repair: DynamicModuleRepairConfig\r\n ) {\r\n this.dynamicModuleGeneralConfig = general;\r\n this.dynamicModuleCompileConfig = compile;\r\n this.dynamicModuleListConfig = list;\r\n this.dynamicModuleRepairConfig = repair;\r\n }\r\n}\r\n","import { IRootObject } from \"../interfaces/iRootObject.interface\";\r\nimport { BaseField } from \"./baseField.model\";\r\nimport { BaseObj } from \"./baseObj.model\";\r\n\r\n/**\r\n * Rappresenta l'entità su cui vengono eseguite le operazioni di salvataggio.\r\n */\r\nexport class Entity extends BaseObj implements IRootObject {\r\n Name: string;\r\n Fields: Array<BaseField>;\r\n OrgaID: string;\r\n}\r\n","import { IAttachmentDTO } from \"@eqproject/eqp-attachments\";\r\nimport { BaseField } from \"../baseField.model\";\r\nimport { AttachmentField } from \"./attachmentField.model\";\r\n\r\nexport class ImageField extends BaseField {\r\n /**Se true il medico può disegnare sull'immagine */\r\n EnableDrawing: boolean;\r\n\r\n /**Se true l'immagine non è fissa, ma viene caricata come un allegato; */\r\n ImageIsContextualAttachment: boolean;\r\n /**Contiene l'allegato caricato nel campo (se ImageIsContextualAttachment == true) */\r\n ContextualAttachment: IAttachmentDTO;\r\n /**Proprietà per recuperare l'allegato caricato come array per eqp-attachments (se ImageIsContextualAttachment == true) */\r\n get _contextualAttachments() {\r\n return this.ContextualAttachment ? [this.ContextualAttachment] : [];\r\n }\r\n /**Nome dell'immagine caricata (se ImageIsContextualAttachment == true) */\r\n ImgName: string;\r\n\r\n AttachDefinition: AttachmentField;\r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Questo tipo di campo rappresenta una lookup ad altri valori */\r\nexport class LookupField extends BaseField {\r\n /**Entità relazionata (il padre) */\r\n EntitySourceName: string;\r\n\r\n /**Elenco di campi ordinato che verrà visualizzato nella lookup */\r\n FieldNames: string[];\r\n\r\n /**Se true la lookup viene visualizzata in una modale per lo scegli scarta */\r\n UseAsGetOrDiscard: boolean;\r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Classe contiene la configurazione dei campi numerici */\r\nexport class NumericField extends BaseField {\r\n IsInteger: boolean;\r\n MinValue: number;\r\n MaxValue: number;\r\n DecimalSeparator: string;\r\n DecimalPrecision: number;\r\n ThousandsSeparator: string;\r\n CurrencySymbol: string;\r\n MeasureUnit: string;\r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class TextareaField extends BaseField {\r\n /**Numero di righe in altezza con cui viene rappresentata la text area */\r\n Rows: number;\r\n MaxLenght: number;\r\n MinLenght: number;\r\n Microphone: boolean;\r\n}","/*\r\n * Public API Surface of eqp-dynamic-module\r\n */\r\nexport * from './lib/eqp-dynamic-module.module';\r\nexport * from './lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component';\r\nexport * from './lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';\r\nexport * from './lib/components/private/add-form-field/add-form-field.component';\r\nexport * from './lib/components/private/dynamic-module-field/dynamic-module-field.component';\r\nexport * from './lib/components/private/field-templates/attachment-field-template/attachment-field-template.component';\r\nexport * from './lib/components/private/field-templates/boolean-field-template/boolean-field-template.component';\r\nexport * from './lib/components/private/field-templates/date-field-template/date-field-template.component';\r\nexport * from './lib/components/private/field-templates/image-field-template/image-field-template.component';\r\nexport * from './lib/components/private/field-templates/list-value-field-template/list-value-field-template.component';\r\nexport * from './lib/components/private/field-templates/numeric-field-template/numeric-field-template.component';\r\nexport * from './lib/components/private/field-templates/text-field-template/text-field-template.component';\r\nexport * from './lib/components/private/field-templates/textarea-field-template/textarea-field-template.component';\r\nexport * from './lib/components/private/form-records/add-form-record/add-form-record.component';\r\nexport * from './lib/components/private/form-records/repair-form-fields/repair-form-fields.component';\r\nexport * from './lib/components/private/form-records/list-form-record/list-form-record.component';\r\nexport * from './lib/interfaces/iBaseFieldComponent.interface';\r\nexport * from './lib/interfaces/iRootObject.interface';\r\nexport * from './lib/models/baseField.model';\r\nexport * from './lib/models/baseObj.model';\r\nexport * from './lib/models/context.model';\r\nexport * from './lib/models/dynamicModuleConfiguratorConfig.model';\r\nexport * from './lib/models/dynamicModuleConfiguratorSpecificConfig.model';\r\nexport * from './lib/models/dynamicModuleConfig.model';\r\nexport * from './lib/models/dynamicModuleGeneralConfig.model';\r\nexport * from './lib/models/dynamicModuleCompileConfig.model';\r\nexport * from './lib/models/dynamicModuleListConfig.model';\r\nexport * from './lib/models/dynamicModuleRepairConfig.model';\r\nexport * from './lib/models/dynamicModuleFilterResultViewModeEnum.model';\r\nexport * from './lib/models/dynamicModuleViewModeEnum';\r\nexport * from './lib/models/dynamicModuleListFormRecordActionsDefault';\r\nexport * from './lib/models/endPointConfiguration.model';\r\nexport * from './lib/models/entity.model';\r\nexport * from './lib/models/form.model';\r\nexport * from './lib/models/record.model';\r\nexport * from './lib/models/fields/attachmentField.model';\r\nexport * from './lib/models/fields/booleanField.model';\r\nexport * from './lib/models/fields/dateField.model';\r\nexport * from './lib/models/fields/imageField.model';\r\nexport * from './lib/models/fields/listValueField.model';\r\nexport * from './lib/models/fields/lookupField.model';\r\nexport * from './lib/models/fields/numericField.model';\r\nexport * from './lib/models/fields/textareaField.model';\r\nexport * from './lib/models/fields/textField.model';\r\nexport * from './lib/services/custom-form-validators.service';\r\nexport * from './lib/services/eqp-dynamic-module-dialog.service';\r\nexport * from './lib/services/spinner.service';\r\nexport * from './lib/services/utilityHelper.services';\r\nexport * from './lib/models/graph.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3.SpinnerService","i1.UtilityHelperService","i2","i3","i5","i6","i1.VoiceRecognitionService","i4","i2.UtilityHelperService","i4.TextFieldTemplateComponent","i5.BooleanFieldTemplateComponent","i6.DateFieldTemplateComponent","i7.TextareaFieldTemplateComponent","i8.NumericFieldTemplateComponent","i9.ListValueFieldTemplateComponent","i10.AttachmentFieldTemplateComponent","i11.ImageFieldTemplateComponent","i12.ListFormRecordComponent","i7","i8.DynamicModuleFieldFixComponent","i3.AddFormRecordComponent","i4.ViewFormRecordComponent","i8","i9","i10.AddFormRecordComponent","i11.SingleRecordComponent","i1.SpinnerService","i4.TextFilterTemplateComponent","i5.NumericFilterTemplateComponent","i6.BooleanFilterTemplateComponent","i7.DateFilterTemplateComponent","i8.ListValueFilterTemplateComponent","i9.TextareaFilterTemplateComponent","i10.AttachmentFilterTemplateComponent","i11.ImageFilterTemplateComponent","i12.ListFormRecordFilterTemplateComponent","i6.ListViewFormRecordComponent","i7.DynamicModuleFilterFixComponent","i9.GraphComponent","i3.ListFormRecordComponent","i4.ListViewFormRecordComponent","i5.AddFormRecordComponent","i6.ViewFormRecordComponent","i7.SpinnerComponent","i8.RepairFormFieldsComponent","i9.FilterFormStatisticComponent","i10.GraphsComponent","i10","i11","i12","i13","i14","i15.AddFormulaComponent","i3.UtilityHelperService","i15","i16","i17.AddFormFieldComponent","i18.AddFormRecordComponent","i19.SpinnerComponent","i13.AddFormRecordComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eqproject-eqp-dynamic-module.mjs","sources":["../../../projects/eqp-dynamic-module/src/lib/models/context.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleCompileConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleListFormRecordActionsDefault.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleListConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleRepairConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleViewModeEnum.ts","../../../projects/eqp-dynamic-module/src/lib/models/endPointConfiguration.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/baseObj.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/form.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/eqp-dynamic-module-dialog.service.ts","../../../projects/eqp-dynamic-module/src/lib/models/baseField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/textField.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/custom-form-validators.service.ts","../../../projects/eqp-dynamic-module/src/lib/services/spinner.service.ts","../../../projects/eqp-dynamic-module/src/lib/services/utilityHelper.services.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleFilterResultViewModeEnum.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/global.service.ts","../../../projects/eqp-dynamic-module/src/lib/models/record.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/dateField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-form-record/list-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-form-record/list-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/services/voice-recognition.service.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/text-field-template/text-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/text-field-template/text-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/booleanField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/date-field-template/date-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/date-field-template/date-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/listValueField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/attachmentField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-template/image-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-template/image-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/add-form-record/add-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/add-form-record/add-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/view-form-record/view-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/view-form-record/view-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.html","../../../projects/eqp-dynamic-module/src/lib/models/graph.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graph/graph.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graph/graph.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graphs.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graphs.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/spinner/spinner.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/spinner/spinner.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.html","../../../projects/eqp-dynamic-module/src/lib/models/statistic.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/logicOperator.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.html","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.html","../../../projects/eqp-dynamic-module/src/lib/modules/material.module.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfiguratorSpecificConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleGeneralConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfiguratorConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/modules/formula.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/add-formula-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/add-formula-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/dialog-data-example.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/add-form-field/add-form-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-form-field/add-form-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field/dynamic-module-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field/dynamic-module-field.component.html","../../../projects/eqp-dynamic-module/src/lib/eqp-dynamic-module.module.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/entity.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/imageField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/lookupField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/numericField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/textareaField.model.ts","../../../projects/eqp-dynamic-module/src/public-api.ts","../../../projects/eqp-dynamic-module/src/eqproject-eqp-dynamic-module.ts"],"sourcesContent":["export class Context {\r\n User: ContextUser = new ContextUser();\r\n Organizzation: string;\r\n}\r\n\r\nexport class ContextUser {\r\n Name: string;\r\n Surname: string;\r\n Role: string;\r\n}","export class DynamicModuleCompileConfig {\r\n /**\r\n * Show/Hide module name in COMPILE/LIST\r\n */\r\n showTitle: boolean;\r\n\r\n /**\r\n * Show/Hide form save button\r\n */\r\n showSaveButton: boolean;\r\n /**\r\n * Show/Hide form back/annulla button\r\n */\r\n showBackButton: boolean;\r\n /**\r\n * Set id for save\r\n */\r\n userID: string;\r\n /**\r\n * Additional Params for filtering\r\n */\r\n additionalParams: any;\r\n /**\r\n * Prefilter Params for filtering\r\n */\r\n prefilterParams: any; \r\n /**\r\n * Mostra bottone \"nuova ricerca\"\r\n */\r\n showNewSearchButton: boolean;\r\n\r\n constructor(\r\n showTitle: boolean = true,\r\n showSaveButton: boolean = true,\r\n showBackButton: boolean = true,\r\n userID: string = \"0\",\r\n additionalParams: any = null,\r\n prefilterParams: any = null,\r\n showNewSearchButton: boolean = true\r\n ) {\r\n this.showTitle = showTitle;\r\n this.showSaveButton = showSaveButton;\r\n this.showBackButton = showBackButton;\r\n this.userID = userID;\r\n this.additionalParams = additionalParams;\r\n this.prefilterParams = prefilterParams;\r\n this.showNewSearchButton = showNewSearchButton;\r\n }\r\n}\r\n","export class DynamicModuleListFormRecordActionsDefault {\r\n /*\r\n * pulsante aggiungi in alto\r\n */\r\n add: boolean\r\n /*\r\n * pulsante visualizza nel menu della risposta\r\n */\r\n view: boolean\r\n /*\r\n * pulsante modifica nel menu della risposta\r\n */\r\n edit: boolean\r\n /*\r\n * pulsante duplica nel menu della risposta\r\n */\r\n duplicate: boolean\r\n /*\r\n * pulsante elimina nel menu della risposta\r\n */\r\n delete: boolean\r\n /*\r\n * pulsante elimina nel menu della risposta\r\n */\r\n graphs: boolean \r\n\r\n constructor(add: boolean = true, view: boolean = true, edit: boolean = true, duplicate: boolean = true, del: boolean = true, graphs: boolean = true){\r\n this.add = add\r\n this.view = view\r\n this.edit = edit\r\n this.duplicate = duplicate\r\n this.delete = del\r\n this.graphs = graphs\r\n }\r\n\r\n}\r\n","import { DynamicModuleListFormRecordActionsDefault } from \"./dynamicModuleListFormRecordActionsDefault\";\r\nimport { Record, RecordButton } from \"./record.model\";\r\n\r\nexport class DynamicModuleListConfig {\r\n /**\r\n * Show/Hide module name in COMPILE/LIST\r\n */\r\n showTitle: boolean = true;\r\n\r\n /**\r\n * Lista delle azioni di default da mostrare per visualizzare/modificare/duplicare/eliminare in LIST MODE\r\n */\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault\r\n\r\n /**\r\n * Lista dei record da mostrare in LIST MODE\r\n */\r\n values: Array<Record>;\r\n\r\n /**\r\n * Lista degli eventuali bottoni esterni dipendenti dall'applicazione utilizzatrice in aggiunta ai defaultListActions\r\n */\r\n externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n \r\n /**\r\n * L'Id utente per filtrare le risposte\r\n */\r\n userID: string = \"0\";\r\n constructor(\r\n showTitle: boolean = true,\r\n values: Array<Record> = null,\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault(),\r\n userID: string = \"0\",\r\n externalButtons: Array<RecordButton> = new Array<RecordButton>()\r\n ) {\r\n this.showTitle = showTitle;\r\n this.values = values;\r\n this.defaultListActions = defaultListActions;\r\n this.userID = userID;\r\n this.externalButtons = externalButtons;\r\n }\r\n}\r\n","export class DynamicModuleRepairConfig {\r\n /*\r\n * stringa da passare in REPAIR MODE\r\n */\r\n FormJSON: string = \"\";\r\n\r\n constructor(formJson: string){\r\n this.FormJSON = formJson;\r\n }\r\n}\r\n","export enum DynamicModuleViewModeEnum {\r\n NONE = 0,\r\n VIEW = 1,\r\n COMPILE = 2,\r\n LIST = 3,\r\n REPAIR = 4,\r\n LISTWIEW = 5,\r\n FILTER = 6,\r\n GRAPHS = 7\r\n}","export class EndPointConfiguration {\r\n Records: {\r\n GetByFormIDEndPoint?: EndPointData;\r\n GetAllByEntAndUserIDEndPoint?: EndPointData;\r\n GetByIDEndPoint?: EndPointData;\r\n SaveEndPoint?: EndPointData;\r\n DuplicateEndPoint?: EndPointData;\r\n DeleteEndPoint?: EndPointData;\r\n RepairEndPoint?: EndPointData;\r\n ApplyFilter?:EndPointData;\r\n };\r\n Forms: {\r\n GetByIDEndPoint: EndPointData;\r\n GetByIDAndVersionEndPoint: EndPointData;\r\n SaveEndPoint: EndPointData;\r\n };\r\n\r\n constructor(baseUrl: string = null, userToken: string = null) {\r\n if (baseUrl != null) {\r\n this.Records = {\r\n GetByFormIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/getall\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"test\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n GetAllByEntAndUserIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/GetAllByUserID\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n Params: [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n GetByIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/getByID\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n SaveEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/save\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n Params: [\r\n {\r\n ParamName: \"CompanyID\",\r\n ParamValue: 3,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n {\r\n ParamName: \"sendNotification\",\r\n ParamValue: true,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ],\r\n },\r\n DuplicateEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/duplicate\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n DeleteEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/delete\",\r\n RequestMethod: RequestMethodEnum.DELETE,\r\n },\r\n ApplyFilter: {\r\n Token: userToken,\r\n Url: baseUrl + \"/v1/applyfilter\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n Params: [\r\n {\r\n ParamName: \"filter\",\r\n ParamValue:3,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ],\r\n },\r\n };\r\n this.Forms = {\r\n GetByIDEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/form\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n GetByIDAndVersionEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/getbyidadnversion\",\r\n RequestMethod: RequestMethodEnum.GET,\r\n },\r\n SaveEndPoint: {\r\n Token: userToken,\r\n Url: baseUrl + \"/conf/form\",\r\n RequestMethod: RequestMethodEnum.POST,\r\n },\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport class EndPointData {\r\n Url: string;\r\n Token?: string;\r\n RequestMethod: RequestMethodEnum;\r\n Params?: EndPointDataParams[];\r\n}\r\n\r\nexport class EndPointDataParams {\r\n ParamName: string;\r\n ParamValue: any = null;\r\n ParamType: ParamTypeEnum;\r\n}\r\n\r\nexport enum ParamTypeEnum {\r\n \"Query param\" = 1,\r\n \"In route\" = 2,\r\n \"In Body\" = 3,\r\n}\r\n\r\nexport enum RequestMethodEnum {\r\n GET = \"GET\",\r\n POST = \"POST\",\r\n PUT = \"PUT\",\r\n DELETE = \"DELETE\",\r\n}\r\n","/**\r\n * Classe base che implementa la valorizzazione dell'ID (se null) con una nuova GUID \r\n * in creazione dell'oggetto.\r\n * Per scelta architetturale, visto che non possiamo assumere la persistenza su DB relazionale o su NOSQL, ogni\r\n * oggetto della configurazione viene persistito, e gestito con ID di tipo stringa creato da una GUID.\r\n */\r\nexport class BaseObj {\r\n ID: string;\r\n}","import { BaseObj } from \"./baseObj.model\";\r\nimport { IRootObject } from \"../interfaces/iRootObject.interface\";\r\nimport { BaseField } from \"./baseField.model\";\r\n\r\n/**\r\n * Classe che rappresenta una Form completa.\r\n * Si tratta dell'oggetto che viene rappresentato a video e con cui l'utente interagisce.\r\n */\r\nexport class Form extends BaseObj implements IRootObject {\r\n Code: string;\r\n Name: string;\r\n Description: string;\r\n Version: number;\r\n OrgaID: string;\r\n // FormType: FormTypeEnum;\r\n FormScalarType: FormScalarTypeEnum;\r\n FormFieldsGroups: Array<FormFieldGroup>;\r\n\r\n /**\r\n * Elenco dei campi rappresentati nella form\r\n * possono appartenere ad una sola entità\r\n */\r\n\r\n Fields: Array<BaseField>;\r\n ActionsOnRecord: Array<ActionOnRecord>;\r\n\r\n /**\r\n * Elenco delle form contenute nella form base, ad esempio possono essere le varie form di\r\n * dettaglio\r\n */\r\n\r\n InnerForms: Array<Form>;\r\n CreationDate: Date;\r\n CreationUser: number;\r\n ModifyDate: Date;\r\n ModifyUser: number;\r\n RootEntityID: string;\r\n\r\n // Proprietà client\r\n OldName?: string;\r\n ObjectFields: any[];\r\n}\r\n\r\nexport class FormFieldGroup {\r\n Name: string;\r\n OrdinalPosition?: number;\r\n}\r\n\r\nexport class ActionOnRecord {\r\n Name: string;\r\n Icon: string;\r\n Action: string; //Codice js\r\n OrdinalPosition: number;\r\n}\r\n\r\nexport enum FormTypeEnum {\r\n SCALAR = 1, /* form di tipo scalare */\r\n LIST = 2 /* form di tipo lista che viene rappresentata con molti record */\r\n}\r\n\r\nexport enum FormScalarTypeEnum {\r\n \"Semplice\" = 1, //FLAT\r\n \"A step\" = 2, //STEPPER\r\n \"In tab\" = 3, //GROUPED_BY_TAB\r\n \"In accordion\" = 4 //GROUPED_BY_ACCORDION\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport Swal from 'sweetalert2';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EqpDynamicModuleDialogService {\r\n\r\n constructor() { }\r\n \r\n /**\r\n * Mostra uno sweet alert di tipo SUCCESS con il messaggio passato come parametro.\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Operazione completata')\r\n */\r\n static Success(message: string, title: string = null) {\r\n let currentTitle = title != null ? title : 'Operazione completata con successo.';\r\n Swal.fire(currentTitle, message, 'success');\r\n }\r\n\r\n /**\r\n * Mostra uno sweet alert di tipo ERROR con il messaggio passato come parametro.\r\n * @param message Messaggio d'errore da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Errore')\r\n */\r\n static Error(message: string | string[], title: string = null) {\r\n let currentTitle = title != null ? title : 'Errore';\r\n if (Array.isArray(message)) {\r\n currentTitle = title != null ? title : 'Errore';\r\n let htmlErrors: string = message.join(\"<br>\");\r\n Swal.fire({\r\n title: currentTitle,\r\n html: htmlErrors,\r\n icon: 'error'\r\n });\r\n }\r\n else {\r\n Swal.fire(currentTitle, message, 'error');\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Mostra uno sweetalert di tipo CONFIRM con il messaggio passato come parametro e se viene premuto\r\n * CONFERMA lancia la funzione di callback passata come parametro\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Info')\r\n */\r\n static Confirm(message: string | string[], confirmCallback: any, isWarning: boolean = false, title: string = null, customWidth: string = null) {\r\n\r\n let currentTitle = title != null ? title : 'Sei sicuro di voler procedere?';\r\n if (Array.isArray(message)) {\r\n let htmlErrors: string = message.join(\"<br>\");\r\n Swal.fire({\r\n title: currentTitle,\r\n html: htmlErrors,\r\n width: customWidth ? customWidth : '32rem',\r\n icon: !isWarning ? 'question' : 'warning',\r\n showCancelButton: true,\r\n allowOutsideClick: false,\r\n allowEscapeKey: false\r\n }).then((result) => {\r\n if (result.value && confirmCallback) {\r\n confirmCallback();\r\n }\r\n });\r\n }\r\n else {\r\n Swal.fire({\r\n title: currentTitle,\r\n text: message,\r\n width: customWidth ? customWidth : '32rem',\r\n icon: !isWarning ? 'question' : 'warning',\r\n showCancelButton: true,\r\n allowOutsideClick: false,\r\n allowEscapeKey: false\r\n }).then((result) => {\r\n if (result.value && confirmCallback) {\r\n confirmCallback();\r\n }\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Mostra uno sweetalert di tipo INFO con il messaggio passato come parametro\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Info')\r\n */\r\n static Info(message: string, title: string = null, isToast: boolean = null) {\r\n let currentTitle = title != null ? title : \"Informazione:\";\r\n Swal.fire(currentTitle, message, 'info');\r\n }\r\n\r\n /**\r\n * Mostra uno sweetalert di tipo WARNING con il messaggio passato come parametro\r\n * @param message Messaggio da mostrare nello sweetalert\r\n * @param title Titolo dello sweetalert (di default mostra 'Attenzione!')\r\n */\r\n static Warning(message: string | string[], title: string = null, isToast: boolean = null) {\r\n let currentTitle = title != null ? title : \"Attenzione!\";\r\n\r\n if (Array.isArray(message)) {\r\n let htmlWarnings: string = message.join(\"<br>\");\r\n Swal.fire({\r\n title: currentTitle,\r\n html: htmlWarnings,\r\n icon: 'warning'\r\n });\r\n } else {\r\n Swal.fire(currentTitle, message, 'warning');\r\n }\r\n }\r\n}\r\n","import { UntypedFormGroup } from '@angular/forms';\r\nimport { BaseObj } from './baseObj.model';\r\n\r\n/**\r\n * Contiene le informazioni di base del campo, indipendentemente dal tipo.\r\n * Questa classe è volutamente astratta perché il tipo di campo è dettato dal tipo\r\n */\r\nexport class BaseField extends BaseObj {\r\n /**\r\n * Nome del campo che per progettazione è una sostituzione della label\r\n * Il vero identificativo del campo è l'ID\r\n */\r\n Name: string;\r\n Label: string;\r\n Description: string;\r\n Required: boolean;\r\n Formula: string;\r\n Tooltip: string;\r\n OrdinalPosition: number;\r\n Disabled: boolean;\r\n Readonly: boolean;\r\n VisibleIf: string;\r\n FieldstyleCSS: string;\r\n LabelstyleCSS: string;\r\n\r\n // rappresentazione grafica di default per gli elementi di risposta\r\n AnswerStyle: AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: \"\", LabelstyleCSS: \"\", ColSpanSizes: [] };\r\n\r\n\r\n /**\r\n * Entità a cui appartiene il campo. Si tenga presente che sono ammessi anche campi\r\n * di sola visualizzazione e calcolati, da utilizzare nelle form, \r\n * e per questo motivo possono essere con Entity == null\r\n */\r\n EntityID: string;\r\n\r\n FieldGroup: string;\r\n ColSpanSizes: Array<ColSpanSizesEnum>;\r\n InListView: boolean;\r\n\r\n // Proprità client\r\n FieldType: FieldTypeEnum;\r\n FieldValue: any;\r\n FormFormGroup: UntypedFormGroup;\r\n}\r\n\r\n\r\nexport class AnswerStyle {\r\n InListView: boolean // visible\r\n VisibleIf: string // formula visible\r\n FieldstyleCSS: string\r\n LabelstyleCSS: string\r\n ColSpanSizes: Array<ColSpanSizesEnum>\r\n};\r\n\r\nexport enum FieldTypeEnum {\r\n 'Campo di testo' = 1,\r\n 'Area di testo' = 2,\r\n 'Booleano' = 3,\r\n 'Data e/o ora' = 4,\r\n 'Campo numerico' = 5,\r\n 'Allegato' = 6,\r\n 'Immagine' = 7,\r\n 'Elenco generico' = 8,\r\n 'Lookup' = 9,\r\n 'Form di dettaglio' = 10\r\n}\r\n\r\nexport enum ColSpanSizesEnum {\r\n 'col-sm-3' = 1,\r\n 'col-sm-4' = 2,\r\n 'col-sm-6' = 3,\r\n 'col-sm-12' = 4,\r\n\r\n 'col-md-3' = 5,\r\n 'col-md-4' = 6,\r\n 'col-md-6' = 7,\r\n 'col-md-12' = 8,\r\n\r\n 'col-lg-3' = 9,\r\n 'col-lg-4' = 10,\r\n 'col-lg-6' = 11,\r\n 'col-lg-12' = 12,\r\n\r\n 'align-self-start' = 13,\r\n 'align-self-center' = 14,\r\n 'align-self-end' = 15,\r\n\r\n 'col-sm-1' = 16,\r\n 'col-sm-2' = 17,\r\n 'col-sm-5' = 18,\r\n 'col-sm-7' = 19,\r\n 'col-sm-8' = 20,\r\n 'col-sm-9' = 21,\r\n 'col-sm-10' = 22,\r\n 'col-sm-11' = 23,\r\n \r\n 'col-md-1' = 24,\r\n 'col-md-2' = 25,\r\n 'col-md-5' = 26,\r\n 'col-md-7' = 27,\r\n 'col-md-8' = 28,\r\n 'col-md-9' = 29,\r\n 'col-md-10' = 30,\r\n 'col-md-11' = 31,\r\n \r\n 'col-lg-1' = 32,\r\n 'col-lg-2' = 33,\r\n 'col-lg-5' = 34,\r\n 'col-lg-7' = 35,\r\n 'col-lg-8' = 36,\r\n 'col-lg-9' = 37,\r\n 'col-lg-10' = 38,\r\n 'col-lg-11' = 39\r\n}\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Campo di testo */\r\nexport class TextField extends BaseField {\r\n TextMask: TextMaskEnum;\r\n MaxLenght: number;\r\n MinLenght: number;\r\n Microphone: boolean;\r\n}\r\n\r\nexport enum TextMaskEnum {\r\n 'Password' = 1,\r\n 'Email' = 2,\r\n 'Telefono' = 3,\r\n 'Url' = 4\r\n}\r\n\r\nexport const UrlRegex = '(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?';\r\nexport const TelRegex = '([+]?[0-9]{10,14})';","import { AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport class ArrayValidators {\r\n public static minLenght(minLenght: number): (AbstractControl) => ValidationErrors | null {\r\n var validationFunction = (control: AbstractControl): ValidationErrors | null => {\r\n return !!control && !!control.value && Array.isArray(control.value) && control.value.length >= minLenght\r\n ? null\r\n : { hasMinLenght: false };\r\n };\r\n return validationFunction;\r\n }\r\n\r\n public static maxLenght(maxLenght: number): (AbstractControl) => ValidationErrors | null {\r\n var validationFunction = (control: AbstractControl): ValidationErrors | null => {\r\n return !!control && !!control.value && Array.isArray(control.value) && control.value.length <= maxLenght\r\n ? null\r\n : { hasMinLenght: false };\r\n };\r\n return validationFunction;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SpinnerService {\r\n isLoading = new Subject<boolean>();\r\n\r\n private requestsCount: number = 0;\r\n\r\n /**\r\n * Mostra lo spinner\r\n */\r\n show() {\r\n setTimeout(() => {\r\n this.isLoading.next(true);\r\n }, 100);\r\n }\r\n\r\n /**\r\n * Nasconde lo spinner\r\n */\r\n hide() {\r\n setTimeout(() => {\r\n this.isLoading.next(false);\r\n }, 100);\r\n }\r\n\r\n addRequestCounter() {\r\n this.requestsCount++;\r\n this.show();\r\n }\r\n\r\n removeRequestCounter() {\r\n this.requestsCount--;\r\n if (this.requestsCount == 0)\r\n this.hide();\r\n }\r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n ValidatorFn,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport {\r\n BaseField,\r\n ColSpanSizesEnum,\r\n FieldTypeEnum,\r\n} from \"../models/baseField.model\";\r\nimport { Context } from \"../models/context.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointData,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n RequestMethodEnum,\r\n} from \"../models/endPointConfiguration.model\";\r\nimport { AttachmentField } from \"../models/fields/attachmentField.model\";\r\nimport { ImageField } from \"../models/fields/imageField.model\";\r\nimport { ListValueField } from \"../models/fields/listValueField.model\";\r\nimport { TextareaField } from \"../models/fields/textareaField.model\";\r\nimport {\r\n TextMaskEnum,\r\n TextField,\r\n UrlRegex,\r\n TelRegex,\r\n} from \"../models/fields/textField.model\";\r\nimport { Form } from \"../models/form.model\";\r\nimport { Record } from \"../models/record.model\";\r\nimport { ArrayValidators } from \"./custom-form-validators.service\";\r\nimport { EqpDynamicModuleDialogService } from \"./eqp-dynamic-module-dialog.service\";\r\nimport { SpinnerService } from \"./spinner.service\";\r\nimport { GlobalService } from \"./global.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class UtilityHelperService {\r\n public static context: Context = new Context();\r\n\r\n debugMode: boolean = false;\r\n debugLog(message: string, item?: any){\r\n if(this.debugMode){\r\n if(item){\r\n console.log(message, item)\r\n }else{\r\n console.log(message)\r\n }\r\n }\r\n }\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private http: HttpClient,\r\n private spinnerService: SpinnerService\r\n ) {}\r\n\r\n public static EvaluateFieldFormula(\r\n formula: string,\r\n rec: Record,\r\n ctx: any\r\n ): any {\r\n const evaluatedValue = eval(formula);\r\n return evaluatedValue ? evaluatedValue : null;\r\n }\r\n\r\n public static SetContext(ctx: Context) {\r\n this.context = ctx;\r\n }\r\n public static isNumeric(n) {\r\n return !isNaN(n);\r\n }\r\n\r\n public static initStyles(stylecss) {\r\n return stylecss.split(\";\").reduce((a, b) => {\r\n const keypar = b.split(\":\");\r\n if (keypar.length > 1) a[keypar[0].trim()] = keypar[1].trim();\r\n return a;\r\n }, {});\r\n }\r\n\r\n public static GetFieldType(field: BaseField) {\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Campo di testo\"]: {\r\n const t: TextField = Object.assign(new TextField(), field);\r\n return t;\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per impostare i valori da suggerire nell'autocomplete per i campi in cui l'utente deve scrivere comandi javascript.\r\n * In base all'ultimo carattere digitato viene impostato un elenco di oggetti o proprietà che l'utente ha a disposizione in quel momento.\r\n * @param fields Array di BaseField aggiunti alla Form\r\n * @param typedFormula Stringa digitata dall'utente\r\n * @summary Il metodo imposta i suggerimenti basandosi su 3 casi:\r\n * 1) l'utente non ha digitato nulla o la stringa digitata dall'utente finisce con uno spazio vuoto\r\n * 2) la stringa digitata dall'utente finisce con un \".\"\r\n * 3) la stringa digitata dall'utente non coincide con nessun altro caso sopra (finisce con un carattere qualunque)\r\n */\r\n public static GetAutocompleteOptions(\r\n fields: Array<BaseField>,\r\n typedFormula: string\r\n ): Array<{ label: string; value: string }> {\r\n let autocompleteOptions: Array<{ label: string; value: string }> = [];\r\n\r\n // Recupero i nomi di tutti i campi creati fino ad ora nella form.\r\n const availableRecProperties: Array<string> = fields.map((f) =>\r\n f.Label.split(\" \").join(\"_\")\r\n );\r\n\r\n // Nel casi in cui l'utente non ha inserito nulla oppure la stringa finisce con uno spazio vuoto o un simbolo diverso da \".\"\r\n // (un carattere non alfanumerico) imposto come suggerimenti solo \"rec\" e \"ctx\", ovvero gli unici due oggetti a cui l'utente ha accesso.\r\n if (\r\n !typedFormula ||\r\n (!typedFormula.endsWith(\".\") &&\r\n new RegExp(\"[^0-9a-zA-Z_]\").test(\r\n typedFormula.substring(typedFormula.length - 1, typedFormula.length)\r\n ))\r\n ) {\r\n autocompleteOptions = [\r\n { label: \"rec\", value: (typedFormula ? typedFormula : \"\") + \"rec\" },\r\n { label: \"ctx\", value: (typedFormula ? typedFormula : \"\") + \"ctx\" },\r\n ];\r\n }\r\n // Se la stringa finisce con un \".\" vuol dire che l'utente sta cercando di accedere ad una proprietà di un oggetto\r\n // a sua disposizione. Recupero il nome dell'ultimo oggetto digitato dall'utente e se l'oggetto scelto è \"rec\" o \"ctx\"\r\n // allora suggerisco le proprietà che esistono all'interno di questi oggetti altrimenti non mostro nulla.\r\n else if (typedFormula.endsWith(\".\")) {\r\n const formulaPieces: Array<string> = typedFormula\r\n .split(\" \")\r\n [typedFormula.split(\" \").length - 1].split(\".\");\r\n if (formulaPieces[formulaPieces.length - 2] === \"rec\") {\r\n autocompleteOptions = availableRecProperties.map((f) => {\r\n return { label: f, value: typedFormula + f };\r\n });\r\n } else if (formulaPieces[formulaPieces.length - 2] === \"ctx\") {\r\n autocompleteOptions = Object.keys(UtilityHelperService.context).map(\r\n (f) => {\r\n return { label: f, value: typedFormula + f };\r\n }\r\n );\r\n } else if (\r\n formulaPieces.length > 2 &&\r\n formulaPieces[formulaPieces.length - 3] === \"ctx\" &&\r\n formulaPieces[formulaPieces.length - 2] === \"User\"\r\n ) {\r\n autocompleteOptions = Object.keys(\r\n UtilityHelperService.context.User\r\n ).map((f) => {\r\n return { label: f, value: typedFormula + f };\r\n });\r\n } else {\r\n autocompleteOptions = [];\r\n }\r\n }\r\n // In tutti gli altri casi, ovvero quando la stringa digitata finisce con un carattere diverso da quelli\r\n // controllati finora, vuol dire che l'utente sta digitanto il nome di un oggetto, una proprietà o una\r\n // funzione javascript. Controllo la parola che l'utente sta digitando e se fa parte di uno degli oggetti a disposizione\r\n // o una proprietà di essi allora suggerisco i possibili match.\r\n else {\r\n const availableOptions: Array<{ label: string; value: string }> = [];\r\n\r\n // Prendo tutti i blocchi di caratteri digitati dall'utente\r\n const allFormulaWords: Array<string> = typedFormula.split(\" \");\r\n // Prendo l'ultimo blocco di caratteri digitato dall'utente\r\n const lastTypedString: string =\r\n allFormulaWords[allFormulaWords.length - 1];\r\n\r\n // Se la l'ultima stringa digitata non contiene caratteri speciali allora splitto la stringa\r\n // sui \".\" e imposto i suggerimenti in base al path della prorpietà che si sta digitando.\r\n if (!new RegExp(\"[^0-9a-zA-Z_.]\").test(lastTypedString)) {\r\n const propertyPath = lastTypedString.split(\".\");\r\n const lastTypedWork = propertyPath[propertyPath.length - 1];\r\n\r\n let propertiesToCheck: Array<string> = [];\r\n\r\n if (propertyPath.length == 1) {\r\n propertiesToCheck = [\"rec\", \"ctx\"];\r\n } else if (\r\n propertyPath.length > 1 &&\r\n propertyPath[propertyPath.length - 2] === \"ctx\"\r\n ) {\r\n propertiesToCheck = Object.keys(UtilityHelperService.context);\r\n } else if (\r\n propertyPath.length > 2 &&\r\n propertyPath[propertyPath.length - 3] === \"ctx\" &&\r\n propertyPath[propertyPath.length - 2] === \"User\"\r\n ) {\r\n propertiesToCheck = Object.keys(UtilityHelperService.context.User);\r\n } else if (\r\n propertyPath.length > 1 &&\r\n propertyPath[propertyPath.length - 2] === \"rec\"\r\n ) {\r\n propertiesToCheck = availableRecProperties;\r\n }\r\n\r\n // Eseguo il controllo sulle proprietà recuperate, aggiungo ai suggerimenti tutti i nomi che iniziano con\r\n // quello che sta digitando l'utente.\r\n propertiesToCheck.forEach((prop) => {\r\n if (prop.startsWith(lastTypedWork)) {\r\n availableOptions.push({\r\n label: prop,\r\n value:\r\n typedFormula +\r\n prop.substring(lastTypedWork.length, prop.length),\r\n });\r\n }\r\n });\r\n }\r\n\r\n autocompleteOptions = availableOptions;\r\n }\r\n\r\n return autocompleteOptions;\r\n }\r\n\r\n /**\r\n * Metodo invocato dall'html per impostare le classi css per visualizzare il campo all'interno della form.\r\n * Se per il field sono state specificate delle classi allora vengono applcate quelle, altrimenti vengono usate\r\n * delle classi di default.\r\n * @param field BaseField da visualizzare.\r\n * @returns Restituisce una stringa contenente le classi css da applicare.\r\n */\r\n getFieldSyleClass(field: BaseField): string {\r\n \r\n if (field.ColSpanSizes && field.ColSpanSizes.length > 0){\r\n ////GlobalService.debugLog('field', field)\r\n\r\n return field.ColSpanSizes.map((size) =>\r\n ColSpanSizesEnum[size].toString()\r\n ).join(\" \");\r\n }\r\n\r\n return this.getDefaultStyleClass(field);\r\n }\r\n\r\n /**\r\n * Metodo invocato dall'html per impostare le classi css per visualizzare il campo all'interno della form.\r\n * Se per il field sono state specificate delle classi allora vengono applcate quelle, altrimenti vengono usate\r\n * delle classi di default.\r\n * @param field BaseField da visualizzare.\r\n * @returns Restituisce una stringa contenente le classi css da applicare.\r\n */\r\n getFieldAnswerStyleClass(field: BaseField): string {\r\n \r\n if (field.AnswerStyle && field.AnswerStyle.ColSpanSizes && field.AnswerStyle.ColSpanSizes.length > 0){\r\n ////GlobalService.debugLog('field', field)\r\n\r\n return field.AnswerStyle.ColSpanSizes.map((size) =>\r\n ColSpanSizesEnum[size].toString()\r\n ).join(\" \");\r\n }\r\n\r\n return this.getDefaultStyleClass(field);\r\n }\r\n\r\n private getDefaultStyleClass(field: BaseField): string{\r\n \r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Campo di testo\"]:\r\n //GlobalService.debugLog('Campo di testo')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Area di testo\"]:\r\n //GlobalService.debugLog('Area di testo')\r\n return \"col-sm-12 col-md-12 col-lg-12 align-self-end\";\r\n case FieldTypeEnum[\"Booleano\"]:\r\n //GlobalService.debugLog('Booleano')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-center\";\r\n case FieldTypeEnum[\"Data e/o ora\"]:\r\n //GlobalService.debugLog('Data e/o ora')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Campo numerico\"]:\r\n //GlobalService.debugLog('Campo numerico')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Allegato\"]:\r\n //GlobalService.debugLog('Allegato')\r\n if (\r\n (field as AttachmentField).IsMultiAttach ||\r\n ((field as AttachmentField).MetadataFields &&\r\n (field as AttachmentField).MetadataFields.length > 0)\r\n ) {\r\n return \"col-sm-12 col-md-12 col-lg-12 align-self-end\";\r\n } else {\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n }\r\n case FieldTypeEnum[\"Immagine\"]:\r\n //GlobalService.debugLog('Immagine')\r\n if (\r\n (field as ImageField).AttachDefinition.IsMultiAttach ||\r\n ((field as ImageField).AttachDefinition.MetadataFields &&\r\n (field as ImageField).AttachDefinition.MetadataFields.length > 0)\r\n ) {\r\n return \"col-sm-12 col-md-12 col-lg-12 align-self-end\";\r\n } else {\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n }\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n //GlobalService.debugLog('Elenco generico')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Lookup\"]:\r\n //GlobalService.debugLog('Lookup')\r\n return \"col-sm-12 col-md-4 col-lg-4 align-self-end\";\r\n case FieldTypeEnum[\"Form di dettaglio\"]:\r\n //GlobalService.debugLog('Form di dettaglio')\r\n return \"col-sm-12 col-md-12 col-lg-12 align-self-end\";\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta una Form a partire dai suoi BaseField.\r\n * @param formFields Lista dei BaseField che compongono la form.\r\n * @param record Oggetto di tipo Record che contiene i valori dei campi.\r\n * @param onlyView Se TRUE disabilita la form per renderla in sola lettura.\r\n * @param includeCurrentFormInField Se TRUE popola la proprietà FormFormGroup all'interno di ogni BaseField con il FormGroup corrente.\r\n * @returns Restituisce un FormGroup rappresentate la Form a cui appartengono i BaseField ricevuti in input.\r\n */\r\n public CreateFormFormGroup(\r\n formFields: Array<BaseField>,\r\n record: Record,\r\n onlyView = false,\r\n includeCurrentFormInField = true\r\n ): UntypedFormGroup {\r\n // //GlobalService.debugLog(\"formFields\", formFields);\r\n // //GlobalService.debugLog(\"record\", record);\r\n // //GlobalService.debugLog(\"onlyView\", onlyView);\r\n // //GlobalService.debugLog(\"includeCurrentFormInField\", includeCurrentFormInField);\r\n\r\n const formForm: UntypedFormGroup = this.formBuilder.group([]);\r\n\r\n formFields.forEach((field) => {\r\n // //GlobalService.debugLog(field);\r\n formForm.addControl(\r\n field.Name,\r\n this.createFieldFormControl(field, record)\r\n );\r\n if (includeCurrentFormInField) {\r\n // //GlobalService.debugLog(field);\r\n \r\n field.FormFormGroup = formForm;\r\n }\r\n });\r\n if (onlyView) {\r\n formForm.disable();\r\n }\r\n\r\n return formForm;\r\n }\r\n\r\n /**\r\n * Funzione per creare e aggiungere al FormGroup rappresentante la form un nuovo FormControl a partire da un Field.\r\n * In nuovo FormControl avrà il nome del campo passato e verranno impostati i Validators in base al tipo del campo stesso.\r\n * @param field BaseField per cui creare il FormControl da inserire nel FormGroup dela form.\r\n */\r\n private createFieldFormControl(\r\n field: BaseField,\r\n record: Record\r\n ): AbstractControl {\r\n const validators: Array<ValidatorFn> = [];\r\n\r\n if (field.Required) validators.push(Validators.required);\r\n\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Campo di testo\"]:\r\n if ((field as TextField).MaxLenght) {\r\n validators.push(Validators.maxLength((field as TextField).MaxLenght));\r\n }\r\n if ((field as TextField).MinLenght) {\r\n validators.push(Validators.minLength((field as TextField).MinLenght));\r\n }\r\n switch ((field as TextField).TextMask) {\r\n case TextMaskEnum.Url:\r\n validators.push(Validators.pattern(UrlRegex));\r\n break;\r\n case TextMaskEnum.Email:\r\n validators.push(Validators.email);\r\n break;\r\n case TextMaskEnum.Telefono:\r\n validators.push(Validators.pattern(TelRegex));\r\n break;\r\n }\r\n break;\r\n case FieldTypeEnum[\"Area di testo\"]:\r\n if ((field as TextareaField).MaxLenght) {\r\n validators.push(\r\n Validators.maxLength((field as TextareaField).MaxLenght)\r\n );\r\n }\r\n if ((field as TextareaField).MinLenght) {\r\n validators.push(\r\n Validators.minLength((field as TextareaField).MinLenght)\r\n );\r\n }\r\n break;\r\n case FieldTypeEnum.Allegato:\r\n case FieldTypeEnum.Immagine:\r\n if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n break;\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if ((field as ListValueField).IsMultiChoiche)\r\n if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n break;\r\n }\r\n\r\n return new UntypedFormControl(record[field.Name], validators);\r\n }\r\n\r\n /**\r\n * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n * a cui si deve connettere e al token da passare per autenticarsi.\r\n * @param baseServerUrl Stringa dell'url base del server (es: \"http://localhost:5000\").\r\n * @param userToken Token dell'utente loggato da usare per autenticarsi se necessario.\r\n * @returns Resituisce la configurazione completa degli endPoint da usare di default.\r\n */\r\n public ConfigureDefaultEndPoints(\r\n baseServerUrl: string,\r\n userToken: string\r\n ): EndPointConfiguration {\r\n let endPointConfiguration: EndPointConfiguration =\r\n new EndPointConfiguration(baseServerUrl, userToken);\r\n\r\n // endPointConfiguration.Records = {\r\n // GetByFormIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/getall\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // GetAllByEntAndUserIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/GetAllByUserID\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // GetByIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/getByID\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // SaveEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/save\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.POST,\r\n // },\r\n // DuplicateEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/duplicate\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // DeleteEndPoint: {\r\n // Url: baseServerUrl + \"/api/v1/delete\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.DELETE,\r\n // },\r\n // };\r\n // endPointConfiguration.Forms = {\r\n // GetByIDEndPoint: {\r\n // Url: baseServerUrl + \"/api/conf/form\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // GetByIDAndVersionEndPoint: {\r\n // Url: baseServerUrl + \"/api/conf/GetByIDAndVersion\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.GET,\r\n // },\r\n // SaveEndPoint: {\r\n // Url: baseServerUrl + \"/api/conf/form\",\r\n // Token: userToken,\r\n // RequestMethod: RequestMethodEnum.POST,\r\n // },\r\n // };\r\n return endPointConfiguration;\r\n }\r\n /**\r\n *\r\n * @param expression prende una stringa in input e verifica che ogni parentesi aperta venga anche chiusa\r\n * @returns true se le parentesi sono pari e ogni parentesi chiude se stessa, false se mancano parentesi o non vengono chiuse\r\n */\r\n public static stringCheckParentesis(expression, required = false) {\r\n if (expression == undefined || expression == null) {\r\n return required ? false : true;\r\n }\r\n let stack = [];\r\n let current;\r\n const matchLookup = {\r\n \"(\": \")\",\r\n \"[\": \"]\",\r\n \"{\": \"}\",\r\n };\r\n\r\n for (let i = 0; i < expression.length; i++) {\r\n current = expression[i]; //easier than writing it over and over\r\n\r\n if (current === \"(\" || current === \"[\" || current === \"{\") {\r\n stack.push(current);\r\n } else if (current === \")\" || current === \"]\" || current === \"}\") {\r\n const lastBracket = stack.pop();\r\n\r\n if (matchLookup[lastBracket] !== current) {\r\n //if the stack is empty, .pop() returns undefined, so this expression is still correct\r\n\r\n return false; //terminate immediately - no need to continue scanning the string\r\n }\r\n }\r\n }\r\n\r\n return stack.length === 0; //any elements mean brackets left open\r\n }\r\n\r\n /**\r\n * Metodo che data la configurazione di un endpoint costruisce l'url da chiamare, gli eventuali parametri\r\n * da passare (nel body o nella rotta) ed effettua la chiamata. Al termine della chiamata esegue le eventuali\r\n * funzioni di callback (sia in caso di successo che in caso di errore) passate in input.\r\n * @param endPointData Cofigurazione dell'endpoint da chiamare.\r\n * @param dynamicModuleParams Array dei parametri aggiunti dal modulo dinamico a quelli già configurati\r\n * (ad esempio il record o la form da salvare oppure l'ID per recuperare una particolare entità).\r\n * @param callback Metodo da eseguire in caso di successo dopo la chiamata http.\r\n * NOTA: in input viene passata la risposta della chiamata stessa.\r\n * @param errorCallBack Metodo da eseguire in caso di errore dopo la chiamata http.\r\n * NOTA: in input viene passato l'errore generato della chiamata stessa.\r\n */\r\n public RunEndPointCall(\r\n endPointData: EndPointData,\r\n dynamicModuleParams: Array<EndPointDataParams> = null,\r\n callback: (e: Form | Record | Array<Record>) => void = null,\r\n errorCallBack: (err: unknown) => void = null\r\n ): void {\r\n this.spinnerService.addRequestCounter();\r\n\r\n let url = `${endPointData.Url}`;\r\n let queryParams: string = null;\r\n const bodyParams = {\r\n AdditionalParams: {},\r\n };\r\n\r\n //#region mergeParam\r\n // unisco i dati di default definiti nella configurazione della chiamata con i dati che imposto nella chiamata specifica\r\n if (endPointData.Params == undefined || endPointData.Params == null) {\r\n endPointData.Params = [];\r\n }\r\n if (dynamicModuleParams == undefined || dynamicModuleParams == null) {\r\n dynamicModuleParams = [];\r\n }\r\n\r\n const mergedParams: Array<EndPointDataParams> = [...endPointData.Params];\r\n\r\n dynamicModuleParams.forEach((obj) => {\r\n const existingIndex = mergedParams.findIndex(\r\n (item) => item.ParamName === obj.ParamName\r\n );\r\n\r\n if (existingIndex !== -1) {\r\n mergedParams[existingIndex].ParamValue = obj.ParamValue;\r\n mergedParams[existingIndex].ParamType = obj.ParamType;\r\n } else {\r\n mergedParams.push(obj);\r\n }\r\n });\r\n\r\n if (mergedParams) {\r\n mergedParams.forEach((param) => {\r\n switch (param.ParamType) {\r\n case ParamTypeEnum[\"Query param\"]: {\r\n const stringParam: string =\r\n param.ParamName + \"=\" + param.ParamValue;\r\n queryParams =\r\n (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n break;\r\n }\r\n case ParamTypeEnum[\"In route\"]: {\r\n url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n break;\r\n }\r\n case ParamTypeEnum[\"In Body\"]: {\r\n bodyParams[param.ParamName] = param.ParamValue;\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n //#endregion mergeParam\r\n\r\n //#region addDefaultParams\r\n // Se nella configurazione sono stati definiti parametri da aggiungere alla chiamata questi vengono ciclati\r\n // e aggiunti nel punto in cui devono essere usati.\r\n // if (endPointData.Params) {\r\n // endPointData.Params.forEach(param => {\r\n // switch (param.ParamType) {\r\n // case ParamTypeEnum['Query param']: {\r\n // const stringParam: string = param.ParamName + \"=\" + param.ParamValue;\r\n // queryParams = (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In route']: {\r\n // url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In Body']: {\r\n // bodyParams.AdditionalParams[param.ParamName] = param.ParamValue;\r\n // break;\r\n // }\r\n // }\r\n // });\r\n // }\r\n //#endregion addDefaultParams\r\n\r\n //#region addSpecificParams\r\n // Se sono stati passati parametri da aggiungere alla chiamata definiti all'interno del modulo dinamico\r\n // vengono ciclati e aggiunti nel punto in cui devono essere usati dopo quelli definiti nella configurazione.\r\n // if (dynamicModuleParams) {\r\n // dynamicModuleParams.forEach(param => {\r\n // switch (param.ParamType) {\r\n // case ParamTypeEnum['Query param']: {\r\n // const stringParam: string = param.ParamName + \"=\" + param.ParamValue;\r\n // queryParams = (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In route']: {\r\n // url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n // break;\r\n // }\r\n // case ParamTypeEnum['In Body']: {\r\n // bodyParams[param.ParamName] = param.ParamValue;\r\n // break;\r\n // }\r\n // }\r\n // })\r\n // }\r\n //#endregion addSpecificParams\r\n\r\n if (queryParams != null) {\r\n url =\r\n (url.endsWith(\"/\") ? url.substring(0, url.length - 1) : url) +\r\n \"?\" +\r\n queryParams;\r\n }\r\n\r\n this.http\r\n .request(endPointData.RequestMethod, url, {\r\n headers: endPointData.Token\r\n ? { Authorization: endPointData.Token }\r\n : null,\r\n body: ![RequestMethodEnum.DELETE, RequestMethodEnum.GET].includes(\r\n endPointData.RequestMethod\r\n )\r\n ? bodyParams\r\n : null,\r\n })\r\n .subscribe(\r\n (res: Form | Record | Array<Record>) => {\r\n this.spinnerService.removeRequestCounter();\r\n if (callback) {\r\n callback(res);\r\n }\r\n },\r\n (error) => {\r\n this.spinnerService.removeRequestCounter();\r\n if (errorCallBack) {\r\n errorCallBack(error);\r\n }\r\n EqpDynamicModuleDialogService.Error(error.message);\r\n throw new Error(error.message);\r\n //GlobalService.debugLog(\"RunEndPointCall - subscribe - end\");\r\n }\r\n );\r\n\r\n }\r\n}\r\n","export enum DynamicModuleFilterResultViewModeEnum {\r\n EXTERNAL_ONLY = 0,\r\n INTERNAL_LISTVIEW = 1,\r\n INTERNAL_EQPTABLE = 2\r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GlobalService {\r\n\r\n public static debugMode = false;\r\n\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n static debugLog(message: string, element?: any){\r\n if(this.debugMode){\r\n console.log(message, element);\r\n }\r\n }\r\n\r\n}\r\n","export class Record {\r\n ID: string;\r\n EntID: string;\r\n Version: number;\r\n userID: string;\r\n AnswerDate: string;\r\n HTMLreadableValues: string;\r\n AdditionalParams: any;\r\n [key: string]: any;\r\n}\r\n\r\nexport class DynRecord {\r\n ID: string;\r\n EntID: string;\r\n Version: number;\r\n userID: string;\r\n Values: { [key: string]: any; } = {};\r\n SerializedValues: string;\r\n HTMLreadableValues: string;\r\n AnswerDate: string;\r\n AdditionalParams: string;\r\n PrefilterParams: string;\r\n}\r\n\r\nexport class RecordButton {\r\n\tpublic icon: string;\r\n\tpublic text: string;\r\n\tpublic visible: boolean;\r\n\tpublic fn: Function;\r\n\tpublic extraClass: string; \r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Rappresenta la configurazione di un campo Data o Data e ora, o solo ora */\r\nexport class DateField extends BaseField {\r\n IsOnlyDate: DateTimeTypeEnum;\r\n MinDate: Date;\r\n MaxDate: Date;\r\n DateFormat: string;\r\n}\r\n\r\nexport enum DateTimeTypeEnum {\r\n \"Solo data\" = 1,\r\n \"Solo orario\" = 2,\r\n \"Data e ora\" = 3\r\n}","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n SimpleChanges,\r\n ɵɵNgOnChangesFeature,\r\n ChangeDetectorRef,\r\n} from \"@angular/core\";\r\nimport { IAttachmentDTO } from \"@eqproject/eqp-attachments\";\r\nimport {\r\n CellAlignmentEnum,\r\n ConfigColumn,\r\n EqpTableComponent,\r\n NumberColumnPipe,\r\n TypeColumn,\r\n} from \"@eqproject/eqp-table\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { BaseField, FieldTypeEnum } from \"../../../../models/baseField.model\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../../models/record.model\";\r\nimport { AttachmentField } from \"../../../../models/fields/attachmentField.model\";\r\nimport {\r\n DateField,\r\n DateTimeTypeEnum,\r\n} from \"../../../../models/fields/dateField.model\";\r\nimport { ImageField } from \"../../../../models/fields/imageField.model\";\r\nimport { ListValueField } from \"../../../../models/fields/listValueField.model\";\r\nimport { NumericField } from \"../../../../models/fields/numericField.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynamicModuleListConfig } from \"../../../../models/dynamicModuleListConfig.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"../../../../models/endPointConfiguration.model\";\r\nimport { EqpDynamicModuleDialogService } from \"./../../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\n\r\n\r\n@Component({\r\n selector: \"list-form-record\",\r\n templateUrl: \"list-form-record.component.html\",\r\n styleUrls: [\"./list-form-record.component.scss\"],\r\n})\r\nexport class ListFormRecordComponent implements OnInit, OnChanges {\r\n\r\n @Input() configurations: DynamicModuleListConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n // l'una o l'altra per due modalità d'uso\r\n @Input() formID: string;\r\n @Input() form: Form = null; // boh ma c'era prima\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault =\r\n new DynamicModuleListFormRecordActionsDefault();\r\n showTitle = true;\r\n // values: Array<Record>;\r\n @ViewChild(\"tableRecords\", { static: true }) tableRecords: EqpTableComponent;\r\n\r\n columns = new Array<ConfigColumn>();\r\n loader: boolean = false;\r\n\r\n @Output() onViewRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() onAddViewEditRecord: EventEmitter<{record: Record;onlyView: boolean;}> = new EventEmitter<{ record: Record; onlyView: boolean }>();\r\n \r\n @Output() onDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() onAfterDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService,\r\n private changeDetector: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit(): void { \r\n this.defaultListActions = this.configurations.defaultListActions;\r\n this.showTitle = this.configurations.showTitle;\r\n // this.values = this.configurations.values\r\n GlobalService.debugLog('list-form-record - ngOnInit - configurations', this.configurations);\r\n\r\n this.getFormByID();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n GlobalService.debugLog('list-form-record - changes', changes);\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n // if (changes['configurations'] != undefined && changes['configurations'].firstChange == false) {\r\n // this.configurations.values = changes['configurations'].currentValue;\r\n // this.reloadTables();\r\n // }\r\n }\r\n\r\n async getFormByID(id: string = this.formID) {\r\n GlobalService.debugLog('list-form-record - getFormByID', this.form);\r\n\r\n if (this.form == null) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.configureColumns();\r\n },\r\n (err) => {}\r\n );\r\n } else {\r\n this.configureColumns();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n * a partire dai quali vengono ricreati i Record usati nel client.\r\n */\r\n async getRecordsByFormID() {\r\n try{\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n ) {\r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n if(this.configurations.userID == null){ \r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.configurations.values = new Array<Record>();\r\n res.forEach((r) => {\r\n var tmpRec: Record = new Record();\r\n tmpRec = JSON.parse(r.SerializedValues);\r\n tmpRec.ID = r.ID;\r\n tmpRec.EntID = r.EntID;\r\n tmpRec.Version = r.Version;\r\n tmpRec.userID = r.userID;\r\n tmpRec.AnswerDate = r.AnswerDate;\r\n this.configurations.values.push(tmpRec);\r\n });\r\n \r\n this.loader = true;\r\n setTimeout((_) => {\r\n this.changeDetector.detectChanges();\r\n }, 0); // refresh ui\r\n }\r\n );\r\n } else { \r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: this.configurations.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n }\r\n ];\r\n \r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.configurations.values = new Array<Record>();\r\n res.forEach((r) => {\r\n var tmpRec: Record = new Record();\r\n tmpRec = JSON.parse(r.SerializedValues);\r\n tmpRec.ID = r.ID;\r\n tmpRec.EntID = r.EntID;\r\n tmpRec.Version = r.Version;\r\n tmpRec.userID = r.userID;\r\n tmpRec.AnswerDate = r.AnswerDate;\r\n this.configurations.values.push(tmpRec);\r\n });\r\n \r\n this.loader = true;\r\n setTimeout((_) => {\r\n this.changeDetector.detectChanges();\r\n }, 0); // refresh ui\r\n }\r\n );\r\n \r\n }\r\n }\r\n } catch(e){\r\n console.error('exception', e)\r\n }\r\n }\r\n\r\n \r\n /**\r\n * Metodo per configurare le colonne della eqp-table.\r\n */\r\n private configureColumns() {\r\n this.columns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 6%\" },\r\n actions: [],\r\n },\r\n ];\r\n\r\n if (this.defaultListActions.view == true) {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Visualizza\",\r\n icon: \"info\",\r\n fn: (element, index, col) => this.viewRecord(element),\r\n });\r\n }\r\n if (this.defaultListActions.edit == true) {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.viewOrEditRecord(element, false),\r\n });\r\n }\r\n if (this.defaultListActions.duplicate == true) {\r\n /*this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Duplica\",\r\n icon: \"file_copy\",\r\n fn: (element, index, col) => this.duplicateRecord(element),\r\n });*/\r\n }\r\n if (this.defaultListActions.delete == true) {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) => this.deleteRecord(element),\r\n });\r\n }\r\n\r\n this.externalButtons.forEach((button) => {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: button.text,\r\n icon: button.icon,\r\n fn: (element, index, col) => button.fn(),\r\n });\r\n });\r\n\r\n this.createAdditionalActions();\r\n this.createColumnsFromFormFields();\r\n this.getRecordsByFormID();\r\n }\r\n\r\n /**\r\n * Metodo per aggiungere nella colonna \"action\" della eqp-table le azioni sui record\r\n * definite dall'utente all'interno della Form.\r\n */\r\n private createAdditionalActions() {\r\n GlobalService.debugLog('list-form-record - createAdditionalActions', this.form);\r\n\r\n if (this.form.ActionsOnRecord && this.form.ActionsOnRecord.length > 0) {\r\n this.form.ActionsOnRecord.sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition\r\n ? 1\r\n : b.OrdinalPosition > a.OrdinalPosition\r\n ? -1\r\n : 0\r\n ).forEach((action) => {\r\n this.columns\r\n .find((c) => c.key === \"action\")\r\n .actions.push({\r\n name: action.Name,\r\n icon: action.Icon,\r\n fn: (element, index, col) => {\r\n const rec = element;\r\n const ctx = UtilityHelperService.context;\r\n eval(action.Action);\r\n // TODO: salvare le modifiche\r\n },\r\n });\r\n });\r\n }\r\n }\r\n\r\n \r\n /**\r\n * Metodo per creare la configurazione delle colonne per la eqp-table.\r\n * Individua i BaseField da mostrare e li usa per creare le ConfigColumn.\r\n * Le colonne vengono create per i BaseField con il flag InListView a TRUE\r\n * oppure, nel caso non siano stati specificati i campi da visualizzare,\r\n * seleziona i primi 6.\r\n */\r\n private createColumnsFromFormFields() {\r\n GlobalService.debugLog('list-form-record - createColumnsFromFormFields', this.form);\r\n\r\n var fieldsForColumns: Array<BaseField>;\r\n if (this.form.Fields.find((f) => f.InListView)) {\r\n fieldsForColumns = this.form.Fields.filter((f) => f.InListView);\r\n } else {\r\n fieldsForColumns = this.form.Fields.filter((f) => f.OrdinalPosition < 6);\r\n }\r\n fieldsForColumns\r\n .sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition\r\n ? 1\r\n : b.OrdinalPosition > a.OrdinalPosition\r\n ? -1\r\n : 0\r\n )\r\n .forEach((field) => {\r\n this.columns.push(this.createFieldColumn(field));\r\n });\r\n }\r\n\r\n /**\r\n * Metodo per creare l'oggetto ConfigureColumn che rappresenta il BaseField passato in input.\r\n * @param field BaseField per cui creare la colonna nella eqp-table\r\n * @returns Restituisce una ConfigColumn per la eqp-table\r\n */\r\n private createFieldColumn(field: BaseField): ConfigColumn {\r\n var column: ConfigColumn = { key: field.Name, display: field.Label };\r\n switch (field.FieldType) {\r\n case FieldTypeEnum[\"Booleano\"]:\r\n column.type = TypeColumn.Boolean;\r\n column.booleanValues = {\r\n false: '<i class=\"fa fa-times error-color\"></i>',\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n };\r\n column.styles = {\r\n flex: \"0 0 7%\",\r\n cellAlignment: CellAlignmentEnum.CENTER,\r\n };\r\n break;\r\n case FieldTypeEnum[\"Data e/o ora\"]:\r\n if (\r\n (field as DateField).IsOnlyDate != DateTimeTypeEnum[\"Solo orario\"]\r\n ) {\r\n column.type = TypeColumn.Date;\r\n if (\r\n (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Data e ora\"]\r\n ) {\r\n column.format = \"dd/MM/yyyy HH:mm\";\r\n } else if (\r\n (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Solo data\"]\r\n ) {\r\n column.format = (field as DateField).DateFormat\r\n ? (field as DateField).DateFormat.replace(\"DD\", \"dd\")\r\n : \"dd/MM/yyyy\";\r\n }\r\n }\r\n break;\r\n case FieldTypeEnum[\"Campo numerico\"]:\r\n if ((field as NumericField).CurrencySymbol) {\r\n column.numberPipe = NumberColumnPipe.CURRENCY;\r\n column.currencyPipeCode = (field as NumericField).CurrencySymbol;\r\n } else if (!(field as NumericField).IsInteger) {\r\n column.numberPipe = NumberColumnPipe.DECIMAL;\r\n }\r\n break;\r\n case FieldTypeEnum[\"Allegato\"]:\r\n case FieldTypeEnum[\"Immagine\"]:\r\n column.value = (element: Record) => {\r\n if (\r\n (field as AttachmentField).IsMultiAttach ||\r\n ((field as ImageField).AttachDefinition &&\r\n (field as ImageField).AttachDefinition.IsMultiAttach)\r\n ) {\r\n return element[field.Name] != null && element[field.Name].length > 0\r\n ? (element[field.Name] as Array<IAttachmentDTO>)\r\n .map((a) => a.FileName)\r\n .join(\", \")\r\n : null;\r\n } else {\r\n return element[field.Name] != null && element[field.Name].length > 0\r\n ? (element[field.Name] as Array<IAttachmentDTO>)[0].FileName\r\n : null;\r\n }\r\n };\r\n column.isSortable = false;\r\n column.isSearchable = false;\r\n break;\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n column.value = (element: Record) => {\r\n if ((field as ListValueField).IsMultiChoiche) {\r\n if (!element[field.Name] || element[field.Name].length == 0) {\r\n return null;\r\n } else {\r\n return Object.keys((field as ListValueField).ValuePairs)\r\n .filter((k) =>\r\n element[field.Name].includes(\r\n (field as ListValueField).ValuePairs[k]\r\n )\r\n )\r\n .join(\", \");\r\n }\r\n } else {\r\n return Object.keys((field as ListValueField).ValuePairs).find(\r\n (k) =>\r\n (field as ListValueField).ValuePairs[k] == element[field.Name]\r\n );\r\n }\r\n };\r\n column.isSortable = false;\r\n column.isSearchable = false;\r\n break;\r\n case FieldTypeEnum[\"Lookup\"]:\r\n // TODO\r\n break;\r\n }\r\n return column;\r\n }\r\n\r\n viewRecord(record: Record){\r\n this.onViewRecord.emit(record);\r\n }\r\n /**\r\n * Metodo che scatena l'evento di Output per mostrare o modificare il record\r\n * selezionato sulla eqp-table.\r\n * @param record Record da visualizzare o modificare selezionato sulla eqp-table.\r\n * @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.\r\n */\r\n private viewOrEditRecord(record: Record, onlyView: boolean) {\r\n this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n\r\n /**\r\n * Metodo per eliminare un record dalla lista.\r\n * @param record Record da eliminare selezionato sulla eqp-table.\r\n */\r\n deleteRecord(record: Record) {\r\n this.onDeleteRecord.emit(record);\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della eqp-table.\r\n */\r\n private reloadTables() {\r\n if (this.tableRecords) {\r\n this.tableRecords.reloadDatatable();\r\n }\r\n }\r\n}\r\n","<mat-card class=\"list-form-record\">\r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n <mat-card-actions>\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n <!-- <button mat-button>LIKE</button> -->\r\n <!-- <button mat-button>SHARE</button> -->\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table>\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n <div class=\"col-md-6\">\r\n <h4 *ngIf=\"showTitle\">\r\n <b>Elenco {{ form.Name }}</b>\r\n </h4>\r\n </div>\r\n <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->","import { Injectable } from '@angular/core';\r\ndeclare var webkitSpeechRecognition: any;\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class VoiceRecognitionService {\r\n recognition;\r\n isStoppedSpeechRecog = false;\r\n public text = '';\r\n tempWords: any;\r\n transcript_arr = [];\r\n confidence_arr = [];\r\n isStarted = false; //<< this Flag to check if the user stop the service\r\n isStoppedAutomatically = true; //<< this Flag to check if the service stopped automaticically.\r\n constructor() { }\r\n\r\n init() {\r\n\r\n try {\r\n this.recognition = new webkitSpeechRecognition();\r\n\r\n this.recognition.continuous = true;\r\n this.recognition.interimResults = true;\r\n this.recognition.lang = 'it-IT';\r\n\r\n this.recognition.addEventListener('result', (e: any) => {\r\n const transcript = Array.from(e.results)\r\n .map((result: any) => result[0])\r\n .map((result) => result.transcript)\r\n .join('');\r\n this.transcript_arr.push(transcript);\r\n this.tempWords = transcript;\r\n\r\n const confidence = Array.from(e.results)\r\n .map((result: any) => result[0])\r\n .map((result) => result.confidence)\r\n .join('');\r\n this.confidence_arr.push(confidence);\r\n });\r\n\r\n this.recognition.addEventListener('end', (condition: any) => {\r\n this.wordConcat();\r\n if (this.isStoppedAutomatically) {\r\n this.recognition.stop();\r\n this.recognition.start();\r\n this.isStoppedAutomatically = true;\r\n }\r\n });\r\n \r\n } catch (error) {\r\n \r\n //console.log(error);\r\n \r\n //this.domElement.style.display = \"none\";\r\n }\r\n }\r\n\r\n start() {\r\n if (!this.isStarted) {\r\n this.recognition.start();\r\n this.isStarted = true;\r\n }\r\n return true;\r\n }\r\n stop() {\r\n if (this.isStarted) {\r\n this.isStoppedAutomatically = false;\r\n this.wordConcat();\r\n this.recognition.stop();\r\n this.isStarted = false;\r\n this.transcript_arr = [];\r\n }\r\n return false;\r\n }\r\n\r\n wordConcat() {\r\n this.text = this.text + ' ' + this.tempWords + '.';\r\n this.tempWords = '';\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../models/fields/textField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { VoiceRecognitionService } from '../../../../services/voice-recognition.service';\r\nimport { interval, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'text-field-template',\r\n templateUrl: './text-field-template.component.html',\r\n styleUrls: ['./text-field-template.component.scss']\r\n})\r\nexport class TextFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n\r\n constructor(public voiceservice: VoiceRecognitionService) {\r\n this.voiceservice.init();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n ttsClick() {\r\n //Gestione del bottone icona del microfono con riempimennto del campo in real time\r\n if (!this.isStillRecoginze) {\r\n this.newtext = '';\r\n this.isStillRecoginze = this.voiceservice.start() === true ? true : false;\r\n this.subscription = this.source.subscribe(val => {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == undefined) {\r\n this.record[this.field.Name] = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n }\r\n else {\r\n this.newtext = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n if (this.newtext != undefined)\r\n this.updateRTVoiceField();\r\n }\r\n });\r\n }\r\n else {\r\n this.isStillRecoginze = this.voiceservice.stop() === false ? false : true;\r\n this.subscription.unsubscribe();\r\n this.updateVoiceField();\r\n }\r\n }\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n updateRTVoiceField() {\r\n this.record[this.field.Name] = this.voiceservice.text + this.newtext;\r\n this.newtext = '';\r\n }\r\n updateVoiceField() {\r\n this.newtext = '';\r\n this.record[this.field.Name] = this.voiceservice.text;\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if (!this.isStillRecoginze) {\r\n if (this.record[this.field.Name] != null || this.record[this.field.Name] != undefined) {\r\n this.voiceservice.text = this.record[this.field.Name];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n if (!this.field.VisibleIf) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput [type]=\"getInputType()\" [formControlName]=\"field.Name\" [readonly]=\"field.Readonly\"\r\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min. Caratteri: {{field.MinLenght}} - Max. Caratteri: {{field.MaxLenght}} \r\n </mat-error>\r\n <mat-icon [hidden]=\"!field.Microphone\" (click)=\"ttsClick()\" matSuffix style=\"cursor: pointer;\" [color]=\"!isStillRecoginze ? '' : 'warn'\">keyboard_voice</mat-icon> \r\n</mat-form-field>","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class BooleanField extends BaseField {\r\n /**Se true il boolean accetta anche il valore N/A (non assegnato) */\r\n IsTristate: boolean;\r\n PresetationType: BoolPresentantioEnum;\r\n}\r\n\r\nexport enum BoolPresentantioEnum {\r\n \"Checkbox\" = 1,\r\n \"Toggle\" = 2,\r\n \"Radio button\" = 3,\r\n // \"Stringa true o false\" = 3,\r\n // \"Numerico 0 o 1\" = 4\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { BooleanField, BoolPresentantioEnum } from '../../../../models/fields/booleanField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\n\r\n@Component({\r\n selector: 'boolean-field-template',\r\n templateUrl: './boolean-field-template.component.html',\r\n styleUrls: ['./boolean-field-template.component.scss']\r\n})\r\nexport class BooleanFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: BooleanField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\n BoolPresentantioEnum = BoolPresentantioEnum;\r\n\r\n constructor() { }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n }\r\n \r\n ngOnInit(): void {\r\n if (this.record[this.field.Name] == undefined || this.record[this.field.Name] == null) {\r\n this.record[this.field.Name] = this.field.IsTristate ? null : false;\r\n }\r\n\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<div [formGroup]=\"field.FormFormGroup\">\r\n\r\n <!-- VISUALIZZAZIONE A TOGGLE -->\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Toggle\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-slide-toggle>\r\n\r\n <!-- VISUALIZZAZIONE A RADIOBUTTON -->\r\n <mat-label [ngStyle]=\"LabelstyleObj\" class=\"mr-3\" *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-label>\r\n <mat-radio-group *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"mr-2\" [value]=\"true\" color=\"primary\"> Si </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"false\" color=\"primary\"> No </mat-radio-button>\r\n <mat-radio-button class=\"mr-2 ps-2\" [value]=\"null\" color=\"primary\" *ngIf=\"field.IsTristate\"> ND\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX -->\r\n <mat-checkbox class=\"mr-2\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Checkbox\"\r\n [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [formControlName]=\"field.Name\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n </mat-checkbox>\r\n\r\n <!-- TODO: Visualizzazione \"Stringa true o false\" e \"Numerico 0 o 1\" ?? -->\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { PickerModeEnum } from '@eqproject/eqp-datetimepicker';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../models/fields/dateField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\n\r\n@Component({\r\n selector: 'date-field-template',\r\n templateUrl: './date-field-template.component.html',\r\n styleUrls: ['./date-field-template.component.scss']\r\n})\r\nexport class DateFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: DateField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n pickerMode: PickerModeEnum;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.setTimeType();\r\n this.updateField();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n /**\r\n * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n * imposta la visualizzazione corretta del componente eqp-datetimepicker.\r\n */\r\n private setTimeType() {\r\n switch (this.field.IsOnlyDate) {\r\n case DateTimeTypeEnum[\"Solo data\"]:\r\n this.pickerMode = PickerModeEnum.DATE;\r\n break;\r\n case DateTimeTypeEnum[\"Solo orario\"]:\r\n this.pickerMode = PickerModeEnum.TIME;\r\n break;\r\n case DateTimeTypeEnum[\"Data e ora\"]:\r\n this.pickerMode = PickerModeEnum.DATETIME;\r\n break;\r\n }\r\n }\r\n}\r\n","<eqp-datetimepicker [placeholder]=\"field.Description\" [UTCDate]=\"true\" [pickerMode]=\"pickerMode\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [isRequired]=\"field.Required\" [disabled]=\"field.FormFormGroup.disabled\" [(ngModelInput)]=\"record[field.Name]\"\r\n (ngModelInputChange)=\"onRecordValueChange()\" [customDateFormat]=\"field.DateFormat ? field.DateFormat : null\">\r\n</eqp-datetimepicker>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { TextareaField } from '../../../../models/fields/textareaField.model';\r\nimport { VoiceRecognitionService } from '../../../../services/voice-recognition.service';\r\nimport { interval, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'textarea-field-template',\r\n templateUrl: './textarea-field-template.component.html',\r\n styleUrls: ['./textarea-field-template.component.scss'],\r\n providers: [VoiceRecognitionService],\r\n})\r\nexport class TextareaFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n isStillRecoginze = false;\r\n @Input() field: TextareaField;\r\n @Input() record: Record;\r\n source = interval(200);\r\n newtext: string;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n subscription: Subscription;\r\n\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n constructor(public voiceservice: VoiceRecognitionService) {\r\n this.voiceservice.init();\r\n }\r\n ngOnInit(): void {\r\n this.updateField();\r\n this.initStyles();\r\n }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n ttsClick() {\r\n if (!this.isStillRecoginze) {\r\n this.newtext = '';\r\n this.isStillRecoginze = this.voiceservice.start() === true ? true : false;\r\n this.subscription = this.source.subscribe(val => {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == undefined) {\r\n this.record[this.field.Name] = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n }\r\n else {\r\n this.newtext = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n if (this.newtext != undefined)\r\n this.updateRTVoiceField();\r\n }\r\n });\r\n }\r\n else {\r\n this.isStillRecoginze = this.voiceservice.stop() === false ? false : true;\r\n this.subscription.unsubscribe();\r\n this.updateVoiceField();\r\n }\r\n }\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n if (!this.isStillRecoginze) {\r\n if (this.record[this.field.Name] != null || this.record[this.field.Name] != undefined) {\r\n this.voiceservice.text = this.record[this.field.Name];\r\n }\r\n }\r\n }\r\n updateRTVoiceField() {\r\n this.record[this.field.Name] = this.voiceservice.text + this.newtext;\r\n this.newtext = '';\r\n }\r\n updateVoiceField() {\r\n this.newtext = '';\r\n this.record[this.field.Name] = this.voiceservice.text;\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}\r\n","<mat-form-field [formGroup]=\"field.FormFormGroup\"> \r\n <mat-label class=\"ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <textarea class=\"pt-2 mt-2\" [ngStyle]=\"FieldstyleObj\" matInput [placeholder]=\"field.Description\" [rows]=\"field.Rows\" [formControlName]=\"field.Name\"\r\n [readonly]=\"field.Readonly\" [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\"\r\n (ngModelChange)=\"onRecordValueChange()\"></textarea>\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min. Caratteri: {{field.MinLenght}} - Max. Caratteri: {{field.MaxLenght}}\r\n </mat-error>\r\n <mat-icon *ngIf=\"field.Microphone\" (click)=\"ttsClick()\" matSuffix style=\"cursor: pointer;\" [color]=\"!isStillRecoginze ? '' : 'warn'\">keyboard_voice</mat-icon> \r\n</mat-form-field>\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { EqpNumericInputMode, NumericMaskConfig } from '@eqproject/eqp-numeric';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { NumericField } from '../../../../models/fields/numericField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { Validators } from '@angular/forms';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n\r\n@Component({\r\n selector: 'numeric-field-template',\r\n templateUrl: './numeric-field-template.component.html',\r\n styleUrls: ['./numeric-field-template.component.scss']\r\n})\r\nexport class NumericFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: NumericField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n validatorsArray: any[] = [];\r\n eqpNumericOptions: Partial<NumericMaskConfig> = {};\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nisDirty: boolean = false;\r\n\r\nconstructor() {\r\n}\r\n\r\n ngOnInit(): void {\r\n this.configureEqpNumericOptions();\r\n this.configureControllers(); \r\n this.updateField();\r\n this.initStyles();\r\n }\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n ngOnChanges(changes: SimpleChanges) {\r\n \r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n \r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n //console.log(\"field modified - original value\",this.field.Name,this.record[this.field.Name]);\r\n //this.record[this.field.Name] = this.record[this.field.Name] == 0 ? 0 : (this.record[this.field.Name] / Math.pow(10,this.eqpNumericOptions.precision)).toFixed(this.eqpNumericOptions.precision);\r\n //console.log(\"field modified - final value\",this.field.Name,this.record[this.field.Name]);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n if (this.isDirty){\r\n this.record[this.field.Name] = this.record[this.field.Name] == 0 ? 0 : (this.record[this.field.Name] / Math.pow(10,this.eqpNumericOptions.precision)).toFixed(this.eqpNumericOptions.precision);\r\n this.isDirty = false;\r\n }\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per configurare eqp-numeric\r\n */\r\n private configureEqpNumericOptions() {\r\n this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n this.eqpNumericOptions.allowNegative=true;\r\n if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n else\r\n this.eqpNumericOptions.decimal=\".\";\r\n if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined && this.field.ThousandsSeparator.trim().length > 0)\r\n this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n if(this.field.IsInteger== false){\r\n if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n else { this.eqpNumericOptions.precision = 2; }\r\n }else{\r\n this.eqpNumericOptions.precision = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo di aggiunta dei validator dell'input\r\n */\r\n private configureControllers() {\r\n this.validatorsArray = [];\r\n if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n }\r\n\r\n setDirty(){\r\n this.isDirty = true;\r\n }\r\n}","<mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput eqpNumericMask [formControlName]=\"field.Name\" [readonly]=\"field.Readonly\"\r\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (blur)=\"onRecordValueChange()\" (keypress)=\"setDirty()\" />\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n </mat-error>\r\n</mat-form-field>","import { AttachmentType, IAttachmentDTO } from \"@eqproject/eqp-attachments\";\r\nimport { BaseField } from \"../baseField.model\";\r\n\r\n/**Lista di valori */\r\nexport class ListValueField extends BaseField {\r\n /**\r\n * Lista di valori ordinata. La parte \"Value\", viene utilizzata in modi diversi a seconda del tipo di presentazione, e/o \r\n * come valore relazionato nelle formule\r\n */\r\n ValuePairs: { [key: string]: any};\r\n\r\n /**\r\n * stringa da parsare chiave valore: chiave1 | valore 1; chiave2|valore 2\r\n */\r\n ValueString: string;\r\n\r\n /**Se true è l'utente può scegliere più di un valore */\r\n IsMultiChoiche: boolean;\r\n\r\n /**Modalità di presentazione */\r\n PresentationMode: ListPresentationEnum;\r\n\r\n /**Elenco delle immagini per la visualizzazione a immagini (ListPresentationEnum.Immagini) */\r\n ButtonImageList: Array<ButtonImage>;\r\n}\r\n\r\nexport class ButtonImage implements IAttachmentDTO {\r\n ButtonKey: string;\r\n ButtonValue: string;\r\n ID: string | number;\r\n FileName?: string;\r\n FileContentType?: string;\r\n FileExtension?: string;\r\n FilePath?: string;\r\n AttachmentType?: AttachmentType;\r\n FileDataBase64?: string;\r\n IsImage?: boolean;\r\n FileThumbnailBase64?: string;\r\n TrustedUrl?: any;\r\n}\r\n\r\nexport enum ListPresentationEnum {\r\n \"Combo box\" = 1,\r\n \"Radio button\" = 2,\r\n \"Pulsante con testo\" = 3,\r\n \"Immagini\" = 4\r\n}","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListPresentationEnum, ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../..//services/global.service';\r\n\r\n@Component({\r\n selector: 'list-value-field-template',\r\n templateUrl: './list-value-field-template.component.html',\r\n styleUrls: ['./list-value-field-template.component.scss']\r\n})\r\nexport class ListValueFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() field: ListValueField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n ListPresentationEnum = ListPresentationEnum;\r\n arrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n constructor() { }\r\n\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n ngOnInit(): void {\r\n GlobalService.debugLog(\"combobox filed\", this.field);\r\n this.updateField();\r\n this.setArrayData();\r\n if (this.field.IsMultiChoiche && !this.record[this.field.Name]) {\r\n this.record[this.field.Name] = [];\r\n }\r\n // Nel caso in cui sono in modifica di un Record aggiorno il valore\r\n // e il validator del FormControl. Se non viene eseguita questa riga\r\n // l'utente deve modificare la selezione fatta per aggiornare la form.\r\n this.setFormControlValue();\r\n this.initStyles();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n // devo controllare se ho la stringa (ValueString) o il dizionario (ValuePairs)\r\n GlobalService.debugLog(\"list-value-field updateField\", this.field)\r\n if (this.field.Formula) {\r\n GlobalService.debugLog(\"list-value-field - updateField - Formula\")\r\n this.field.ValuePairs = {};\r\n const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n // dobbiamo ottenere un dizionario di quei valori\r\n this.field.ValuePairs = this.stringToValuePairs(temp);\r\n\r\n // for (var key in matches) {\r\n // if(UtilityHelperService.isNumeric(temp[key])){\r\n // this.field.ValuePairs[key] = Number(temp[key]);\r\n // }else{\r\n // this.field.ValuePairs[key] = temp[key];\r\n // }\r\n // }\r\n\r\n // this.setArrayData();\r\n //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n GlobalService.debugLog(\"list-value-field - updateField - ValuePairs\")\r\n\r\n } else if (this.field.ValueString != null && this.field.ValueString != \"\") {\r\n GlobalService.debugLog(\"list-value-field - updateField - ValueString\")\r\n this.field.ValuePairs = this.stringToValuePairs(this.field.ValueString);\r\n\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato quando viene selezionata un'opzione nella visualizzazione a button\r\n * @param data Rappresenta l'oggetto selezionato\r\n */\r\n buttonSelectClick(data: { Key: string, Value: string, Selected?: boolean, ImgUrl?: string }) {\r\n data.Selected = !data.Selected;\r\n if (this.field.IsMultiChoiche) {\r\n this.updateSelected(false);\r\n } else {\r\n this.arrayData.filter(d => d.Key != data.Key && d.Value != data.Value).forEach(d => d.Selected = false);\r\n\r\n if (UtilityHelperService.isNumeric(data.Value)) {\r\n\r\n this.record[this.field.Name] = Number(data.Value);\r\n }\r\n else {\r\n this.record[this.field.Name] = data.Value;\r\n }\r\n\r\n }\r\n this.onRecordValueChange();\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il/i valore/i selezionato/i dall'utente.\r\n * @param emitChange Se true scatena l'evento di output della modifica del valore di record\r\n */\r\n updateSelected(emitChange: boolean = true) {\r\n this.record[this.field.Name] = this.arrayData.filter(data => data.Selected).map(data => data.Value);\r\n this.setFormControlValue();\r\n if (emitChange) {\r\n this.onRecordValueChange();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n onRecordValueChange() {\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n /**\r\n * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.\r\n */\r\n private setArrayData() {\r\n if (this.field.PresentationMode != ListPresentationEnum.Immagini) {\r\n if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n } else {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n }\r\n\r\n } else {\r\n this.field.ButtonImageList.forEach(i => { this.createArrayDataElement(i.ButtonKey, i.ButtonValue, 'data:' + i.FileContentType + ';base64,' + i.FileDataBase64); });\r\n }\r\n }\r\n\r\n private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n /**\r\n * Metodo per aggiornare il valore e il validator del FormControl associato al campo.\r\n */\r\n private setFormControlValue() {\r\n this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name]);\r\n }\r\n\r\n\r\n private stringToValuePairs(valueString: string): { [key: string]: string } {\r\n const valuePairs: { [key: string]: string } = {};\r\n // GlobalService.debugLog('stringToValuePair() - this.field.Formula temp', valueString)\r\n const keyvals = valueString.split(\";\");\r\n keyvals.forEach((x) => {\r\n const parts = x.split(\"|\");\r\n // GlobalService.debugLog('stringToValuePair() - parts', parts);\r\n // GlobalService.debugLog('stringToValuePair() - parts.lenght', parts.length);\r\n if(parts.length == 1){\r\n valuePairs[parts[0].trim()] = parts[0].trim();\r\n } else if (parts.length > 1){\r\n // GlobalService.debugLog('stringToValuePair() - parts[0].trim()', parts[0].trim());\r\n // GlobalService.debugLog('stringToValuePair() - parts[1].trim()', parts[1].trim());\r\n valuePairs[parts[0].trim()] = parts[1].trim();\r\n }\r\n })\r\n // GlobalService.debugLog('stringToValuePair() - valuePairs', valuePairs)\r\n return valuePairs;\r\n }\r\n\r\n}\r\n","<eqp-select [ngStyle]=\"FieldstyleObj\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Combo box']\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"!field.Required\" [arrayValueProperty]=\"'Key'\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n [includeFullObject]=\"false\" [isRequired]=\"field.Required\" [isDisabled]=\"field.FormFormGroup.disabled\"\r\n [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"field.IsMultiChoiche\"\r\n (ngModelInputChange)=\"onRecordValueChange()\">\r\n</eqp-select>\r\n\r\n<div *ngIf=\"field.PresentationMode != ListPresentationEnum['Combo box']\" [formGroup]=\"field.FormFormGroup\">\r\n\r\n <mat-label class=\"mr-3 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description + (field.Required ? \" *\" : \"\")}} </mat-label>\r\n <!-- VISUALIZZAZIONE A RADIO BUTTON (SENZA SELEZIONE MULTIPLA) -->\r\n <mat-radio-group [ngStyle]=\"FieldstyleObj\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && !field.IsMultiChoiche\"\r\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n <mat-radio-button class=\"ms-3 d-block\" *ngFor=\"let data of arrayData\" [value]=\"data.Value\" color=\"primary\">\r\n {{data.Key}}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <!-- VISUALIZZAZIONE A CHECKBOX (SELEZIONE MULTIPLA) -->\r\n <div class=\"d-inline-block\"\r\n *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && field.IsMultiChoiche\">\r\n <mat-checkbox [ngStyle]=\"FieldstyleObj\" class=\"mr-2\" *ngFor=\"let data of arrayData\" [disabled]=\"field.FormFormGroup.disabled\"\r\n [formControlName]=\"field.Name\" [(ngModel)]=\"data.Selected\" (ngModelChange)=\"updateSelected()\">\r\n {{data.Key}}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <!-- VISUALIZZAZIONE A PULSANTI (CON TESTO O IMMAGINI) -->\r\n <div class=\"d-inline-block\"\r\n *ngIf=\"[ListPresentationEnum['Pulsante con testo'], ListPresentationEnum.Immagini].includes(field.PresentationMode)\">\r\n <button [ngStyle]=\"FieldstyleObj\" mat-raised-button color=\"primary\" class=\"btn btn-primary m-1 data-button\" *ngFor=\"let data of arrayData\"\r\n [ngClass]=\"{'selected-button': data.Selected == true, 'p-0': field.PresentationMode == ListPresentationEnum.Immagini}\"\r\n (click)=\"buttonSelectClick(data)\" [disabled]=\"field.FormFormGroup.disabled\">\r\n\r\n <!-- TESTO DEL PULSANTE -->\r\n <span *ngIf=\"field.PresentationMode == ListPresentationEnum['Pulsante con testo']\"> {{data.Key}}</span>\r\n\r\n <!-- IMMAGINE DEL PULSANTE -->\r\n <img *ngIf=\"field.PresentationMode == ListPresentationEnum.Immagini\" [src]=\"data.ImgUrl\">\r\n </button>\r\n </div>\r\n\r\n</div>","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class AttachmentField extends BaseField {\r\n /**Elenco delle estensioni consentite. Se vuoto usa il default (pdf) */\r\n AllowedExtensions: Array<string>;\r\n\r\n /**Se true permette l'inserimento di più allegati. In questo caso i metadati vengono rappresentati come una detail */\r\n IsMultiAttach: boolean;\r\n\r\n /**Elenco campi che possono rappresentare i metadati dell'allegato, ad esempio nome, ecc... */\r\n MetadataFields: Array<BaseField>;\r\n}\r\n\r\nexport const AvailableFileExtensions: Array<{ key: string, value: string }> = [\r\n { value: '.pdf', key: 'application/pdf' },\r\n { value: '.doc', key: 'application/msword' },\r\n { value: '.xls', key: 'application/vnd.ms-excel' },\r\n { value: '.ppt', key: 'application/vnd.ms-powerpoint' },\r\n { value: '.docx', key: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' },\r\n { value: '.xlsx', key: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' },\r\n { value: '.pptx', key: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' },\r\n { value: '.csv', key: 'text/csv' },\r\n { value: '.txt', key: 'text/plain' },\r\n];\r\n\r\nexport const AvailableImageExtensions: Array<{ key: string, value: string }> = [\r\n { value: '.jpg/.jpeg', key: 'image/jpeg' },\r\n { value: '.png', key: 'image/png' },\r\n { value: '.bmp', key: 'image/bmp' },\r\n { value: '.svg', key: 'image/svg+xml' },\r\n { value: '.ico', key: 'image/x-icon' },\r\n];","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { AttachmentField, AvailableFileExtensions, AvailableImageExtensions } from '../../../../models/fields/attachmentField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { EqpAttachmentsComponent } from '@eqproject/eqp-attachments';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { ConfigColumn, TypeColumn } from '@eqproject/eqp-table';\r\n\r\n@Component({\r\n selector: 'attachment-field-template',\r\n templateUrl: './attachment-field-template.component.html',\r\n styleUrls: ['./attachment-field-template.component.scss']\r\n})\r\nexport class AttachmentFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent, AfterViewInit {\r\n\r\n @Input() onlyImages: boolean = false;\r\n @Input() field: AttachmentField;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() onAttachmentsChange: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @ViewChild(\"eqpAttachments\", { static: true }) eqpAttachments: EqpAttachmentsComponent;\r\n //@ViewChild('metadataColumnTemplate', { static: true }) metadataColumnTemplate: TemplateRef<any>;\r\n\r\n //metadataFormGroups: Array<UntypedFormGroup> = new Array<UntypedFormGroup>();\r\n\r\n constructor(\r\n public utilityService: UtilityHelperService,\r\n private cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n // Nel caso in cui sono in modifica di un Record aggiorno il valore\r\n // e il validator del FormControl. Se non viene eseguita questa riga\r\n // l'utente deve modificare la selezione fatta per aggiornare la form.\r\n this.setFormControlValue();\r\n\r\n // Sempre nel caso in cui sono in modifica creo i FormGroup che rappresentano\r\n // gli eventuali metadata degli allegati recuperati.\r\n //\r\n\r\n if (!this.field.AllowedExtensions) {\r\n this.field.AllowedExtensions = AvailableFileExtensions.concat(AvailableImageExtensions).map(ext => ext.key);\r\n }\r\n this.updateField();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Dopo aver renderizzato il DOM, se il campo ammette molteplici allegati\r\n // configuro le colonne della eqp-table in eqp-attachments.\r\n // if (this.field.IsMultiAttach) {\r\n // this.configureMultiAttachmentColumns();\r\n // }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per intercettare le modifiche agli allegati caricati.\r\n * Se il campo prevede dei metadata allora per ogni allegato caricato crea un FormGroup\r\n * per gestire la validazione degli input che l'utente può/deve riempire. I FormGroup \r\n * seguono lo stesso ordine degli allegati caricati.\r\n * @param event Contiene la lista aggiornata degli Attachment caricati dall'utente.\r\n */\r\n catchAttachmentList(event) {\r\n this.record[this.field.Name] = event;\r\n\r\n // this.createMetadataFormGroups();\r\n\r\n this.setFormControlValue();\r\n this.onRecordValueChange();\r\n \r\n // Scateno un evento di output necessario al componente ImageFieldTemplate al\r\n // variare degli allegati caricati. Viene usato per aprire il dialog per disegnare\r\n // sull'immagine caricata in base alla configurazione del Field.\r\n this.onAttachmentsChange.emit();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Metodo per aggiornare lo stato di validazione del FormControl che rappresenta \r\n * il campo Allegato (non i metadata al suo interno). Se tra le form dei metadata\r\n * ne trova una invalida allora marca il controllo come invalido.\r\n */\r\n // updateMetadataValidity() {\r\n // if (this.metadataFormGroups.find(form => form.invalid)) {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors({ 'incorrect': true });\r\n // } else {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors(null);\r\n // }\r\n // this.onRecordValueChange();\r\n // }\r\n\r\n /**\r\n * Metodo per recuperare il BaseField che rappresenta il metadata nella riga della eqp-table\r\n * in base alla colonna e alla riga. Una volta trovato il BaseField gli viene associato il \r\n * FormGroup di cui fa parte.\r\n * @param col Colonna della eqp-table.\r\n * @param row Riga della eqp-table (in questo caso eredita da IAttachment).\r\n * @returns Restituisce un BaseField per renderizzare il campo nella eqp-table degli allegati multipli.\r\n */\r\n // getFieldFromMetadata(col: ConfigColumn, row: any) {\r\n // var baseField = JSON.parse(JSON.stringify(this.field.MetadataFields.find(metadata => metadata.Name === col.key)));\r\n // baseField.FormFormGroup = this.metadataFormGroups[this.record[this.field.Name].indexOf(row)];\r\n // return baseField;\r\n // }\r\n\r\n /**\r\n * Metodo per aggiornare il valore e il validator del FormControl associato al campo.\r\n */\r\n private setFormControlValue() {\r\n this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name]);\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n private onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aggiungere alle colonne di eqp-attachments le colonne per modificare i metadata\r\n * configurati per il campo Allegato o Immagine.\r\n */\r\n // private configureMultiAttachmentColumns() {\r\n // if (this.eqpAttachments && this.eqpAttachments.attachmentsColumns && this.field.MetadataFields && this.field.MetadataFields.length > 0) {\r\n // this.field.MetadataFields.forEach(metadata => {\r\n // this.eqpAttachments.attachmentsColumns.splice(\r\n // this.eqpAttachments.attachmentsColumns.length - 1, 0,\r\n // { key: metadata.Name, display: metadata.Label, type: TypeColumn.ExternalTemplate, externalTemplate: this.metadataColumnTemplate }\r\n // );\r\n // });\r\n // }\r\n // }\r\n\r\n /**\r\n * Metodo per creare i FormGroup che rappresentano i metadata degli allegati caricati.\r\n */\r\n // private createMetadataFormGroups() {\r\n // if (this.field.MetadataFields && this.field.MetadataFields.length > 0) {\r\n // this.metadataFormGroups = [];\r\n // if (this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n // this.record[this.field.Name].forEach(attachment => {\r\n // this.metadataFormGroups.push(this.utilityService.CreateFormFormGroup(this.field.MetadataFields, attachment, this.field.FormFormGroup.disabled, !this.field.IsMultiAttach));\r\n // });\r\n // }\r\n\r\n // this.updateMetadataValidity();\r\n // }\r\n // }\r\n}","<p *ngIf=\"!field.IsMultiAttach\" class=\"mb-2\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n</p>\r\n<div class=\"row\" *ngIf=\"!field.IsMultiAttach && record[field.Name] && record[field.Name][0]\">\r\n <!-- <div class=\"mt-2\" *ngFor=\"let metadata of field.MetadataFields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n <dynamic-module-field-fix [field]=\"metadata\" [record]=\"record[field.Name][0]\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n </div> -->\r\n</div>\r\n\r\n<eqp-attachments [attachmentsList]=\"record[field.Name]\" [showMatCard]=\"true\" [allowOnlyImages]=\"onlyImages\"\r\n [isDisabled]=\"field.FormFormGroup.disabled\" [showInlinePreview]=\"true\" [multipleAttachment]=\"field.IsMultiAttach\"\r\n [disableAction]=\"field.FormFormGroup.disabled\" [acceptedFileTypes]=\"field.AllowedExtensions\" [showHeader]=\"true\"\r\n [headerTitle]=\"field.Description + (field.Required ? ' *' : '')\" (localEditedAttachments)=\"catchAttachmentList($event)\"\r\n #eqpAttachments>\r\n</eqp-attachments>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<!-- <ng-template #metadataColumnTemplate let-row=\"row\" let-col=\"col\">\r\n <dynamic-module-field-fix [field]=\"getFieldFromMetadata(col, row)\" [record]=\"row\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n</ng-template> -->","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ImageField } from '../../../../models/fields/imageField.model';\r\nimport { AvailableImageExtensions } from '../../../../models/fields/attachmentField.model';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { I18nInterface } from '@eqproject/eqp-img-drawing';\r\n\r\n/**\r\n * Metodo per recuperare, a partire da un Blob, la stringa contenente il base64 del file.\r\n * Usato per prendere il base64 dell'immagine dopo che l'utente ci ha disegnato sopra.\r\n * @param file Blob che rappresenta l'immagine.\r\n */\r\nconst toBase64 = file => new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result.toString());\r\n reader.onerror = error => reject(error);\r\n});\r\n\r\n@Component({\r\n selector: 'image-field-template',\r\n templateUrl: './image-field-template.component.html',\r\n styleUrls: ['./image-field-template.component.scss']\r\n})\r\nexport class ImageFieldTemplateComponent implements OnInit, OnChanges, IBaseFieldComponent {\r\n\r\n @Input() record: Record;\r\n @Input() field: ImageField;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n //preLoadedImageMetadataFormGroup: UntypedFormGroup;\r\n\r\n //#region Proprietà per configurare il componente ngx-image-drawing e aprire il relativo dialog.\r\n public width = null;\r\n public height = null;\r\n public i18n: I18nInterface = {\r\n saveBtn: 'Salva modifiche',\r\n cancelBtn: 'Ricarica originale'\r\n };\r\n dialogImageDrowingRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogImageDrowing\", { static: true }) dialogImageDrowing: TemplateRef<any>;\r\n //#endregion\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n public utilityService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n \r\n this.field.AttachDefinition.FormFormGroup = this.field.FormFormGroup;\r\n\r\n if (!this.field.AttachDefinition.AllowedExtensions) {\r\n this.field.AttachDefinition.AllowedExtensions = AvailableImageExtensions.map(ext => ext.key);\r\n }\r\n\r\n this.field.AttachDefinition.Name = this.field.Name;\r\n this.field.AttachDefinition.Label = this.field.Label;\r\n this.field.AttachDefinition.Description = this.field.Description;\r\n this.field.AttachDefinition.Required = this.field.Required;\r\n this.field.AttachDefinition.Formula = this.field.Formula;\r\n this.field.AttachDefinition.FieldValue = this.field.FieldValue;\r\n\r\n // Se il campo prevede un'immagine pre-caricata (ImageIsContextualAttachment == true) sulla quale \r\n // l'utente può disegnare (EnableDrawing == true) e non sono in modifica di un record (ovvero nel record\r\n // non ho un'immagine già salvata) allora imposta l'immagine pre caricata come valore iniziale\r\n // nel record corrente e ne recupera le dimensioni per visualizzare correttamente l'area in cui \r\n // l'utente può disegnare. Se non effettua modifiche o non salva i disegni fatti viene salvata\r\n // l'immagine originale.\r\n if (this.field.ImageIsContextualAttachment && this.field.ContextualAttachment) {\r\n if (!this.record[this.field.Name] || !Array.isArray(this.record[this.field.Name]) || !(this.record[this.field.Name].length > 0)) {\r\n this.record[this.field.Name] = [JSON.parse(JSON.stringify(this.field.ContextualAttachment))];\r\n }\r\n // if(this.field.AttachDefinition.MetadataFields != undefined) \r\n // this.preLoadedImageMetadataFormGroup = this.utilityService.CreateFormFormGroup(this.field.AttachDefinition.MetadataFields, this.record[this.field.Name][0]);\r\n this.getImageDimensions();\r\n }\r\n this.updateField();\r\n }\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n this.record = changes['record'].currentValue;\r\n this.updateField();\r\n }\r\n }\r\n\r\n\r\n // updateMetadataValidity() {\r\n // if (this.preLoadedImageMetadataFormGroup.invalid) {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors({ 'incorrect': true });\r\n // } else {\r\n // this.field.FormFormGroup.controls[this.field.Name].setErrors(null);\r\n // }\r\n // this.onRecordValueChange();\r\n // }\r\n\r\n\r\n /**\r\n * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n */\r\n updateField() {\r\n if (this.field.Formula) {\r\n this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n }\r\n if (this.field.VisibleIf) {\r\n this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);\r\n }\r\n }\r\n\r\n\r\n resetPreLoadedImage() {\r\n this.width = null;\r\n this.height = null;\r\n this.record[this.field.Name] = [JSON.parse(JSON.stringify(this.field.ContextualAttachment))];\r\n this.getImageDimensions();\r\n }\r\n\r\n /**\r\n * Metodo invocato quando vengono aggiunti o eliminati gli allegati nel componente AttachmentFieldTemplate.\r\n * Se l'ImageField è abilitato al disegno (EnableDrawing == true), non permette allegati multipli (IsMulitAttach == false)\r\n * e nel Record corrente è presente l'immagine caricata dall'utente allora recupera le dimensioni dell'immagine e\r\n * apre il dialog con il componente image-drawing per permettere il disegno sull'immagine appena caricata.\r\n */\r\n onAttachmentsChange() {\r\n if (!this.field.AttachDefinition.IsMultiAttach && this.field.EnableDrawing && this.record[this.field.Name] && this.record[this.field.Name][0]) {\r\n this.getImageDimensions();\r\n this.dialogImageDrowingRef = this.dialog.open(this.dialogImageDrowing, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: '75%'\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio dell'immagine dal componente image-drawing.\r\n * Trasforma il Blob ricevuto in un base64, aggiorna il FileContetType e il FileDataBase64\r\n * dell'allegato caricato e chiude il dialog in cui disegnare.\r\n * @param drawnPicture Blob dell'immagine disegnata.\r\n */\r\n async saveDrowning(drawnPicture: Blob) {\r\n let base64File = await toBase64(drawnPicture);\r\n if (base64File) {\r\n this.record[this.field.Name][0].FileContentType = base64File.split(\",\")[0].split(\":\")[1].split(\";\")[0];\r\n this.record[this.field.Name][0].FileDataBase64 = base64File.split(\",\")[1];\r\n }\r\n if (this.dialogImageDrowingRef) {\r\n this.closeImageDrowingDialog();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog in cui disegnare sull'immagine cariata e svuotare le dimensioni.\r\n */\r\n closeImageDrowingDialog() {\r\n this.dialogImageDrowingRef.close();\r\n this.width = null;\r\n this.height = null;\r\n }\r\n\r\n /**\r\n * Metodo per recuperare le dimensioni dell'immagine caricata per mostrare correttamente\r\n * il componente image-drawing. Se non viene eseguito questo passaggio l'area in cui disegnare \r\n * è più grande dell'immagine stessa e al salvataggio i tratti disegnati vengono spostati. \r\n */\r\n private getImageDimensions() {\r\n var blob: Blob = this.getBlobFromBase64();\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const image = new Image();\r\n image.src = e.target.result;\r\n image.onload = rs => {\r\n this.height = rs.currentTarget['height'];\r\n this.width = rs.currentTarget['width'];\r\n };\r\n };\r\n reader.readAsDataURL(blob);\r\n }\r\n\r\n /**\r\n * Metodo per convertire il base64 di un'immagine in un Blob.\r\n * Necessario per il recupero delle dimensioni dell'immagine caricata a partire dal suo base64.\r\n * Viene eseguito solo nel caso in cui l'ImageField non ammette allegati multipli.\r\n * @returns Restituisce il Blob dell'immagine caricata.\r\n */\r\n private getBlobFromBase64() {\r\n const byteCharacters = atob(this.record[this.field.Name][0].FileDataBase64);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n return new Blob([byteArray], { type: this.record[this.field.Name][0].FileContentType });\r\n }\r\n\r\n /**\r\n * Metodo per emettere l'evento che il valore del record è cambiato.\r\n */\r\n private onRecordValueChange() {\r\n if (!this.field.Formula) {\r\n this.recordChange.emit(this.record);\r\n }\r\n }\r\n}","<!-- VISUALIZZAZIONE ALLEGATO PRE CARICATO CON POSSIBILITA' DI DISEGNO\r\n<div class=\"row\" *ngIf=\"field.ImageIsContextualAttachment && field.ContextualAttachment\">\r\n <div class=\"col-sm-12 col-md-6 col-lg-4\">\r\n <p class=\"mb-2\">\r\n {{ field.Description + (field.Required ? \" *\" : \"\")}}\r\n <br>\r\n Nome immagine: {{ field.ImgName}}\r\n </p>\r\n <eqp-img-drawing\r\n *ngIf=\"field.EnableDrawing && record[field.Name] && record[field.Name][0] && width != null && height != null\"\r\n [src]=\"'data:'+ record[field.Name][0].FileContentType + ';base64,'+ record[field.Name][0].FileDataBase64\"\r\n [showCancelButton]=\"false\" [enableLoadAnotherImage]=\"false\" [enableRemoveImage]=\"false\" [width]=\"width\"\r\n [height]=\"height\" [i18n]=\"i18n\" [showCancelButton]=\"true\" (save)=\"saveDrowning($event)\"\r\n (cancel)=\"resetPreLoadedImage()\">\r\n </eqp-img-drawing>\r\n\r\n <img *ngIf=\"!field.EnableDrawing\"\r\n [src]=\"'data:'+ record[field.Name][0].FileContentType+ ';base64,'+ record[field.Name][0].FileDataBase64\">\r\n </div> -->\r\n\r\n <!-- <div class=\"col-sm-12 col-md-6 col-lg-8\">\r\n <div class=\"row\"\r\n *ngIf=\"field.AttachDefinition && field.AttachDefinition.MetadataFields && preLoadedImageMetadataFormGroup\">\r\n <div class=\"mt-2\" *ngFor=\"let metadata of field.AttachDefinition.MetadataFields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n <dynamic-module-field-fix #fieldTemplate [field]=\"metadata\" [form]=\"preLoadedImageMetadataFormGroup\"\r\n [record]=\"record[field.Name][0]\" (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n </div>\r\n </div>\r\n </div> -->\r\n<!-- </div> -->\r\n\r\n<!-- COMPONENTE IN CUI CARICARE NUOVI ALLEGATI -->\r\n<!-- <attachment-field-template [(record)]=\"record\" [field]=\"field.AttachDefinition\" [onlyImages]=\"true\"\r\n (onAttachmentsChange)=\"onAttachmentsChange()\" *ngIf=\"!field.ImageIsContextualAttachment\">\r\n</attachment-field-template> -->\r\n\r\n<!-- DIALOG PER DISEGNARE SUL NUOVO ALLEGATO CARICATO -->\r\n<!-- <ng-template #dialogImageDrowing>\r\n <div *ngIf=\"field.EnableDrawing && record[field.Name] && record[field.Name][0] && width != null && height != null\"\r\n class=\"row\">\r\n <div class=\"col-sm-12 col-md-12\">\r\n <eqp-img-drawing [showCancelButton]=\"false\" [enableLoadAnotherImage]=\"false\" [enableRemoveImage]=\"false\"\r\n [src]=\"'data:'+ record[field.Name][0].FileContentType + ';base64,'+ record[field.Name][0].FileDataBase64\"\r\n [i18n]=\"i18n\" [showCancelButton]=\"false\" (save)=\"saveDrowning($event)\">\r\n </eqp-img-drawing>\r\n </div>\r\n </div>\r\n <div class=\"row mt-2 mb-1\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"btn mat-raised-button\" (click)=\"closeImageDrowingDialog()\" type=\"button\">\r\n Annulla disegno\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template> -->","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { IBaseFieldComponent } from '../../../interfaces/iBaseFieldComponent.interface';\r\nimport { BaseField, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../form-records/list-form-record/list-form-record.component';\r\n\r\n@Component({\r\n selector: 'dynamic-module-field-fix',\r\n templateUrl: './dynamic-module-field.component.html',\r\n styleUrls: ['./dynamic-module-field.component.scss']\r\n})\r\nexport class DynamicModuleFieldFixComponent implements OnInit, IBaseFieldComponent {\r\n\r\n @Input() field: BaseField;\r\n @Input() form: Form;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n selectedInnerForm: Form;\r\n selectedInnerFormRecord: Record;\r\n indexInnerFormRecord: number;\r\n onlyViewInnerFormRecord: boolean = false;\r\n dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n constructor(\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n\r\n updateField(): void {\r\n if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n this.fieldTemplate.forEach(f => f.updateField());\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.configList.values = this.record[this.field.Name]\r\n this.configList.showTitle = true;\r\n this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onRecordChange() {\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n /**\r\n * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n * @returns Restituisce un oggetto di tipo Form.\r\n */\r\n getInnerFormFromField(field: BaseField): Form {\r\n if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n return this.form.InnerForms.find(f => f.Name == field.Label);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aprire un dialog in cui aggiungere/modificare/visualizzare un record appartenente\r\n * a una form di dettaglio.\r\n * @param record Evento di output del componente list-form-record, contiene il record selezionato e un booleno che indica \r\n * se l'utente vuole modificare o visualizzare l'elemento selezionato.\r\n * @param innerForm Contiene la Form di dettaglio dalla quale è stato richiesto il record.\r\n */\r\n onAddViewEditInnerFormRecord(record: { record: Record, onlyView: boolean }, field: BaseField) {\r\n this.selectedInnerForm = this.getInnerFormFromField(field);\r\n if (record == null) {\r\n this.selectedInnerFormRecord = new Record();\r\n this.indexInnerFormRecord = null;\r\n this.onlyViewInnerFormRecord = false;\r\n } else {\r\n this.selectedInnerFormRecord = JSON.parse(JSON.stringify(record.record));\r\n this.indexInnerFormRecord = this.record[field.Name].indexOf(record);\r\n this.onlyViewInnerFormRecord = record.onlyView;\r\n }\r\n\r\n this.dialogInnerFormRecordRef = this.dialog.open(this.dialogInnerFormRecord, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: '75%'\r\n });\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio o alla chiusura del dialog di aggiunta/modifica/visualizzazione\r\n * di un record di una form di dettaglio.\r\n * @param record Oggetto restituito dal componente add-form-field (questo qui) contenente il Record \r\n * aggiornato dall'utente. Se null allora l'utente non ha modificato nulla e ha chiuso il dialog.\r\n */\r\n onSaveInnerFormRecord(record: Record) {\r\n if (record != null) {\r\n const arrayName: string = this.selectedInnerForm.Name.split(' ').join('_');\r\n if (this.indexInnerFormRecord != null && this.indexInnerFormRecord >= 0) {\r\n this.record[arrayName][this.indexInnerFormRecord] = record;\r\n } else {\r\n if (!this.record[arrayName]) {\r\n this.record[arrayName] = [];\r\n }\r\n this.record[arrayName].push(record);\r\n }\r\n }\r\n this.dialogInnerFormRecordRef.close();\r\n\r\n // Ricarico la tabella dei record per visualizzare le modifiche fatte dall'utente.\r\n if (this.listInnerFormRecords && this.listInnerFormRecords.length > 0) {\r\n this.listInnerFormRecords.forEach(list => {\r\n if (list && list.tableRecords) {\r\n list.tableRecords.reloadDatatable();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","<text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</text-field-template>\r\n\r\n<textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</textarea-field-template>\r\n\r\n<boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</boolean-field-template>\r\n\r\n<date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</date-field-template>\r\n\r\n<numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</numeric-field-template>\r\n\r\n<list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</attachment-field-template>\r\n\r\n<image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</image-field-template> \r\n\r\n<list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n</list-form-record>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { DynamicModuleCompileConfig } from '../../../../models/dynamicModuleCompileConfig.model';\r\nimport { AnswerStyle, BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { Form, FormScalarTypeEnum } from '../../../../models/form.model';\r\nimport { DynRecord, Record } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from './../../../../models/endPointConfiguration.model';\r\nimport { ListValueField } from 'projects/eqp-dynamic-module/src/lib/models/fields/listValueField.model';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n// import { DynamicModuleFieldComponent } from '../../dynamic-module-field/dynamic-module-field.component';\r\n\r\n@Component({\r\n selector: \"add-form-record\",\r\n templateUrl: \"./add-form-record.component.html\",\r\n styleUrls: [\"./add-form-record.component.scss\"],\r\n})\r\nexport class AddFormRecordComponent implements OnInit {\r\n\r\n @Input() configurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n\r\n @Input() formID: string = null; // preview\r\n @Input() form: Form = null; // preview config\r\n @Input() record: Record | string = null; // edit\r\n @Input() onlyView: boolean = false;\r\n @Input() isDuplicate: boolean = false;\r\n @Input() additionalParams: any = null;\r\n\r\n showTitle = true;\r\n showSaveButton = true;\r\n showBackButton = true;\r\n loader: boolean = false;\r\n\r\n formForm: UntypedFormGroup;\r\n fieldGroups: { [key: string]: Array<BaseField> } = {};\r\n FormScalarTypeEnum = FormScalarTypeEnum;\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n\r\n @ViewChildren(\"fieldTemplate\")\r\n fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n public utilityService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n // add può funzionare anche come modifica e come preview\r\n // in add abbiamo in input l'ID del Form\r\n // in modifica abbiamo in input l'ID del Record\r\n // in preview abbiamo in input il Form(caso configurator) o l'ID del modulo on onlyView impostato a true\r\n this.showTitle = this.configurations.showTitle;\r\n this.showSaveButton = this.configurations.showSaveButton;\r\n this.showBackButton = this.configurations.showBackButton;\r\n\r\n if (this.record == null) {\r\n this.previewOrNewResponseRecord();\r\n } else {\r\n this.editResponseRecord();\r\n }\r\n\r\n // l'inizializzazione termina con il recupero del record o con l'inizializzazione del form vuoto\r\n\r\n this.cdr.detectChanges();\r\n GlobalService.debugLog('oninit - DynaForm', this.form)\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onRecordChange() {\r\n if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n this.fieldTemplate.forEach((f) => f.updateField());\r\n }\r\n }\r\n\r\n previewOrNewResponseRecord() {\r\n this.record = new Record();\r\n // aggiugni nuovo\r\n if (this.form != null) {\r\n // preview per il configurator\r\n this.fieldsConfig();\r\n } else if (this.formID != null) {\r\n // preview per admin\r\n this.getFormByID(); // dentro chiama fieldsConfig\r\n }\r\n }\r\n editResponseRecord() {\r\n // modiiltà modifica\r\n if (typeof this.record === \"string\") {\r\n // allora è un ID\r\n this.getRecordByID();\r\n } else {\r\n // il record viene passato come tale\r\n // (<Record>this.record).EntID = \"3\";\r\n // (<Record>this.record).Version;\r\n this.getFormByIDandVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(exit: boolean) {\r\n GlobalService.debugLog('add-form-record saveRecordEvent')\r\n if (exit) {\r\n // this.saveRecordEvent.emit(null);\r\n this.onSaveRecord(null);\r\n } else {\r\n // this.saveRecordEvent.emit(this.record);\r\n this.onSaveRecord((<Record>this.record));\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare il record aggiunto o modificato.\r\n * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n * nel body della chiamata, altrimenti scatena l'evento \"saveRecord\".\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onSaveRecord(event: Record) {\r\n GlobalService.debugLog('onSaveRecord - event', event)\r\n GlobalService.debugLog('onSaveRecord - form', this.form)\r\n if (\r\n event != null &&\r\n this.endPointConfiguration != null &&\r\n this.endPointConfiguration.Records.SaveEndPoint\r\n ) {\r\n var dynRec: DynRecord = new DynRecord();\r\n dynRec.ID = event.ID ?? null;\r\n dynRec.EntID = this.form.ID;\r\n dynRec.Version = this.form.Version;\r\n dynRec.userID = this.userID;\r\n dynRec.Values = event ?? null;\r\n dynRec.HTMLreadableValues = this.createHTMLreadableValues(event);\r\n\r\n var additionalParams = this.additionalParams == null ? event.AdditionalParams : this.additionalParams;\r\n dynRec.AdditionalParams = JSON.stringify(additionalParams);\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"Record\",\r\n ParamValue: dynRec,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ];\r\n \r\n GlobalService.debugLog('onSaveRecord - dynamicModuleParams', dynamicModuleParams)\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.SaveEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n this.afterSaveRecordEvent.emit(event);\r\n }\r\n );\r\n } else {\r\n this.saveRecordEvent.emit(event);\r\n }\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n GlobalService.debugLog('getFormByID - DynaForm', this.form)\r\n this.fieldsConfig();\r\n },\r\n (err) => { }\r\n );\r\n }\r\n\r\n // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n getRecordByID() {\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.record,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.record = new Record();\r\n\r\n (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n this.record.ID = this.isDuplicate ? \"\" : res.ID;\r\n this.record.EntID = res.EntID;\r\n this.record.userID = res.userID;\r\n this.record.Version = res.Version;\r\n this.record.Values = JSON.parse(res.SerializedValues);\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // this.loader = true;\r\n this.getFormByIDandVersion();\r\n }\r\n );\r\n }\r\n getFormByIDandVersion() {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: (<Record>this.record).EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: (<Record>this.record).Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n GlobalService.debugLog(\"getFormByIDandVersion - this record\", <Record>this.record)\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n\r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n\r\n fieldsConfig() {\r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n GlobalService.debugLog(\"fieldsConfig - form\", this.form);\r\n this.loader = true;\r\n }\r\n\r\n /**\r\n * Metodo per creare nell'oggetto Record le proprietà mancanti rispetto ai campi che compongono la form.\r\n */\r\n private createRecordProperties() {\r\n const recordProperties: Array<string> = Object.keys(this.record);\r\n this.form.Fields.forEach((field) => {\r\n if (!recordProperties.find((p) => p === field.Name)) {\r\n this.record[field.Name] = null;\r\n }\r\n });\r\n if (this.form.InnerForms && this.form.InnerForms.length > 0) {\r\n this.form.InnerForms.forEach((form) => {\r\n const arrayName: string = form.Name.split(\" \").join(\"_\");\r\n if (!recordProperties.find((p) => p === arrayName)) {\r\n this.record[arrayName] = [];\r\n }\r\n });\r\n }\r\n GlobalService.debugLog(\"createRecordProperties - form\", this.form);\r\n }\r\n\r\n /**\r\n * Metodo per riordinare i campi che compongono la form.\r\n */\r\n private reorderFormFields() {\r\n if (this.form.Fields && this.form.Fields.length > 0) {\r\n this.form.Fields.sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0);\r\n }\r\n GlobalService.debugLog(\"reorderFormFields - form\", this.form);\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createFormGroup() {\r\n this.formForm = this.utilityService.CreateFormFormGroup(\r\n this.form.Fields,\r\n (<Record>this.record),\r\n this.onlyView\r\n );\r\n GlobalService.debugLog(\"createFormGroup - form\", this.form);\r\n }\r\n\r\n /**\r\n * Metodo per creare i gruppi in cui raggruppare i campi della form in base\r\n * a come è stata configurata dall'utente.\r\n */\r\n private createFieldGroups() {\r\n this.form.FormFieldsGroups.sort((a, b) => a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0)\r\n .map((g) => g.Name)\r\n .forEach((groupName) => {\r\n this.fieldGroups[groupName] = this.form.Fields.filter(\r\n (f) => f.FieldGroup == groupName\r\n );\r\n });\r\n GlobalService.debugLog(\"createFieldGroups - form\", this.form);\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createHTMLreadableValues(record: Record) {\r\n GlobalService.debugLog(\"createHTMLreadableValues - record\", record);\r\n GlobalService.debugLog(\"createHTMLreadableValues - form\", this.form);\r\n\r\n var formnames = new Array<string>();\r\n this.form.Fields.forEach((field) => {formnames.push(field.Name);});\r\n GlobalService.debugLog(\"createHTMLreadableValues - form fields names\", formnames);\r\n\r\n // alert(\"continue for values?\")\r\n\r\n let outputValuesArray: Array<any> = this.getResponseValues(record, this.form);\r\n \r\n GlobalService.debugLog(\"createHTMLreadableValues - outputValuesArray\", outputValuesArray);\r\n\r\n // alert(\"continue for templates?\")\r\n let template: string = this.getResponseTemplate(record, this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n \r\n GlobalService.debugLog(\"createHTMLreadableValues - template\", template);\r\n // alert(\"continue for output?\")\r\n const regex = /##([\\w]+)##/g;\r\n const output = this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex)\r\n\r\n GlobalService.debugLog(\"createHTMLreadableValues - output\", output);\r\n // alert(\"continue for ending?\")\r\n return output; // oggetto che conterrà l'output elaborato \r\n\r\n }\r\n\r\n private stringToValuePairs(valueString: string) {\r\n const valuePairs: { [key: string]: string } = {};\r\n const keyvals = valueString.split(\";\");\r\n keyvals.forEach((x) => {\r\n const parts = x.split(\"|\");\r\n if(parts.length == 1){\r\n valuePairs[parts[0].trim()] = parts[0].trim();\r\n } else if (parts.length > 1){\r\n valuePairs[parts[0].trim()] = parts[1].trim();\r\n }\r\n })\r\n return valuePairs;\r\n }\r\n\r\n private getResponseValues(record: Record, form: Form): Array<any> {\r\n let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n // GlobalService.debugLog(\"(record).Values\", record);\r\n\r\n form.Fields.forEach(\r\n (field) => {\r\n try {\r\n //GlobalService.debugLog(\"getResponseValues field\", field);\r\n // let foundObject = record.find(\r\n // (obj) => obj === field.Name\r\n // );\r\n let foundObject = record[field.Name];\r\n\r\n // gestire caso fieldtype 8 [elenco generico]\r\n // fare un eval per popolare i valuePairs se è presente una formula\r\n // prendere la label corretta\r\n ////////////////////////////////////////////////////////////////////////////////\r\n if (field.FieldType == FieldTypeEnum[\"Elenco generico\"]) {\r\n if (field.Formula != null && field.Formula) {\r\n // aggiungo a valuepairs i valori calcolati\r\n (<ListValueField>foundObject).ValuePairs = (<ListValueField>foundObject).ValuePairs ? (<ListValueField>foundObject).ValuePairs : {};\r\n var temp = UtilityHelperService.EvaluateFieldFormula(\r\n field.Formula,\r\n record,\r\n null\r\n );\r\n for (let key2 in temp) {\r\n if (UtilityHelperService.isNumeric(temp[key2])) {\r\n (<ListValueField>field).ValuePairs[Number(key2)] = temp[key2];\r\n } else {\r\n (<ListValueField>field).ValuePairs[key2] = temp[key2];\r\n }\r\n }\r\n outputValuesArray[field.Name] = (<ListValueField>field).ValuePairs[record[field.Name]];\r\n } else if ((<ListValueField>field).ValuePairs != null && (<ListValueField>field).ValuePairs.length > 0) {\r\n // va bene così\r\n } else if ((<ListValueField>field).ValueString != null && (<ListValueField>field).ValueString != \"\") {\r\n // va presa la strigna e rimappata nel diario\r\n (<ListValueField>field).ValuePairs = this.stringToValuePairs((<ListValueField>field).ValueString);\r\n }\r\n\r\n let inverted = {};\r\n //GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>field).ValuePairs);\r\n // ValuePairs: {Si: 'Si', No: 'No'}\r\n for (let key in (<ListValueField>field).ValuePairs) {\r\n inverted[(<ListValueField>field).ValuePairs[key]] = key;\r\n }\r\n (<ListValueField>field).ValuePairs = inverted;\r\n if(record[field.Name] != null && (<ListValueField>field).IsMultiChoiche){\r\n let value = \"\";\r\n record[field.Name].forEach((element, i) => {\r\n value += (<ListValueField>field).ValuePairs[element];\r\n value += i == record[field.Name].length -1 ? \"\": \", \"\r\n });\r\n outputValuesArray[field.Name] = value;\r\n } else {\r\n outputValuesArray[field.Name] = (<ListValueField>field).ValuePairs[record[field.Name]];\r\n }\r\n //console.log(\"outputValuesArray\", outputValuesArray)\r\n\r\n } else {\r\n // GlobalService.debugLog(\"record[fieldName]\", record[field.Name]);\r\n outputValuesArray[field.Name] = record[field.Name];\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n )\r\n\r\n\r\n // for (let fieldName in record) {\r\n // try {\r\n // // fieldName è il nome del campo\r\n // // PREPARO VARIABILI VALORI CORRETTI\r\n // let foundObject = form.Fields.find(\r\n // (obj) => {\r\n // if (fieldName == \"ID\") {\r\n // GlobalService.debugLog(\"obj\", obj);\r\n // GlobalService.debugLog(\"fieldName\", fieldName);\r\n // }\r\n\r\n // return obj.Name === fieldName\r\n // }\r\n // );\r\n // GlobalService.debugLog(\"fieldName\", fieldName);\r\n // GlobalService.debugLog(\"foundObject\", foundObject);\r\n // // gestire caso fieldtype 8 [elenco generico]\r\n // // fare un eval per popolare i valuePairs se è presente una formula\r\n // // prendere la label corretta\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) {\r\n // if (foundObject.Formula) {\r\n // // aggiungo a valuepairs i valori calcolati\r\n // // (<ListValueField>foundObject).ValuePairs = {};\r\n // var temp = UtilityHelperService.EvaluateFieldFormula(\r\n // foundObject.Formula,\r\n // record,\r\n // null\r\n // );\r\n // GlobalService.debugLog(\"temp\", temp);\r\n // for (let key2 in temp) {\r\n // if (UtilityHelperService.isNumeric(temp[key2])) {\r\n // (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n // } else {\r\n // (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n // }\r\n // }\r\n // GlobalService.debugLog(\"(record).Values[fieldName]\", record[fieldName]);\r\n // GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[record[fieldName]]\", (<ListValueField>foundObject).ValuePairs[record[fieldName]]);\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n // }\r\n // let inverted = {};\r\n // GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>foundObject).ValuePairs);\r\n // for (let key in (<ListValueField>foundObject).ValuePairs) {\r\n // inverted[(<ListValueField>foundObject).ValuePairs[key]] = key;\r\n // }\r\n // (<ListValueField>foundObject).ValuePairs = inverted;\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n // } else {\r\n // GlobalService.debugLog(\"record[fieldName]\", record[fieldName]);\r\n // outputValuesArray[fieldName] = record[fieldName];\r\n // }\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // } catch (e) {\r\n // console.error(e);\r\n // }\r\n // }\r\n GlobalService.debugLog(\"outputValuesArray 1\", outputValuesArray);\r\n // cancello i valori indefiniti o nulli\r\n for (const chiave in outputValuesArray) {\r\n if (outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n outputValuesArray[chiave] = ''\r\n }\r\n return outputValuesArray;\r\n }\r\n\r\n private getResponseTemplate(record: Record, form: Form): string {\r\n let template: string = '<div class=\"row\">';\r\n // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n form.Fields.forEach((baseField: BaseField) => {\r\n GlobalService.debugLog('getResposneTemplate - pre - field', baseField)\r\n if(baseField.AnswerStyle == null || baseField.AnswerStyle == undefined){\r\n baseField.AnswerStyle = new AnswerStyle();\r\n baseField.AnswerStyle.ColSpanSizes = baseField.ColSpanSizes;\r\n baseField.AnswerStyle.FieldstyleCSS = baseField.FieldstyleCSS;\r\n baseField.AnswerStyle.LabelstyleCSS = baseField.LabelstyleCSS;\r\n if(baseField.VisibleIf){\r\n baseField.AnswerStyle.InListView = UtilityHelperService.EvaluateFieldFormula(baseField.VisibleIf, record, null);\r\n }else{\r\n baseField.AnswerStyle.InListView = baseField.InListView;\r\n baseField.AnswerStyle.VisibleIf = baseField.VisibleIf;\r\n }\r\n } \r\n if(baseField.AnswerStyle.VisibleIf){\r\n const visibility = UtilityHelperService.EvaluateFieldFormula(baseField.AnswerStyle.VisibleIf, record, null)\r\n GlobalService.debugLog(\"EvaluateFieldFormula - visibility\", visibility);\r\n baseField.AnswerStyle.InListView = (visibility == true) ? true : false ;\r\n }\r\n if(baseField.AnswerStyle.InListView){\r\n template += '<div class=\"'+ this.utilityService.getFieldAnswerStyleClass(baseField) +'\"> '+\r\n ' <span class=\"dynaform-question\" style=\"' + baseField.AnswerStyle.LabelstyleCSS + '\">' + baseField.Description + ':</span>' + \r\n ' <span class=\"dynaform-response\" style=\"' + baseField.AnswerStyle.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span>' + \r\n '</div> \\n ';\r\n }\r\n GlobalService.debugLog('getResposneTemplate - post - field', baseField)\r\n });\r\n // (attualmente non esiste il concetto di tempate di output)\r\n template += '</div>';\r\n return template;\r\n }\r\n\r\n private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n return template.replace(regex, (match, group) => {\r\n return <string>outputValuesArray[group];\r\n });\r\n }\r\n\r\n}\r\n","<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <span>{{form.Name}}</span>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n <!-- VISUALIZZAZIONE A STEPPER -->\r\n <mat-horizontal-stepper linear *ngIf=\"form.FormScalarType == FormScalarTypeEnum['A step']\"\r\n class=\"add-form-record-stepper\">\r\n <mat-step *ngFor=\"let group of form.FormFieldsGroups; let i = index; let first = first; let last = last\">\r\n <ng-template matStepLabel>\r\n {{group.Name}}\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end add-form-record-buttons\">\r\n <button *ngIf=\"!first\" class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button *ngIf=\"!last\" class=\"button-next\" color=\"primary\" mat-raised-button matStepperNext>\r\n Successivo\r\n </button>\r\n <button *ngIf=\"last && showSaveButton\" (click)=\"saveOrExitForm(false)\" class=\"button-next\"\r\n color=\"primary\" mat-raised-button>\r\n Salva\r\n </button>\r\n </div>\r\n\r\n </mat-step>\r\n </mat-horizontal-stepper>\r\n\r\n <!-- VISUALIZZAZIONE A TAB -->\r\n <mat-tab-group *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In tab']\" class=\"add-form-record-tab\">\r\n <mat-tab *ngFor=\"let group of form.FormFieldsGroups\" [label]=\"group.Name\">\r\n <div class=\"mt-3\">\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- VISUALIZZAZIONE AD ACCORDION -->\r\n <mat-accordion multi *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In accordion']\"\r\n class=\"add-form-record-accordion\">\r\n <mat-expansion-panel *ngFor=\"let group of form.FormFieldsGroups\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{group.Name}}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </form>\r\n\r\n <div class=\"row mt-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"mr-2\" mat-raised-button type=\"button\" *ngIf=\"showBackButton\" (click)=\"saveOrExitForm(true)\">\r\n Annulla\r\n </button>\r\n <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showSaveButton\"\r\n (click)=\"saveOrExitForm(false)\" [disabled]=\"formForm.invalid || formForm.disabled\">\r\n Salva\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"!field.InListView\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-field-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\"\r\n (recordChange)=\"onRecordChange()\">\r\n </dynamic-module-field-fix>\r\n </div>\r\n </div>\r\n</ng-template>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n} from \"@angular/core\";\r\nimport { UntypedFormGroup } from \"@angular/forms\";\r\nimport { DynamicModuleCompileConfig } from \"../../../../models/dynamicModuleCompileConfig.model\";\r\nimport { BaseField, FieldTypeEnum } from \"../../../../models/baseField.model\";\r\nimport { Form, FormScalarTypeEnum } from \"../../../../models/form.model\";\r\nimport { DynRecord, Record } from \"../../../../models/record.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleFieldFixComponent } from \"../../dynamic-module-field-fix/dynamic-module-field.component\";\r\nimport {\r\n EndPointConfiguration,\r\n ParamTypeEnum,\r\n} from \"./../../../../models/endPointConfiguration.model\";\r\nimport { ListValueField } from \"./../../../../models/fields/listValueField.model\";\r\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\n// import { DynamicModuleFieldComponent } from '../../dynamic-module-field/dynamic-module-field.component';\r\n\r\n@Component({\r\n selector: \"view-form-record\",\r\n templateUrl: \"./view-form-record.component.html\",\r\n styleUrls: [\"./view-form-record.component.scss\"],\r\n})\r\nexport class ViewFormRecordComponent implements OnInit {\r\n\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() record: string | DynRecord;\r\n @Input() showBackButton = true;\r\n\r\n outputString: SafeHtml = \"\";\r\n form: Form;\r\n loader: boolean = false;\r\n // per controllare che il campo non sia una scelta multipla\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n @Output() goBackEvent: EventEmitter<null> = new EventEmitter<null>();\r\n\r\n @ViewChildren(\"fieldTemplate\")\r\n fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n\r\n constructor(\r\n public utilityService: UtilityHelperService,\r\n public domSanitizer: DomSanitizer) {}\r\n\r\n ngOnInit(): void {\r\n GlobalService.debugLog('this.record', this.record)\r\n if (typeof this.record === \"string\") {\r\n // allora è un ID\r\n this.getRecordByID();\r\n } else {\r\n // il record viene passato come tale\r\n // (<Record>this.record).EntID = \"3\";\r\n // (<Record>this.record).Version;\r\n // this.getFormByIDandVersion();\r\n this.createOutput()\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n goBack() {\r\n this.goBackEvent.emit();\r\n }\r\n\r\n // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n getRecordByID() {\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.record,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.record = new DynRecord();\r\n\r\n (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n this.record.ID = res.ID;\r\n this.record.EntID = res.EntID;\r\n this.record.userID = res.userID;\r\n this.record.Version = res.Version;\r\n this.record.Values = JSON.parse(res.SerializedValues);\r\n this.record.HTMLreadableValues = res.HTMLreadableValues;\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // this.loader = true;\r\n GlobalService.debugLog(\"record\", this.record);\r\n this.createOutput()\r\n // this.getFormByIDandVersion();\r\n }\r\n );\r\n }\r\n getFormByIDandVersion() {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: (<DynRecord>this.record).EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: (<DynRecord>this.record).Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n GlobalService.debugLog(\"form\", this.form);\r\n this.createOutput();\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createOutput() {\r\n this.outputString = this.domSanitizer.bypassSecurityTrustHtml((<DynRecord>this.record).HTMLreadableValues);\r\n this.loader = true;\r\n return\r\n // let outputValuesArray: Array<any> = this.getResponseValues(<DynRecord>this.record, this.form);\r\n // GlobalService.debugLog(\"outputValuesArray\", outputValuesArray);\r\n \r\n // let template: string = this.getResponseTemplate(this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n // GlobalService.debugLog(\"template\", template);\r\n\r\n // const regex = /##([\\w]+)##/g;\r\n // const outputString = this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex); // oggetto che conterrà l'output elaborato \r\n // this.outputString = this.domSanitizer.bypassSecurityTrustHtml(outputString);\r\n // GlobalService.debugLog(\"outputString\", this.outputString);\r\n\r\n // STAMPO A SCHERMO\r\n // this.loader = true;\r\n }\r\n\r\n // private getResponseValues(record: Record, form: Form ): Array<any> {\r\n // let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n // //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n // for (let fieldName in (record).Values) {\r\n // try {\r\n // // fieldName è il nome del campo\r\n // // PREPARO VARIABILI VALORI CORRETTI\r\n // let foundObject = form.Fields.find(\r\n // (obj) => obj.Name === fieldName\r\n // );\r\n // GlobalService.debugLog(\"fieldName\", fieldName);\r\n // GlobalService.debugLog(\"foundObject\", foundObject);\r\n // // gestire caso fieldtype 8 [elenco generico]\r\n // // fare un eval per popolare i valuePairs se è presente una formula\r\n // // prendere la label corretta\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) \r\n // {\r\n // if (foundObject.Formula) \r\n // {\r\n // // aggiungo a valuepairs i valori calcolati\r\n // // (<ListValueField>foundObject).ValuePairs = {};\r\n // var temp = UtilityHelperService.EvaluateFieldFormula(\r\n // foundObject.Formula,\r\n // record,\r\n // null\r\n // );\r\n // for (let key2 in temp) {\r\n // if (UtilityHelperService.isNumeric(temp[key2])) \r\n // {\r\n // (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n // } else \r\n // {\r\n // (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n // }\r\n // }\r\n // GlobalService.debugLog(\"(record).Values[fieldName]\", (record).Values[fieldName]);\r\n // GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]\", (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]);\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];\r\n // }\r\n // let inverted = {};\r\n // for (let key in (<ListValueField>foundObject).ValuePairs) \r\n // { \r\n // inverted[(<ListValueField>foundObject).ValuePairs[key]] = key; \r\n // }\r\n // (<ListValueField>foundObject).ValuePairs = inverted;\r\n // outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];\r\n // } else \r\n // {\r\n // GlobalService.debugLog(\"(record).Values[fieldName]\", (record).Values[fieldName]);\r\n // outputValuesArray[fieldName] = (record).Values[fieldName];\r\n // }\r\n // ////////////////////////////////////////////////////////////////////////////////\r\n // } catch (e) {\r\n // console.error(e);\r\n // }\r\n // }\r\n // // cancello i valori indefiniti o nulli\r\n // for(const chiave in outputValuesArray){\r\n // if(outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n // outputValuesArray[chiave] = ''\r\n // }\r\n // return outputValuesArray;\r\n // }\r\n\r\n // private getResponseTemplate(form: Form): string {\r\n // let template: string = \"\";\r\n // // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n // form.Fields.forEach((baseField: BaseField) => {\r\n // template += '<span style=\"' + baseField.LabelstyleCSS + '\">' + baseField.Description + ':</span> <span style=\"' + baseField.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span> \\n <br> ';\r\n // });\r\n // // (attualmente non esiste il concetto di tempate di output)\r\n // return template;\r\n // }\r\n\r\n // private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n // return template.replace(regex, (match, group) => {\r\n // return <string>outputValuesArray[group];\r\n // });\r\n // }\r\n\r\n}\r\n","<div *ngIf=\"loader\">\r\n <div id=\"output-string\" [innerHTML]=\"outputString\"></div>\r\n <div class=\"row mt-2\" *ngIf=\"showBackButton\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button\r\n class=\"mr-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"goBack()\"\r\n >\r\n Indietro\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { DynamicModuleCompileConfig } from '../../../../../models/dynamicModuleCompileConfig.model';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../../../models/endPointConfiguration.model';\r\nimport { Form } from '../../../../../models/form.model';\r\nimport { DynRecord, Record } from \"../../../../../models/record.model\";\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { single } from 'rxjs';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\n\r\ntype PageState = null | 'visualizzaContenuto' | 'modificaContenuto'\r\n\r\n@Component({\r\n selector: 'lib-single-record',\r\n templateUrl: './single-record.component.html',\r\n styleUrls: ['./single-record.component.scss']\r\n})\r\nexport class SingleRecordComponent implements OnInit {\r\n \r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() record;\r\n @Input() pageState: PageState = 'visualizzaContenuto';\r\n @Input() userID: string;\r\n @Input() form: Form;\r\n @Input() showBackButton = true;\r\n @Input() outCompileConfigurations: DynamicModuleCompileConfig;\r\n @Input() onlyView: boolean = true;\r\n\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n\r\n loaded = false;\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n GlobalService.debugLog(\"single-record - outCompileConfigurations\", this.outCompileConfigurations)\r\n this.loaded = true; \r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(record: Record) {\r\n GlobalService.debugLog('single-record saveRecordEvent', record)\r\n this.saveRecordEvent.emit(record);\r\n }\r\n onAfterSaveRecord(event) {\r\n GlobalService.debugLog('single-record afterSaveRecordEvent', event)\r\n this.afterSaveRecordEvent.emit(event);\r\n }\r\n \r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n // onAddViewEditRecord2(event: { record: Record; onlyView: boolean }) {\r\n // this.loaded = false;\r\n // this.record = null;\r\n\r\n // this.onlyView = event.onlyView;\r\n\r\n // this.outCompileConfigurations.showBackButton = false;\r\n // this.outCompileConfigurations.showSaveButton = !event.onlyView;\r\n // this.outCompileConfigurations.showTitle = false;\r\n\r\n // if (event != null) {\r\n // if (\r\n // this.endPointConfiguration &&\r\n // this.endPointConfiguration.Records &&\r\n // this.endPointConfiguration.Records.GetByIDEndPoint\r\n // ) {\r\n // // preparo la versione corretta del form\r\n // var dynamicModuleParams = [\r\n // {\r\n // ParamName: \"EntID\",\r\n // ParamValue: event.record.EntID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // {\r\n // ParamName: \"Version\",\r\n // ParamValue: event.record.Version,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // ];\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Form) => {\r\n // this.form = res;\r\n\r\n // // preparo i dati del record\r\n // var dynamicRecordParams = [\r\n // {\r\n // ParamName: \"id\",\r\n // ParamValue: event.record.ID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // ];\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Records.GetByIDEndPoint,\r\n // dynamicRecordParams,\r\n // (res: DynRecord) => {\r\n // this.record = JSON.parse(res.SerializedValues);\r\n // this.record.ID = res.ID;\r\n // this.record.EntID = res.EntID;\r\n // this.record.userID = res.userID;\r\n // this.record.Version = res.Version;\r\n // this.record.HTMLreadableValues = res.HTMLreadableValues\r\n\r\n // this.loaded = true;\r\n // }\r\n // );\r\n // }\r\n // );\r\n // } else {\r\n // this.record = JSON.parse(JSON.stringify(event.record));\r\n // this.loaded = true;\r\n // }\r\n // } else {\r\n // const dynamicModuleParams: Array<EndPointDataParams> =\r\n // new Array<EndPointDataParams>();\r\n // dynamicModuleParams.push({\r\n // ParamName: \"id\",\r\n // ParamValue: this.form.ID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // });\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Form) => {\r\n // this.form = res;\r\n // this.record = null;\r\n // this.onlyView = false;\r\n // this.loaded = true;\r\n // },\r\n // (err) => {}\r\n // );\r\n\r\n // // this.record = null;\r\n // // this.onlyView = false;\r\n // // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // }\r\n // }\r\n \r\n}\r\n","<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n <view-form-record \r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"record\" \r\n [showBackButton]=\"false\">\r\n </view-form-record>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n <add-form-record\r\n [onlyView]=\"onlyView\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [record]=\"record\"\r\n\r\n [additionalParams]=\"outCompileConfigurations.additionalParams\"\r\n [configurations]=\"outCompileConfigurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n </ng-container>\r\n\r\n</ng-container>","/**\r\n * Classe base che implementa la valorizzazione dell'ID (se null) con una nuova GUID \r\n * in creazione dell'oggetto.\r\n * Per scelta architetturale, visto che non possiamo assumere la persistenza su DB relazionale o su NOSQL, ogni\r\n * oggetto della configurazione viene persistito, e gestito con ID di tipo stringa creato da una GUID.\r\n */\r\nexport class GraphField {\r\n Name: string;\r\n Coords: Array<Coords> = new Array<Coords>();\r\n Visible: boolean = true;\r\n}\r\n\r\nexport class Coords {\r\n x: Date;\r\n y: number;\r\n}","import { Component, Input, OnInit } from '@angular/core';\r\nimport { Coords } from '../../../../models/graph.model';\r\n\r\n@Component({\r\n selector: 'graph',\r\n templateUrl: './graph.component.html',\r\n styleUrls: ['./graph.component.scss']\r\n})\r\nexport class GraphComponent implements OnInit {\r\n\r\n @Input(\"data\") data: Array<Coords> = new Array<Coords>();\r\n @Input(\"title\") title: string = \"\";\r\n\r\n stockChartOptions = {\r\n width: 1000,\r\n height: 500,\r\n title: {\r\n text: \"\"\r\n },\r\n theme: \"light2\",\r\n charts: [{\r\n data: [{\r\n xValueType: \"dateTime\",\r\n type: \"line\",\r\n dataPoints: []\r\n }]\r\n }],\r\n navigator: {\r\n slider: {\r\n minimum: new Date(\"2018-07-01\"),\r\n maximum: new Date(\"2019-06-30\")\r\n }\r\n },\r\n options: {\r\n responsive: true,\r\n maintainAspectRatio: false\r\n }\r\n };\r\n\r\n loaded: boolean = false;\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {\r\n // Aggiustamento e scrittura dati\r\n if (this.data.length > 0){\r\n var lastvalue = this.data[0];\r\n var firstvalue = this.data[this.data.length-1];\r\n\r\n this.stockChartOptions.navigator.slider.minimum = new Date(firstvalue.x);\r\n this.stockChartOptions.navigator.slider.maximum = new Date(lastvalue.x);\r\n this.stockChartOptions.title.text = this.title;\r\n this.stockChartOptions.charts[0].data[0].dataPoints = this.data;\r\n\r\n console.log(this.title,this.stockChartOptions);\r\n\r\n this.loaded = true;\r\n }\r\n }\r\n\r\n}\r\n","<canvasjs-stockchart *ngIf=\"loaded\" [options]=\"stockChartOptions\"></canvasjs-stockchart>\r\n<div class=\"error\" *ngIf=\"!loaded\"><b>{{title}}:</b> Nessun dato trovato nell'intervallo specificato!</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { Form } from \"../../../models/form.model\";\r\nimport { DynamicModuleCompileConfig } from '../../../models/dynamicModuleCompileConfig.model';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../models/endPointConfiguration.model';\r\nimport { PickerModeEnum } from '@eqproject/eqp-datetimepicker';\r\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { Coords, GraphField } from '../../../models/graph.model';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { DynRecord } from '../../../models/record.model';\r\nimport { FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'graphs',\r\n templateUrl: './graphs.component.html',\r\n styleUrls: ['./graphs.component.scss']\r\n})\r\nexport class GraphsComponent implements OnInit {\r\n\r\n @Input() configurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() formID: string = null; // preview\r\n @Input() form: Form = null; // preview config\r\n\r\n pickerModeEnum = PickerModeEnum;\r\n fieldFormGroup: UntypedFormGroup;\r\n\r\n loaded: boolean = false;\r\n generated: boolean = false;\r\n\r\n minperiod: Date = new Date();\r\n maxperiod: Date = new Date();\r\n minperiodS: string;\r\n maxperiodS: string;\r\n\r\n fields: Array<GraphField> = new Array<GraphField>();\r\n selectedFields: Array<GraphField>;\r\n selectedGeneratedFields: Array<GraphField>;\r\n\r\n answers: Array<DynRecord> = null;\r\n eligibleAnswers: Array<DynRecord> = null;\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService,\r\n private datePipe: DatePipe\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.formID != null){\r\n this.getFormByID();\r\n } else {\r\n this.loaded = true;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n */\r\n getFormByID() {\r\n if (\r\n this.formID &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Forms &&\r\n this.endPointConfiguration.Forms.GetByIDEndPoint\r\n ) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n\r\n this.form = res;\r\n\r\n this.form.Fields.filter(x => x.FieldType == FieldTypeEnum['Campo numerico']).forEach((field) => {\r\n var graphField: GraphField = new GraphField();\r\n graphField.Name = field.Label;\r\n this.fields.push(graphField);\r\n });\r\n\r\n this.getRecordsByFormID();\r\n\r\n },\r\n (err) => {\r\n }\r\n );\r\n }\r\n }\r\n\r\n async getRecordsByFormID() {\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n if (\r\n this.configurations.userID == null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n ) {\r\n // se non conosco l'utente\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.answers = res;\r\n }\r\n );\r\n } else if (\r\n this.configurations.userID != null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint\r\n ) {\r\n // se conosco l'utente\r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: this.configurations.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n this.answers = res;\r\n this.loaded = true;\r\n }\r\n );\r\n } else {\r\n console.error(\"controllare le configurazioni dell'endpoint\");\r\n }\r\n } \r\n\r\n generateGraph(){\r\n this.generated = false;\r\n this.selectedGeneratedFields = JSON.parse(JSON.stringify(this.selectedFields));\r\n this.getEligibleAnswers();\r\n }\r\n\r\n getEligibleAnswers(){\r\n // Azzero le coordinate\r\n this.selectedGeneratedFields.forEach((field) => { field.Coords = new Array<Coords>(); });\r\n this.eligibleAnswers = JSON.parse(JSON.stringify(this.answers));\r\n\r\n this.minperiodS = this.datePipe.transform(this.minperiod,\"YYYY-MM-dd\");\r\n this.maxperiodS = this.datePipe.transform(this.maxperiod,\"YYYY-MM-dd\");\r\n\r\n // Filtro minimo periodo\r\n if (this.minperiod != null){\r\n this.eligibleAnswers = this.eligibleAnswers.filter(x => x.AnswerDate.split(\"T\")[0] >= this.minperiodS);\r\n }\r\n\r\n // Filtro massimo periodo\r\n if (this.maxperiod != null){\r\n this.eligibleAnswers = this.eligibleAnswers.filter(x => x.AnswerDate.split(\"T\")[0] <= this.maxperiodS);\r\n }\r\n\r\n // Inserisco i dati trovati\r\n this.eligibleAnswers.forEach((answer) => {\r\n var answervalues = JSON.parse(answer.SerializedValues);\r\n this.selectedGeneratedFields.forEach((field) => {\r\n if (answervalues[field.Name] != null){\r\n var coords: Coords = new Coords();\r\n coords.x = new Date(answer.AnswerDate.split(\"T\")[0]);\r\n coords.y = parseFloat(answervalues[field.Name]);\r\n field.Coords.push(coords);\r\n }\r\n });\r\n });\r\n\r\n setTimeout(() => { this.generated = true; }, 1000);\r\n\r\n }\r\n\r\n}\r\n","<mat-card class=\"list-view-form-record\" *ngIf=\"loaded\">\r\n <mat-card-content>\r\n \r\n\r\n <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"pickerModeEnum.DATE\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"pickerModeEnum.DATE\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"fields\" [(ngModelInput)]=\"selectedFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [isMultiSelect]=\"true\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedFields == null || selectedFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateGraph()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div>\r\n <div class=\"generation_box\" *ngIf=\"generated\">\r\n <div class=\"row\">\r\n <div class=\"col-3\">\r\n <div class=\"generation_options\" *ngFor=\"let selectedField of selectedGeneratedFields\">\r\n <mat-checkbox class=\"mr-2\" [(ngModel)]=\"selectedField.Visible\">\r\n {{selectedField.Name}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"generation_graph\" *ngFor=\"let selectedField of selectedGeneratedFields\">\r\n <div class=\"generation_divider\" [hidden]=\"!selectedField.Visible\">\r\n <graph [data]=\"selectedField.Coords\" [title]=\"selectedField.Name\"></graph>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n </mat-card>","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnChanges,\r\n SimpleChanges,\r\n ChangeDetectorRef,\r\n TemplateRef,\r\n} from \"@angular/core\";\r\nimport {\r\n ConfigColumn,\r\n EqpTableComponent\r\n} from \"@eqproject/eqp-table\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../../models/record.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynamicModuleListConfig } from \"../../../../models/dynamicModuleListConfig.model\";\r\nimport { DynamicModuleCompileConfig } from \"./../../../..//models/dynamicModuleCompileConfig.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"./../../../../models/endPointConfiguration.model\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Router } from \"@angular/router\";\r\n\r\ntype Panel = {\r\n record: Record,\r\n isOpen: boolean,\r\n pageState: string,\r\n highlighted: boolean\r\n}\r\n\r\n@Component({\r\n selector: \"list-view-form-record\",\r\n templateUrl: \"list-view-form-record.component.html\",\r\n styleUrls: [\"./list-view-form-record.component.scss\"],\r\n})\r\nexport class ListViewFormRecordComponent implements OnInit, OnChanges {\r\n \r\n @Input() configurations: DynamicModuleListConfig;\r\n @Input() compileConfigurations: DynamicModuleCompileConfig;\r\n outCompileConfigurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() formID: string;\r\n @Input() form: Form = null;\r\n @Input() defaultListViewFunction: Function = null;\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n @Input() onlyView: boolean = true;\r\n @Input() records: Array<DynRecord> = null;\r\n @Input() highlightFilter: any = null;\r\n\r\n defaultListActions: DynamicModuleListFormRecordActionsDefault =\r\n new DynamicModuleListFormRecordActionsDefault();\r\n showTitle = true;\r\n // values: Array<Record>;\r\n test = false;\r\n selectedRecord: Record;\r\n loader: boolean;\r\n panelOpenState: boolean[] = new Array<boolean>();\r\n public selectedIndex: number | null = null;\r\n visualizzaContenuto = false;\r\n modificaContenuto = false;\r\n\r\n @ViewChild(\"tableRecords\", { static: true }) tableRecords: EqpTableComponent;\r\n\r\n columns = new Array<ConfigColumn>();\r\n panels: Array<Panel>\r\n buttons: Array<RecordButton> = new Array<RecordButton>();\r\n popupLoader: boolean = false;\r\n\r\n @ViewChild(\"openAddDialog\", { static: false }) openAddDialog: TemplateRef<any>;\r\n openAddDialogRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n @ViewChild(\"openGraphDialog\", { static: false }) openGraphDialog: TemplateRef<any>;\r\n openGraphDialogRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n\r\n // add new\r\n @Output() onAddViewEditRecord: EventEmitter<{\r\n record: Record;\r\n onlyView: boolean;\r\n }> = new EventEmitter<{ record: Record; onlyView: boolean }>();\r\n\r\n @Output() onDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n\r\n constructor(\r\n private utilityHelperService: UtilityHelperService,\r\n private changeDetector: ChangeDetectorRef,\r\n private dialog: MatDialog,\r\n private router: Router\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n // this.panelOpenState = [\r\n // ...Array(this.configurations.values.length + 1),\r\n // ].map(() => false);\r\n\r\n this.defaultListActions = this.configurations.defaultListActions;\r\n this.showTitle = this.configurations.showTitle;\r\n\r\n this.outCompileConfigurations = new DynamicModuleCompileConfig(\r\n this.compileConfigurations.showTitle,\r\n this.compileConfigurations.showSaveButton,\r\n this.compileConfigurations.showBackButton,\r\n this.compileConfigurations.userID,\r\n this.compileConfigurations.additionalParams,\r\n this.compileConfigurations.prefilterParams,\r\n );\r\n //GlobalService.debugLog(\"list-view - outcompileConfigurations \", this.outCompileConfigurations);\r\n this.getFormByID();\r\n this.configureListviewButtons();\r\n\r\n // this.outCompileConfigurations.userID;\r\n // this.values = this.configurations.values\r\n // this.configureColumns();\r\n\r\n\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //GlobalService.debugLog('ngOnChanges', changes);\r\n\r\n // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n if (\r\n changes[\"configurations\"] != undefined &&\r\n changes[\"configurations\"].firstChange == false\r\n ) {\r\n this.configurations.values = changes[\"configurations\"].currentValue;\r\n this.reloadTables();\r\n }\r\n }\r\n\r\n onOpening(indice: number) {\r\n this.selectedIndex = indice;\r\n }\r\n\r\n configureListviewButtons() {\r\n this.buttons = [\r\n\r\n {\r\n \"icon\": \"visibility\",\r\n \"text\": \"Visualizza\",\r\n \"visible\": this.defaultListActions.view && (this.defaultListActions.edit || this.defaultListActions.duplicate || this.defaultListActions.delete),\r\n \"extraClass\": \"view-button-icon\",\r\n \"fn\": (panel, i, event) => {\r\n this.viewRecord(panel, true, i, event);\r\n }\r\n },\r\n {\r\n \"icon\": \"edit\",\r\n \"text\": \"Modifica\",\r\n \"visible\": this.defaultListActions.edit,\r\n \"extraClass\": \"edit-button-icon\",\r\n \"fn\": (panel, i, event) => {\r\n this.EditRecord(panel, false, i, event);\r\n }\r\n },\r\n {\r\n \"icon\": \"file_copy\",\r\n \"text\": \"Duplica\",\r\n \"visible\": this.defaultListActions.duplicate,\r\n \"extraClass\": \"duplicate-button-icon\",\r\n \"fn\": (panel, i, event) => {\r\n this.duplicateRecord(panel, false, i, event);\r\n }\r\n },\r\n {\r\n \"icon\": \"delete\",\r\n \"text\": \"Cancella\",\r\n \"visible\": this.defaultListActions.delete,\r\n \"extraClass\": \"delete-button-icon\",\r\n \"fn\": (panel, i, event) => {\r\n this.deleteRecord(panel, event);\r\n }\r\n }\r\n\r\n ]\r\n this.buttons = this.buttons.concat(this.externalButtons).filter(x => x.visible);\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n if (this.form == null) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.configureColumns();\r\n },\r\n (err) => { }\r\n );\r\n } else {\r\n this.configureColumns();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per configurare le colonne della eqp-table.\r\n */\r\n private configureColumns() {\r\n // this.createAdditionalActions();\r\n // this.createColumnsFromFormFields();\r\n if (this.records == null) {\r\n this.getRecordsByFormID();\r\n } else {\r\n //GlobalService.debugLog('Records Exists', this.records);\r\n this.generateAnswersArray(this.records);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n * a partire dai quali vengono ricreati i Record usati nel client.\r\n */\r\n async getRecordsByFormID() {\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n if (\r\n this.configurations.userID == null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n ) {\r\n // se non conosco l'utente\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n //GlobalService.debugLog('GetByFormIDEndPoint', res)\r\n this.generateAnswersArray(res);\r\n }\r\n );\r\n } else if (\r\n this.configurations.userID != null &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint\r\n ) {\r\n // se conosco l'utente\r\n let dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: this.form.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"UserID\",\r\n ParamValue: this.configurations.userID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n\r\n await this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Array<DynRecord>) => {\r\n //GlobalService.debugLog('GetAllByEntAndUserIDEndPoint', res)\r\n this.generateAnswersArray(res);\r\n }\r\n );\r\n } else {\r\n console.error(\"controllare le configurazioni dell'endpoint\");\r\n }\r\n }\r\n\r\n private generateAnswersArray(res: Array<DynRecord>) {\r\n this.configurations.values = new Array<Record>();\r\n this.panels = new Array<Panel>();\r\n res.forEach((r) => {\r\n //GlobalService.debugLog(\"generateAnswersArray\", r)\r\n var tmpRec: Record = new Record();\r\n //GlobalService.debugLog(\"SerializedValues\", r.SerializedValues)\r\n tmpRec = JSON.parse(r.SerializedValues);\r\n tmpRec.ID = r.ID;\r\n tmpRec.EntID = r.EntID;\r\n tmpRec.Version = r.Version;\r\n tmpRec.userID = r.userID;\r\n tmpRec.AnswerDate = r.AnswerDate;\r\n tmpRec.HTMLreadableValues = r.HTMLreadableValues;\r\n //GlobalService.debugLog(\"AdditionalParams\", r.AdditionalParams)\r\n tmpRec.AdditionalParams = r.AdditionalParams != \"\" && r.AdditionalParams != null ? JSON.parse(r.AdditionalParams) : \"\";\r\n this.configurations.values.push(tmpRec);\r\n\r\n var isHighlighted = false;\r\n if (this.highlightFilter != null) {\r\n isHighlighted = true;\r\n Object.keys(this.highlightFilter).forEach((filter) => {\r\n if (!tmpRec.AdditionalParams[filter] || tmpRec.AdditionalParams[filter] != this.highlightFilter[filter]) {\r\n isHighlighted = false;\r\n }\r\n });\r\n }\r\n\r\n this.panels.push({ record: tmpRec, isOpen: false, pageState: null, highlighted: isHighlighted });\r\n });\r\n\r\n this.loader = true;\r\n setTimeout((_) => {\r\n this.changeDetector.detectChanges();\r\n }, 0); // refresh ui\r\n }\r\n\r\n togglePanel(panel: any, record: Record) {\r\n //GlobalService.debugLog('togglePanel')\r\n if (this.defaultListViewFunction != null) {\r\n //GlobalService.debugLog('defaultListViewFunction', record)\r\n this.defaultListViewFunction(record);\r\n return;\r\n }\r\n if (!panel.isOpen) {\r\n panel.isOpen = true;\r\n panel.pageState = 'visualizzaContenuto';\r\n // Simula un calcolo asincrono\r\n // setTimeout(() => {\r\n // }, 1000);\r\n } else {\r\n panel.isOpen = false;\r\n panel.pageState = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che scatena l'evento di Output per mostrare o modificare il record\r\n * selezionato sulla eqp-table.\r\n * @param record Record da visualizzare o modificare selezionato sulla eqp-table.\r\n * @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.\r\n */\r\n viewOrEditRecord(record: Record, onlyView: boolean, i) {\r\n //GlobalService.debugLog('viewOrEditRecord')\r\n this.loader = false;\r\n this.onAddViewEditRecord2({ record, onlyView });\r\n this.panelOpenState.map(() => false);\r\n this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n // this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n viewRecord(panel: Panel, onlyView: boolean, i, ev: Event) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n //GlobalService.debugLog('viewRecord')\r\n let record = panel.record\r\n this.visualizzaContenuto = true;\r\n this.modificaContenuto = false;\r\n this.loader = false;\r\n // this.onAddViewEditRecord2({ record, onlyView });\r\n if (panel.pageState == 'visualizzaContenuto') {\r\n panel.isOpen = false;\r\n panel.pageState = null;\r\n } else {\r\n panel.isOpen = true;\r\n panel.pageState = 'visualizzaContenuto';\r\n }\r\n this.panelOpenState.map(() => false);\r\n this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n // this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n EditRecord(panel: Panel, onlyView: boolean, i, ev: Event) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n //GlobalService.debugLog('EditRecord')\r\n\r\n let record = panel.record\r\n this.visualizzaContenuto = false;\r\n this.modificaContenuto = true;\r\n this.loader = false;\r\n // this.onAddViewEditRecord2({ record, onlyView });\r\n if (panel.pageState == 'modificaContenuto') {\r\n panel.isOpen = false;\r\n panel.pageState = null;\r\n } else {\r\n panel.isOpen = true;\r\n panel.pageState = 'modificaContenuto';\r\n }\r\n this.panelOpenState.map(() => false);\r\n this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n // this.onAddViewEditRecord.emit({ record, onlyView });\r\n }\r\n\r\n externalCallback(ev: Event, callback: Function, record: any) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n callback(record);\r\n }\r\n\r\n /**\r\n * Metodo per duplicare un record della form.\r\n * @param record Record da duplicare.\r\n */\r\n duplicateRecord(panel: Panel, onlyView: boolean, i, ev: Event) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n //GlobalService.debugLog('duplicateRecord');\r\n\r\n panel.record.ID = \"\";\r\n this.selectedRecord = panel.record;\r\n\r\n console.log(\"this.selectedRecord\", this.selectedRecord);\r\n\r\n this.openAddDialogRef = this.dialog.open(this.openAddDialog, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n minWidth: \"32rem\",\r\n minHeight: \"100px\",\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Metodo per eliminare un record dalla lista.\r\n * @param record Record da eliminare selezionato sulla eqp-table.\r\n */\r\n deleteRecord(record: Record, ev: Event) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n this.onDeleteRecord.emit(record);\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della eqp-table.\r\n */\r\n private reloadTables() {\r\n if (this.tableRecords) {\r\n this.tableRecords.reloadDatatable();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(record: Record) {\r\n //GlobalService.debugLog('list-view-form-record save', record)\r\n this.saveRecordEvent.emit(record);\r\n }\r\n onAfterSaveRecord(event) {\r\n //GlobalService.debugLog('list-view-form-record aftersave', event)\r\n this.saveRecordEvent.emit(event);\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n onAddViewEditRecord2(event: { record: Record; onlyView: boolean }) {\r\n this.loader = false;\r\n this.selectedRecord = null;\r\n\r\n this.onlyView = event.onlyView;\r\n\r\n this.outCompileConfigurations.showBackButton = false;\r\n this.outCompileConfigurations.showSaveButton = !event.onlyView;\r\n this.outCompileConfigurations.showTitle = false;\r\n\r\n if (event != null) {\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByIDEndPoint\r\n ) {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: event.record.EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: event.record.Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: event.record.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.selectedRecord = JSON.parse(res.SerializedValues);\r\n this.selectedRecord.ID = res.ID;\r\n this.selectedRecord.EntID = res.EntID;\r\n this.selectedRecord.userID = res.userID;\r\n this.selectedRecord.Version = res.Version;\r\n\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n );\r\n } else {\r\n this.selectedRecord = JSON.parse(JSON.stringify(event.record));\r\n this.loader = true;\r\n }\r\n } else {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.selectedRecord = null;\r\n this.onlyView = false;\r\n this.loader = true;\r\n },\r\n (err) => { }\r\n );\r\n\r\n // this.selectedRecord = null;\r\n // this.onlyView = false;\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n }\r\n }\r\n\r\n\r\n openAddPopup() {\r\n const dynamicModuleParams: Array<EndPointDataParams> = new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.popupLoader = true;\r\n\r\n this.openAddDialogRef = this.dialog.open(this.openAddDialog, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n minWidth: \"32rem\",\r\n minHeight: \"100px\",\r\n });\r\n\r\n },\r\n (err) => {\r\n console.error(\"error RunEndPointCall\", err);\r\n }\r\n );\r\n }\r\n\r\n openGraphs() {\r\n \r\n this.openGraphDialogRef = this.dialog.open(this.openGraphDialog, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n minWidth: \"80vw\",\r\n minHeight: \"70vh\",\r\n maxHeight: \"100vh\"\r\n });\r\n // this.router.navigate(['dynamic-module-graphs/' + this.formID + '/' + this.userID]);\r\n }\r\n\r\n closeGraphs() {\r\n this.openGraphDialogRef.close()\r\n }\r\n \r\n onAddSaveRecord(record: Record) {\r\n if (this.openAddDialogRef != null) { this.openAddDialogRef.close(); }\r\n this.getRecordsByFormID();\r\n this.saveRecordEvent.emit(record);\r\n }\r\n\r\n onAddAfterSaveRecord(record: Record) {\r\n if (this.openAddDialogRef != null) { this.openAddDialogRef.close(); }\r\n this.getRecordsByFormID();\r\n this.saveRecordEvent.emit(record);\r\n }\r\n\r\n\r\n}\r\n\r\n","<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle\">Elenco {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion [hideToggle]=\"test\" [multi]=\"true\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header\r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title>\r\n {{ form.Name }} v.{{ panel.record.Version }} - {{ panel.record.AnswerDate | date : \"EEEE, d MMMM y, H:mm:ss\" }}\r\n </mat-panel-title>\r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n <lib-single-record\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- DIALOG RECIPIENTS EMAIL PER FIRMA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [additionalParams]=\"compileConfigurations.additionalParams\"\r\n\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n\r\n<!-- DIALOG RECIPIENTS EMAIL PER FIRMA -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>","import { Component, OnInit } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { SpinnerService } from '../../../services/spinner.service';\r\n\r\n@Component({\r\n selector: 'eqp-dynamic-module-spinner',\r\n templateUrl: './spinner.component.html',\r\n styleUrls: ['./spinner.component.scss']\r\n})\r\nexport class SpinnerComponent implements OnInit {\r\n\r\n isLoading: Subject<boolean> = this.spinnerService.isLoading;\r\n\r\n constructor(private spinnerService: SpinnerService) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","<div class=\"eqp-splash-screen\" *ngIf=\"isLoading | async\">\r\n <div id=\"loader\"></div>\r\n</div>","import { Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';\r\nimport { DynamicModuleRepairConfig } from '../../../../models/dynamicModuleRepairConfig.model';\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../../models/endPointConfiguration.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\n\r\n@Component({\r\n selector: 'repair-form-fields',\r\n templateUrl: 'repair-form-fields.component.html',\r\n styleUrls: ['./repair-form-fields.component.scss']\r\n})\r\nexport class RepairFormFieldsComponent implements OnInit {\r\n\r\n @Input() configurations: DynamicModuleRepairConfig\r\n @Input(\"formID\") formID: string;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n // @Input() FormJSON: string;\r\n @Output() onSaveJson: EventEmitter<string> = new EventEmitter<string>();\r\n @ViewChild('formJson', { static: false }) formulaTextArea: ElementRef<HTMLTextAreaElement>;\r\n constructor(private utilityHelperService: UtilityHelperService) { }\r\n\r\n ngOnInit(): void {\r\n this.getFormByID();\r\n }\r\n printTheJSONInPrettyFormat() {\r\n var badJSON = this.configurations.FormJSON;\r\n var parseJSON = JSON.parse(badJSON);\r\n this.configurations.FormJSON = JSON.stringify(parseJSON, undefined, 4);\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.configurations.FormJSON = JSON.stringify(res.Fields);\r\n },\r\n (err) => {}\r\n );\r\n}\r\n\r\n saveJson(){\r\n this.onSaveJson.emit(this.configurations.FormJSON);\r\n }\r\n}\r\n","<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea name=\"formJson\" #formJson type=\"textarea\" id=\"formJson\" rows=\"50\" style=\"width: 100%\"\r\n [(ngModel)]=\"configurations.FormJSON\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <button (click)=\"printTheJSONInPrettyFormat()\">Formatta Json</button>\r\n <button class=\"mr-2 save \" mat-raised-button color=\"primary\" (click)=\"saveJson()\" type=\"button\">\r\n Salva\r\n</button>\r\n</div>\r\n\r\n","import { FieldTypeEnum } from \"./baseField.model\";\r\nimport { LogicOperatorBoolean, LogicOperatorDate, LogicOperatorListValue, LogicOperatorNumeric, LogicOperatorText } from \"./logicOperator.model\";\r\n\r\nexport class Statistic{\r\n fieldtype:FieldTypeEnum;\r\n key: string;\r\n value: string;\r\n logicoperator:LogicOperatorBoolean | LogicOperatorListValue | LogicOperatorNumeric | LogicOperatorText | LogicOperatorDate\r\n}\r\n\r\nexport class FilterStatistic {\r\n Statistics: Array<Statistic> = new Array<Statistic>();\r\n PrefilterParams: any;\r\n AdditionalParams: any;\r\n}","export enum LogicOperatorNumeric {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \">\" = 5,\r\n \">=\" = 6,\r\n \"<\" = 7,\r\n \"<=\" = 8,\r\n}\r\n\r\nexport enum LogicOperatorDate {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \">\" = 5,\r\n \">=\" = 6,\r\n \"<\" = 7,\r\n \"<=\" = 8,\r\n}\r\n\r\nexport enum LogicOperatorText {\r\n \"=\" = 1,\r\n \"!=\" = 2,\r\n \"LIKE\" = 3,\r\n \"NOT LIKE\" = 4,\r\n}\r\n\r\nexport enum LogicOperatorBoolean {\r\n \"Si\" = 9,\r\n \"No\" = 10\r\n}\r\n\r\nexport enum LogicOperatorListValue {\r\n \"=\" = 1,\r\n \"!=\" = 2\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { VoiceRecognitionService } from '../../../../../services/voice-recognition.service';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'text-filter-template',\r\n templateUrl: './text-filter-template.component.html',\r\n styleUrls: ['./text-filter-template.component.scss']\r\n})\r\nexport class TextFilterTemplateComponent {\r\n\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false;\r\n\r\n constructor(public voiceservice: VoiceRecognitionService) {\r\n this.voiceservice.init();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ttsClick() {\r\n //Gestione del bottone icona del microfono con riempimennto del campo in real time\r\n if (!this.isStillRecoginze) {\r\n this.newtext = '';\r\n this.isStillRecoginze = this.voiceservice.start() === true ? true : false;\r\n this.subscription = this.source.subscribe(val => {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == undefined) {\r\n this.record[this.field.Name] = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n }\r\n else {\r\n this.newtext = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n if (this.newtext != undefined)\r\n this.updateRTVoiceField();\r\n }\r\n });\r\n }\r\n else {\r\n this.isStillRecoginze = this.voiceservice.stop() === false ? false : true;\r\n this.subscription.unsubscribe();\r\n this.updateVoiceField();\r\n }\r\n }\r\n\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n updateRTVoiceField() {\r\n this.record[this.field.Name] = this.voiceservice.text + this.newtext;\r\n this.newtext = '';\r\n }\r\n\r\n updateVoiceField() {\r\n this.newtext = '';\r\n this.record[this.field.Name] = this.voiceservice.text;\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput [type]=\"getInputType()\" [formControlName]=\"field.Name\" [readonly]=\"false\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onFilterChange()\">\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched\">\r\n Min. Caratteri: {{field.MinLenght}} - Max. Caratteri: {{field.MaxLenght}} \r\n </mat-error>\r\n <mat-icon [hidden]=\"!field.Microphone\" (click)=\"ttsClick()\" matSuffix style=\"cursor: pointer;\" [color]=\"!isStillRecoginze ? '' : 'warn'\">keyboard_voice</mat-icon> \r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorText\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { EqpNumericInputMode, NumericMaskConfig } from '@eqproject/eqp-numeric';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { NumericField } from '../../../../../models/fields/numericField.model';\r\nimport { LogicOperatorNumeric } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'numeric-filter-template',\r\n templateUrl: './numeric-filter-template.component.html',\r\n styleUrls: ['./numeric-filter-template.component.scss']\r\n})\r\nexport class NumericFilterTemplateComponent implements OnInit {\r\n\r\n @Input() field: NumericField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n validatorsArray: any[] = [];\r\n eqpNumericOptions: Partial<NumericMaskConfig> = {};\r\n logicOperatorNumeric = LogicOperatorNumeric;\r\n selectedLogicOperator: LogicOperatorNumeric;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureEqpNumericOptions();\r\n this.configureControllers();\r\n this.initStyles();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: (this.record[this.field.Name] / (Math.pow(10,this.field.DecimalPrecision))).toFixed(this.field.DecimalPrecision).toString(),\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\nprivate configureEqpNumericOptions() {\r\n\r\n this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n this.eqpNumericOptions.allowNegative=true;\r\n if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n else\r\n this.eqpNumericOptions.decimal=\".\";\r\n if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n if(this.field.IsInteger== false){\r\n if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n else { this.eqpNumericOptions.precision = 2; }\r\n }else{\r\n this.eqpNumericOptions.precision = 0;\r\n }\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n this.validatorsArray = [];\r\n if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput eqpNumericMask [formControlName]=\"field.Name\" [readonly]=\"false\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (ngModelChange)=\"onFilterChange()\" />\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched\">\r\n Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorNumeric\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { LogicOperatorBoolean } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { BooleanField } from '../../../../../models/fields/booleanField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\n@Component({\r\n selector: 'boolean-filter-template',\r\n templateUrl: './boolean-filter-template.component.html',\r\n styleUrls: ['./boolean-filter-template.component.scss']\r\n})\r\nexport class BooleanFilterTemplateComponent {\r\n @Input() field: BooleanField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n validatorsArray: any[] = [];\r\n logicOperatorBoolean = LogicOperatorBoolean;\r\n selectedLogicOperator: LogicOperatorBoolean;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureControllers();\r\n this.initStyles();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && this.selectedLogicOperator == null){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name].toString(),\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\n// private configureEqpNumericOptions() {\r\n\r\n// this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \" \"+this.field.MeasureUnit+\" \" : \"\";\r\n// this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n// this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n// this.eqpNumericOptions.allowNegative=true;\r\n// if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n// this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n// else\r\n// this.eqpNumericOptions.decimal=\".\";\r\n// if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n// this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n// if(this.field.IsInteger== false){\r\n// if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n// else { this.eqpNumericOptions.precision = 2; }\r\n// }else{\r\n// this.eqpNumericOptions.precision = 0;\r\n// }\r\n// }\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n this.validatorsArray = [];\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput [formControlName]=\"field.Name\" [disabled] [readonly]=\"true\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" \r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorBoolean\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { PickerModeEnum } from '@eqproject/eqp-datetimepicker';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../../models/fields/dateField.model';\r\nimport { LogicOperatorDate } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'date-filter-template',\r\n templateUrl: './date-filter-template.component.html',\r\n styleUrls: ['./date-filter-template.component.scss']\r\n})\r\nexport class DateFilterTemplateComponent {\r\n\r\n @Input() field: DateField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n pickerMode: PickerModeEnum;\r\n\r\n logicOperatorNumeric = LogicOperatorDate;\r\n selectedLogicOperator: LogicOperatorDate;\r\n activeCondition: boolean = false; \r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.setTimeType();\r\n }\r\n\r\n /**\r\n * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n * imposta la visualizzazione corretta del componente eqp-datetimepicker.\r\n */\r\n private setTimeType() {\r\n switch (this.field.IsOnlyDate) {\r\n case DateTimeTypeEnum[\"Solo data\"]:\r\n this.pickerMode = PickerModeEnum.DATE;\r\n break;\r\n case DateTimeTypeEnum[\"Solo orario\"]:\r\n this.pickerMode = PickerModeEnum.TIME;\r\n break;\r\n case DateTimeTypeEnum[\"Data e ora\"]:\r\n this.pickerMode = PickerModeEnum.DATETIME;\r\n break;\r\n }\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n} \r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <eqp-datetimepicker [placeholder]=\"field.Description\" [UTCDate]=\"true\" [pickerMode]=\"pickerMode\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [isRequired]=\"false\" [disabled]=\"field.FormFormGroup.disabled\" [(ngModelInput)]=\"record[field.Name]\"\r\n (ngModelInputChange)=\"onFilterChange()\" [customDateFormat]=\"field.DateFormat ? field.DateFormat : null\">\r\n </eqp-datetimepicker>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorNumeric\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { LogicOperatorListValue } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { ListPresentationEnum, ListValueField } from '../../../../../models/fields/listValueField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\n@Component({\r\n selector: 'list-value-filter-template',\r\n templateUrl: './list-value-filter-template.component.html',\r\n styleUrls: ['./list-value-filter-template.component.scss']\r\n})\r\nexport class ListValueFilterTemplateComponent {\r\n @Input() field: ListValueField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n validatorsArray: any[] = [];\r\n logicOperatorListValue = LogicOperatorListValue;\r\n selectedLogicOperator: LogicOperatorListValue;\r\n activeCondition: boolean = false;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\narrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n this.configureControllers();\r\n this.initStyles();\r\n this.setArrayData();\r\n}\r\n\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n initStyles() {\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && this.selectedLogicOperator == null){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\n private configureControllers() {\r\n this.validatorsArray = [];\r\n this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n }\r\n\r\n /**\r\n * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.\r\n */\r\n private setArrayData() {\r\n if (this.field.PresentationMode != ListPresentationEnum.Immagini) {\r\n this.prepareValuePairs();\r\n if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n } else {\r\n Object.keys(this.field.ValuePairs).forEach\r\n (k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n }\r\n\r\n } else {\r\n this.field.ButtonImageList.forEach(i => { this.createArrayDataElement(i.ButtonKey, i.ButtonValue, 'data:' + i.FileContentType + ';base64,' + i.FileDataBase64); });\r\n }\r\n }\r\n\r\n prepareValuePairs() {\r\n if (this.field.Formula) {\r\n this.field.ValuePairs = {};\r\n const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n // dobbiamo ottenere un dizionario di quei valori\r\n this.field.ValuePairs = this.stringToValuePairs(temp);\r\n\r\n //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n // va bene così\r\n\r\n } else if (this.field.ValueString != null && this.field.ValueString != \"\") {\r\n // va presa la strigna e rimappata nel diario\r\n this.field.ValuePairs = this.stringToValuePairs(this.field.ValueString);\r\n\r\n }\r\n }\r\n\r\n private stringToValuePairs(valueString: string) {\r\n const valuePairs: { [key: string]: string } = {};\r\n const keyvals = valueString.split(\";\");\r\n keyvals.forEach((x) => {\r\n const parts = x.split(\"|\");\r\n if(parts.length == 1){\r\n valuePairs[parts[0].trim()] = parts[0].trim();\r\n } else if (parts.length > 1){\r\n valuePairs[parts[0].trim()] = parts[1].trim();\r\n }\r\n })\r\n return valuePairs;\r\n }\r\n \r\n private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n let isOptionSelected: boolean;\r\n if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n } else {\r\n isOptionSelected = this.record[this.field.Name] === value;\r\n }\r\n this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n }\r\n\r\n}\r\n","<div class=\"row\">\r\n <div class=\"col-md-9 valueCol\">\r\n <eqp-select [ngStyle]=\"FieldstyleObj\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"true\" [arrayValueProperty]=\"'Key'\"\r\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n [includeFullObject]=\"false\" [isRequired]=\"false\" [isDisabled]=\"false\"\r\n [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"false\"\r\n (ngModelInputChange)=\"onFilterChange()\">\r\n </eqp-select>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorListValue\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { VoiceRecognitionService } from '../../../../../services/voice-recognition.service';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'textarea-filter-template',\r\n templateUrl: './textarea-filter-template.component.html',\r\n styleUrls: ['./textarea-filter-template.component.scss']\r\n})\r\nexport class TextareaFilterTemplateComponent {\r\n\r\n //Variabili per l'input vocale\r\n isStillRecoginze = false;\r\n source = interval(200);\r\n newtext: string;\r\n subscription: Subscription;\r\n //variabili esterne per l'input dei campi\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n STT:boolean =true;\r\n //variabili per gestire il css della label e del field\r\n FieldstyleObj: any;\r\n LabelstyleObj: any;\r\n\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n InputMaskEnum = TextMaskEnum;\r\n\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false;\r\n\r\n constructor(public voiceservice: VoiceRecognitionService) {\r\n this.voiceservice.init();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initStyles();\r\n }\r\n initStyles() {\r\n //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined) \r\n this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n ttsClick() {\r\n //Gestione del bottone icona del microfono con riempimennto del campo in real time\r\n if (!this.isStillRecoginze) {\r\n this.newtext = '';\r\n this.isStillRecoginze = this.voiceservice.start() === true ? true : false;\r\n this.subscription = this.source.subscribe(val => {\r\n\r\n if (this.record[this.field.Name] == null || this.record[this.field.Name] == undefined) {\r\n this.record[this.field.Name] = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n }\r\n else {\r\n this.newtext = this.voiceservice.transcript_arr[this.voiceservice.transcript_arr.length - 1];\r\n if (this.newtext != undefined)\r\n this.updateRTVoiceField();\r\n }\r\n });\r\n }\r\n else {\r\n this.isStillRecoginze = this.voiceservice.stop() === false ? false : true;\r\n this.subscription.unsubscribe();\r\n this.updateVoiceField();\r\n }\r\n }\r\n\r\n getInputType() {\r\n switch (this.field.TextMask) {\r\n case TextMaskEnum.Email:\r\n return 'email';\r\n case TextMaskEnum.Password:\r\n return 'password';\r\n case TextMaskEnum.Telefono:\r\n return 'tel';\r\n case TextMaskEnum.Url:\r\n return 'url'\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n updateRTVoiceField() {\r\n this.record[this.field.Name] = this.voiceservice.text + this.newtext;\r\n this.newtext = '';\r\n }\r\n\r\n updateVoiceField() {\r\n this.newtext = '';\r\n this.record[this.field.Name] = this.voiceservice.text;\r\n }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n}\r\n\r\n}\r\n","<div class=\"row textareaFilterTemplate\">\r\n <div class=\"col-md-9 valueCol\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n <textarea [ngStyle]=\"FieldstyleObj\" matInput [type]=\"getInputType()\" [formControlName]=\"field.Name\" [readonly]=\"false\"\r\n [required]=\"false\" [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onFilterChange()\"></textarea>\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched\">\r\n Min. Caratteri: {{field.MinLenght}} - Max. Caratteri: {{field.MaxLenght}} \r\n </mat-error>\r\n <mat-icon [hidden]=\"!field.Microphone\" (click)=\"ttsClick()\" matSuffix style=\"cursor: pointer;\" [color]=\"!isStillRecoginze ? '' : 'warn'\">keyboard_voice</mat-icon> \r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-3 operatorCol\">\r\n <eqp-select [enumData]=\"logicOperatorText\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></eqp-select>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n selector: 'attachment-filter-template',\r\n templateUrl: './attachment-filter-template.component.html',\r\n styleUrls: ['./attachment-filter-template.component.scss']\r\n})\r\nexport class AttachmentFilterTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n onFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n selector: 'image-filter-template',\r\n templateUrl: './image-filter-template.component.html',\r\n styleUrls: ['./image-filter-template.component.scss']\r\n})\r\nexport class ImageFilterTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n onFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n selector: 'list-form-record-filter-template',\r\n templateUrl: './list-form-record-filter-template.component.html',\r\n styleUrls: ['./list-form-record-filter-template.component.scss']\r\n})\r\nexport class ListFormRecordFilterTemplateComponent {\r\n\r\n @Input() field: TextField;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n logicOperatorText = LogicOperatorText;\r\n selectedLogicOperator: LogicOperatorText;\r\n activeCondition: boolean = false; \r\n\r\n onFilterChange() {\r\n if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n this.activeCondition = true;\r\n this.filterChange.emit(this.generateCondition(\"active\"));\r\n }\r\n if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n this.activeCondition = false;\r\n this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n }\r\n }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n generateCondition(mode){\r\n let output:Statistic = new Statistic();\r\n if (mode == \"active\"){\r\n output = {\r\n key: this.field.Name,\r\n value: this.record[this.field.Name],\r\n logicoperator: this.selectedLogicOperator,\r\n fieldtype: this.field.FieldType\r\n };\r\n } else {\r\n output = {\r\n key: this.field.Name,\r\n value: null,\r\n logicoperator: null,\r\n fieldtype: null\r\n };\r\n }\r\n\r\n return output;\r\n } \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../../form-records/list-form-record/list-form-record.component';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { Statistic } from '../../../../models/statistic.model';\r\n\r\n@Component({\r\n selector: 'dynamic-module-filter-fix',\r\n templateUrl: './dynamic-module-filter-fix.component.html',\r\n styleUrls: ['./dynamic-module-filter-fix.component.scss']\r\n})\r\nexport class DynamicModuleFilterFixComponent {\r\n\r\n @Input() field: BaseField;\r\n @Input() form: Form;\r\n @Input() record: Record;\r\n @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n\r\n configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n selectedInnerForm: Form;\r\n selectedInnerFormRecord: Record;\r\n indexInnerFormRecord: number;\r\n onlyViewInnerFormRecord: boolean = false;\r\n dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n constructor(\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.configList.values = this.record[this.field.Name]\r\n this.configList.showTitle = true;\r\n this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onFilterChange(ev) {\r\n this.filterChange.emit(ev);\r\n }\r\n\r\n /**\r\n * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n * @returns Restituisce un oggetto di tipo Form.\r\n */\r\n getInnerFormFromField(field: BaseField): Form {\r\n if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n return this.form.InnerForms.find(f => f.Name == field.Label);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","\r\n<text-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</text-filter-template>\r\n\r\n<textarea-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</textarea-filter-template>\r\n\r\n<boolean-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</boolean-filter-template>\r\n\r\n<date-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</date-filter-template>\r\n\r\n<numeric-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</numeric-filter-template>\r\n\r\n<list-value-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</list-value-filter-template>\r\n\r\n <attachment-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</attachment-filter-template>\r\n\r\n<image-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</image-filter-template>\r\n\r\n<list-form-record-filter-template #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\">\r\n</list-form-record-filter-template>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { DynamicModuleCompileConfig } from '../../../../models/dynamicModuleCompileConfig.model';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { Form, FormScalarTypeEnum } from '../../../../models/form.model';\r\nimport { DynRecord, Record, RecordButton } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from './../../../../models/endPointConfiguration.model';\r\nimport { ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { FilterStatistic, Statistic } from '../../../../models/statistic.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { ConfigColumn, CustomExportType, ExportEqpTable, TypeColumn } from '@eqproject/eqp-table';\r\nimport { ExportType } from 'mat-table-exporter';\r\nimport { DynamicModuleFilterResultViewModeEnum } from '../../../../models/dynamicModuleFilterResultViewModeEnum.model';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n\r\n@Component({\r\n selector: 'filter-form-statistic',\r\n templateUrl: './filter-form-statistic.component.html',\r\n styleUrls: ['./filter-form-statistic.component.scss']\r\n})\r\nexport class FilterFormStatisticComponent {\r\n \r\n @Input() configurations: DynamicModuleCompileConfig;\r\n @Input() endPointConfiguration: EndPointConfiguration;\r\n @Input() userID: string;\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n\r\n @Input() formID: string = null; // preview\r\n @Input() form: Form = null; // preview config\r\n @Input() record: Record | string = null; // edit\r\n @Input() onlyView: boolean = false;\r\n @Input() defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault(false,true,false,false,false);\r\n @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum = DynamicModuleFilterResultViewModeEnum.INTERNAL_EQPTABLE;\r\n\r\n //Pagination\r\n pageSize: number = 100;\r\n pageIndex: number = 0;\r\n pageLength: Array<number> = [5,10,25,100]\r\n \r\n exportEqpTable: ExportEqpTable = new ExportEqpTable();\r\n\r\n showTitle = true;\r\n showSaveButton = true;\r\n showBackButton = true;\r\n showNewSearchButton = true;\r\n loader: boolean = false;\r\n showListView: boolean = false;\r\n filterResults: Array<DynRecord> = null;\r\n filterEqpTableResults: Array<any> = new Array<any>();\r\n listViewConfigurations: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n columns: Array<ConfigColumn> = new Array<ConfigColumn>();\r\n\r\n formForm: UntypedFormGroup;\r\n fieldGroups: { [key: string]: Array<BaseField> } = {};\r\n FormScalarTypeEnum = FormScalarTypeEnum;\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterSaveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterFilter: EventEmitter<Array<DynRecord>> = new EventEmitter<Array<DynRecord>>();\r\n\r\n @ViewChildren(\"fieldTemplate\")\r\n fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n filters: FilterStatistic = new FilterStatistic();\r\n filterResultViewModes = DynamicModuleFilterResultViewModeEnum;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n public utilityService: UtilityHelperService,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n // add può funzionare anche come modifica e come preview\r\n // in add abbiamo in input l'ID del Form\r\n // in modifica abbiamo in input l'ID del Record\r\n // in preview abbiamo in input il Form(caso configurator) o l'ID del modulo on onlyView impostato a true\r\n this.endPointConfiguration.Records.ApplyFilter.Url = this.endPointConfiguration.Records.ApplyFilter.Url + \"/\" + this.formID;\r\n this.showTitle = this.configurations.showTitle;\r\n this.showSaveButton = this.configurations.showSaveButton;\r\n this.showBackButton = this.configurations.showBackButton;\r\n this.showNewSearchButton = this.configurations.showNewSearchButton;\r\n\r\n this.listViewConfigurations.showTitle = this.configurations.showTitle;\r\n this.listViewConfigurations.userID = this.configurations.userID;\r\n this.listViewConfigurations.externalButtons = null;\r\n this.listViewConfigurations.values = null;\r\n this.listViewConfigurations.defaultListActions = this.defaultListActions;\r\n\r\n if(this.record == null){\r\n this.previewOrNewResponseRecord();\r\n } else {\r\n this.editResponseRecord();\r\n }\r\n\r\n // l'inizializzazione termina con il recupero del record o con l'inizializzazione del form vuoto\r\n \r\n this.cdr.detectChanges();\r\n }\r\n\r\n \r\n configureColumns(){\r\n\r\n this.columns = [];\r\n this.filterEqpTableResults = new Array<any>();\r\n \r\n if (this.filterResults != null && this.filterResults.length > 0){\r\n \r\n // Crea campi e contenuti tabella\r\n this.filterResults.forEach((result,index) => {\r\n var object = JSON.parse(result.SerializedValues);\r\n if (index == 0){\r\n Object.keys(object).forEach((element,index2) => {\r\n if (index2 < Object.keys(object).length - 6){\r\n this.columns.push({ key: element, display: element, styles: { flex: \"0 0 10%\" }},);\r\n }\r\n });\r\n this.columns.push({ key: \"AnswerDate\", display: \"AnswerDate\", type: TypeColumn.Date, format: \"dd/MM/yyyy HH:mm:ss\", value: () => { return result.AnswerDate; }, styles: { flex: \"0 0 10%\" }},);\r\n this.columns.push({ key: \"Version\", display: \"Version\", value: () => { return result.Version; }, styles: { flex: \"0 0 10%\" }},);\r\n \r\n }\r\n this.filterEqpTableResults.push(object);\r\n });\r\n }\r\n\r\n }\r\n\r\n configureExport(){\r\n this.exportEqpTable.buttonText = \"Scarica\"\r\n this.exportEqpTable.exportFileType = CustomExportType.XLSX;\r\n this.exportEqpTable.exportFileName = \"DynamicModule_\"+this.form.Code;\r\n this.exportEqpTable.buttonIcon = \"cloud_download\";\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onFilterChange(ev:Statistic) {\r\n this.filters.Statistics = this.filters.Statistics.filter(x => x.key != ev.key);\r\n if (ev.logicoperator != null){\r\n this.filters.Statistics.push(ev); \r\n }\r\n }\r\n\r\n ApplyFilter(){\r\n this.filters.AdditionalParams = this.configurations.additionalParams;\r\n this.filters.PrefilterParams = this.configurations.prefilterParams;\r\n\r\n var filterParams = [\r\n {\r\n ParamName: \"filter\",\r\n ParamValue: this.filters,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n }\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.ApplyFilter,\r\n filterParams,\r\n (res: Array<DynRecord>) => {\r\n \r\n this.filterResults = res;\r\n this.configureExport();\r\n this.configureColumns();\r\n this.showListView = true;\r\n this.afterFilter.emit(res);\r\n }\r\n );\r\n }\r\n\r\n reset(){\r\n\r\n // Resetto i campi del record\r\n Object.keys(this.record).forEach(key => {\r\n this.record[key] = null;\r\n });\r\n\r\n this.filterResults = null;\r\n this.filters.Statistics = [];\r\n this.showListView = false;\r\n }\r\n\r\n previewOrNewResponseRecord(){ \r\n this.record = new Record();\r\n if(this.onlyView == true){\r\n // modalità preview\r\n if(this.form != null){\r\n // preview per il configurator\r\n this.fieldsConfig();\r\n } else if(this.formID != null){\r\n // preview per admin\r\n this.getFormByID() // dentro chiama fieldsConfig\r\n }\r\n } else {\r\n // aggiugni nuovo\r\n this.fieldsConfig();\r\n }\r\n }\r\n editResponseRecord(){\r\n // modiiltà modifica\r\n if (typeof this.record === \"string\") {\r\n // allora è un ID\r\n this.getRecordByID();\r\n } else {\r\n // il record viene passato come tale\r\n // (<Record>this.record).EntID = \"3\";\r\n // (<Record>this.record).Version;\r\n this.getFormByIDandVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n */\r\n saveOrExitForm(exit: boolean) {\r\n if (exit) {\r\n // this.saveRecordEvent.emit(null);\r\n this.onSaveRecord(null);\r\n } else {\r\n // this.saveRecordEvent.emit(this.record);\r\n this.onSaveRecord((<Record>this.record));\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare il record aggiunto o modificato.\r\n * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n * nel body della chiamata, altrimenti scatena l'evento \"saveRecord\".\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onSaveRecord(event: Record) {\r\n if (\r\n event != null &&\r\n this.endPointConfiguration != null &&\r\n this.endPointConfiguration.Records.SaveEndPoint\r\n ) {\r\n var dynRec: DynRecord = new DynRecord();\r\n dynRec.ID = event.ID ?? null;\r\n dynRec.EntID = this.form.ID;\r\n dynRec.Version = this.form.Version;\r\n dynRec.userID = this.userID;\r\n dynRec.Values = event ?? null;\r\n dynRec.HTMLreadableValues = this.createHTMLreadableValues(event);\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"Record\",\r\n ParamValue: dynRec,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.SaveEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n this.afterSaveRecordEvent.emit(event);\r\n }\r\n );\r\n } else {\r\n this.saveRecordEvent.emit(event);\r\n }\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: id,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n this.fieldsConfig();\r\n },\r\n (err) => {}\r\n );\r\n }\r\n\r\n // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n getRecordByID() {\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.record,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.record = new Record();\r\n\r\n (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n this.record.ID = res.ID;\r\n this.record.EntID = res.EntID;\r\n this.record.userID = res.userID;\r\n this.record.Version = res.Version;\r\n this.record.Values = JSON.parse(res.SerializedValues);\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n // this.loader = true;\r\n this.getFormByIDandVersion();\r\n }\r\n );\r\n }\r\n getFormByIDandVersion() {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: (<Record>this.record).EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: (<Record>this.record).Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n GlobalService.debugLog(\"getFormByIDandVersion - this record\", <Record>this.record)\r\n this.utilityService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n\r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n \r\n fieldsConfig(){ \r\n this.createRecordProperties();\r\n this.reorderFormFields();\r\n this.createFormGroup();\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n this.createFieldGroups();\r\n }\r\n this.loader = true;\r\n }\r\n\r\n /**\r\n * Metodo per creare nell'oggetto Record le proprietà mancanti rispetto ai campi che compongono la form.\r\n */\r\n private createRecordProperties() {\r\n const recordProperties: Array<string> = Object.keys(this.record);\r\n this.form.Fields.forEach((field) => {\r\n if (!recordProperties.find((p) => p === field.Name)) {\r\n this.record[field.Name] = null;\r\n }\r\n });\r\n if (this.form.InnerForms && this.form.InnerForms.length > 0) {\r\n this.form.InnerForms.forEach((form) => {\r\n const arrayName: string = form.Name.split(\" \").join(\"_\");\r\n if (!recordProperties.find((p) => p === arrayName)) {\r\n this.record[arrayName] = [];\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per riordinare i campi che compongono la form.\r\n */\r\n private reorderFormFields() {\r\n if (this.form.Fields && this.form.Fields.length > 0) {\r\n this.form.Fields.sort((a, b) =>\r\n a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0 );\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createFormGroup() {\r\n this.formForm = this.utilityService.CreateFormFormGroup(\r\n this.form.Fields,\r\n (<Record>this.record),\r\n this.onlyView\r\n );\r\n }\r\n\r\n /**\r\n * Metodo per creare i gruppi in cui raggruppare i campi della form in base\r\n * a come è stata configurata dall'utente.\r\n */\r\n private createFieldGroups() {\r\n this.form.FormFieldsGroups.sort((a, b) => a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0 )\r\n .map((g) => g.Name)\r\n .forEach((groupName) => {\r\n this.fieldGroups[groupName] = this.form.Fields.filter(\r\n (f) => f.FieldGroup == groupName\r\n );\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n /**\r\n * Metodo per creare il FormGroup che rappresenta la form.\r\n */\r\n private createHTMLreadableValues(record:Record) {\r\n GlobalService.debugLog(\"record\", record);\r\n GlobalService.debugLog(\"form\", this.form);\r\n let outputValuesArray: Array<any> = this.getResponseValues(record, this.form);\r\n GlobalService.debugLog(\"outputValuesArray\", outputValuesArray);\r\n \r\n let template: string = this.getResponseTemplate(this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n GlobalService.debugLog(\"template\", template);\r\n\r\n const regex = /##([\\w]+)##/g;\r\n return this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex); // oggetto che conterrà l'output elaborato \r\n\r\n }\r\n\r\n private getResponseValues(record: Record, form: Form ): Array<any> {\r\n let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n GlobalService.debugLog(\"(record).Values\", record);\r\n for (let fieldName in record) {\r\n try {\r\n // fieldName è il nome del campo\r\n // PREPARO VARIABILI VALORI CORRETTI\r\n let foundObject = form.Fields.find(\r\n (obj) => obj.Name === fieldName\r\n );\r\n GlobalService.debugLog(\"fieldName\", fieldName);\r\n GlobalService.debugLog(\"foundObject\", foundObject);\r\n // gestire caso fieldtype 8 [elenco generico]\r\n // fare un eval per popolare i valuePairs se è presente una formula\r\n // prendere la label corretta\r\n ////////////////////////////////////////////////////////////////////////////////\r\n if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) \r\n {\r\n if (foundObject.Formula) \r\n {\r\n // aggiungo a valuepairs i valori calcolati\r\n // (<ListValueField>foundObject).ValuePairs = {};\r\n var temp = UtilityHelperService.EvaluateFieldFormula(\r\n foundObject.Formula,\r\n record,\r\n null\r\n );\r\n GlobalService.debugLog(\"temp\", temp);\r\n for (let key2 in temp) {\r\n if (UtilityHelperService.isNumeric(temp[key2])) \r\n {\r\n (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n } else \r\n {\r\n (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n }\r\n }\r\n GlobalService.debugLog(\"(record).Values[fieldName]\", record[fieldName]);\r\n GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[record[fieldName]]\", (<ListValueField>foundObject).ValuePairs[record[fieldName]]);\r\n outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n }\r\n let inverted = {};\r\n GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>foundObject).ValuePairs);\r\n for (let key in (<ListValueField>foundObject).ValuePairs) \r\n { \r\n inverted[(<ListValueField>foundObject).ValuePairs[key]] = key; \r\n }\r\n (<ListValueField>foundObject).ValuePairs = inverted;\r\n outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n } else \r\n {\r\n GlobalService.debugLog(\"record[fieldName]\", record[fieldName]);\r\n outputValuesArray[fieldName] = record[fieldName];\r\n }\r\n ////////////////////////////////////////////////////////////////////////////////\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n GlobalService.debugLog(\"outputValuesArray 1\", outputValuesArray);\r\n // cancello i valori indefiniti o nulli\r\n for(const chiave in outputValuesArray){\r\n if(outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n outputValuesArray[chiave] = ''\r\n }\r\n return outputValuesArray;\r\n }\r\n\r\n private getResponseTemplate(form: Form): string {\r\n let template: string = \"\";\r\n // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n form.Fields.forEach((baseField: BaseField) => {\r\n template += '<span class=\"dynaform-question\" style=\"' + baseField.LabelstyleCSS + '\">' + baseField.Description + ':</span> <span class=\"dynaform-response\" style=\"' + baseField.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span> \\n <br> ';\r\n });\r\n // (attualmente non esiste il concetto di tempate di output)\r\n return template;\r\n }\r\n\r\n private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n return template.replace(regex, (match, group) => {\r\n return <string>outputValuesArray[group];\r\n });\r\n }\r\n\r\n}\r\n","<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice && !showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n <eqp-table \r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n \r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </eqp-table> \r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"!field.InListView\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n</ng-template>","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from \"@angular/core\";\r\nimport { Context } from \"../../../models/context.model\";\r\nimport { DynamicModuleCompileConfig } from \"../../../models/dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleConfig } from \"../../../models/dynamicModuleConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"../../../models/dynamicModuleGeneralConfig.model\";\r\nimport { DynamicModuleListConfig } from \"../../../models/dynamicModuleListConfig.model\";\r\nimport { DynamicModuleRepairConfig } from \"../../../models/dynamicModuleRepairConfig.model\";\r\nimport { DynamicModuleViewModeEnum } from \"../../../models/dynamicModuleViewModeEnum\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"../../../models/endPointConfiguration.model\";\r\nimport { Form, FormTypeEnum } from \"../../../models/form.model\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../models/record.model\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { FilterResultType } from \"@eqproject/eqp-filters\";\r\nimport { DynamicModuleFilterResultViewModeEnum } from \"../../../models/dynamicModuleFilterResultViewModeEnum.model\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\n\r\n@Component({\r\n selector: \"eqp-dynamic-module\",\r\n templateUrl: \"./eqp-dynamic-module.component.html\",\r\n styleUrls: [\"./eqp-dynamic-module.component.scss\"],\r\n})\r\nexport class EqpDynamicModuleComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() debugMode: boolean = false;\r\n\r\n // @Input() configurations: DynamicModuleConfig;\r\n @Input() configurations: DynamicModuleGeneralConfig;\r\n @Input() formID: string;\r\n @Input() starterViewMode: DynamicModuleViewModeEnum = DynamicModuleViewModeEnum.LIST;\r\n\r\n @Input() userID: string = \"0\";\r\n @Input() showTitle = true;\r\n @Input() showBackButton: boolean = true;\r\n @Input() showSaveButton = true;\r\n @Input() values: Array<Record> = null;\r\n @Input() FormJSON = \"\";\r\n @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n @Input() defaultListViewFunction: Function = null;\r\n @Input() defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault();\r\n @Input() onSaveBackToList = false;\r\n @Input() onBackTo: DynamicModuleViewModeEnum = null;\r\n @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum = DynamicModuleFilterResultViewModeEnum.INTERNAL_EQPTABLE;\r\n @Input() additionalParams: any = null;\r\n @Input() prefilterParams: any = null;\r\n @Input() showNewSearchButton: boolean = true;\r\n @Input() answerToDuplicateId: any;\r\n @Input() highlightFilter: any;\r\n\r\n context: Context = new Context();\r\n /**\r\n * Url del server da chiamare per recuperare, salvare o eliminare i record.\r\n * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n */\r\n baseServerUrl: string = null;\r\n\r\n /**\r\n * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n */\r\n userToken: string = null;\r\n\r\n /**\r\n * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n */\r\n endPointConfiguration: EndPointConfiguration = null;\r\n\r\n //@Input() form: Form = new Form();\r\n // defaultListActions: dynamicModuleListFormRecordActionsDefault = new dynamicModuleListFormRecordActionsDefault();\r\n // FormJSON: string = \"\";\r\n\r\n /**\r\n * Eventi emessi quando si salva, elimina o duplica un record\r\n * se non è stato specificato un endpoint da chiamare.\r\n */\r\n @Output() saveRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() deleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() SaveJSON: EventEmitter<string> = new EventEmitter<string>();\r\n @Output() afterFilter: EventEmitter<Array<DynRecord>> = new EventEmitter<Array<DynRecord>>();\r\n /**\r\n * Eventi emessi DOPO aver eseguito una chiamata al server per il salvataggio,\r\n * l'eliminazione o la duplicazione di un record all'endpoint specificato.\r\n */\r\n @Output() afterSaveRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n @Output() afterDeleteRecord: EventEmitter<Record> =\r\n new EventEmitter<Record>();\r\n\r\n form: Form = new Form();\r\n lastform: Form = new Form();\r\n FormTypeEnum = FormTypeEnum;\r\n dynamicModuleViewModeEnum = DynamicModuleViewModeEnum;\r\n selectedRecord: Record;\r\n onlyView: boolean;\r\n viewMode: DynamicModuleViewModeEnum;\r\n defaultViewMode: DynamicModuleViewModeEnum;\r\n\r\n dynamicModuleCompileConfig: DynamicModuleCompileConfig;\r\n dynamicModuleListConfig: DynamicModuleListConfig;\r\n dynamicModuleRepairConfig: DynamicModuleRepairConfig;\r\n loader: boolean = false;\r\n isDuplicate: boolean = false;\r\n\r\n constructor(private utilityHelperService: UtilityHelperService,\r\n private changeDetector: ChangeDetectorRef) {}\r\n\r\n async ngOnInit() {\r\n GlobalService.debugMode = this.debugMode;\r\n\r\n this.onBackTo = (this.onBackTo == null) ? this.starterViewMode : this.onBackTo;\r\n\r\n this.dynamicModuleCompileConfig = new DynamicModuleCompileConfig(\r\n this.showTitle,\r\n this.showSaveButton,\r\n this.showBackButton,\r\n this.userID,\r\n this.additionalParams,\r\n this.prefilterParams,\r\n this.showNewSearchButton\r\n );\r\n this.dynamicModuleListConfig = new DynamicModuleListConfig(\r\n this.showTitle,\r\n this.values,\r\n this.defaultListActions,\r\n this.userID\r\n );\r\n this.dynamicModuleRepairConfig = new DynamicModuleRepairConfig(\r\n this.FormJSON\r\n );\r\n\r\n this.context = this.configurations.context;\r\n this.baseServerUrl = this.configurations.baseServerUrl;\r\n this.userToken = this.configurations.userToken;\r\n this.endPointConfiguration = this.configurations.endPointConfiguration;\r\n //this.formID = this.configurations.dynamicModuleGeneralConfig.formID\r\n\r\n // this.viewMode = this.starterViewMode\r\n UtilityHelperService.SetContext(this.context);\r\n \r\n this.configureDefaultEndPoints();\r\n\r\n if (this.FormJSON == \"\") {\r\n // prende il form e imposta la viewmode corretta\r\n // await this.getFormByID();\r\n }\r\n\r\n // this.viewMode = this.starterViewMode;\r\n GlobalService.debugLog(\"dynamicModuleCompileConfig\", this.dynamicModuleCompileConfig)\r\n this.loader = true\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n if (this.starterViewMode == DynamicModuleViewModeEnum.COMPILE || this.starterViewMode == DynamicModuleViewModeEnum.FILTER) {\r\n // da vedere in getFormByID\r\n this.defaultViewMode = this.starterViewMode;\r\n setTimeout(() => this.onAddViewEditRecord(null), 1000);\r\n } else {\r\n this.viewMode = this.starterViewMode;\r\n this.loader = true;\r\n setTimeout(_ => { this.changeDetector.detectChanges() }, 0); // refresh ui\r\n\r\n }\r\n }\r\n\r\n // getFormByID(id: string = this.formID) {\r\n // const dynamicModuleParams: Array<EndPointDataParams> =\r\n // new Array<EndPointDataParams>();\r\n // dynamicModuleParams.push({\r\n // ParamName: \"id\",\r\n // ParamValue: id,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // });\r\n // this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Form) => {\r\n // this.lastform = res;\r\n // this.form = res;\r\n // // this.getRecordsByFormID();\r\n\r\n // // if (this.starterViewMode == DynamicModuleViewModeEnum.COMPILE) {\r\n // // this.onAddViewEditRecord(null);\r\n // // }\r\n // // this.viewMode = this.starterViewMode;\r\n // },\r\n // (err) => {}\r\n // );\r\n // }\r\n\r\n /**\r\n * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n * a cui si deve connettere e al token da passare per autenticarsi.\r\n * Se la proprietà \"baseServerUrl\" è null e non sono stati configurati i vari endpoint allora\r\n * non viene eseguita nessuna chiamata http per recuperare/salvare i dati.\r\n */\r\n configureDefaultEndPoints() {\r\n if (!this.endPointConfiguration && this.baseServerUrl) {\r\n this.endPointConfiguration =\r\n this.utilityHelperService.ConfigureDefaultEndPoints(\r\n this.baseServerUrl,\r\n this.userToken\r\n ); \r\n }\r\n }\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n * a partire dai quali vengono ricreati i Record usati nel client.\r\n */\r\n // async getRecordsByFormID() {\r\n // if (\r\n // this.endPointConfiguration &&\r\n // this.endPointConfiguration.Records &&\r\n // this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n // ) {\r\n // var dynamicModuleParams = [\r\n // {\r\n // ParamName: \"EntID\",\r\n // ParamValue: this.form.ID,\r\n // ParamType: ParamTypeEnum[\"Query param\"],\r\n // },\r\n // ];\r\n // await this.utilityHelperService.RunEndPointCall(\r\n // this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n // dynamicModuleParams,\r\n // (res: Array<DynRecord>) => {\r\n // this.dynamicModuleListConfig.values = new Array<Record>();\r\n // res.forEach((r) => {\r\n // var tmpRec: Record = new Record();\r\n // tmpRec = JSON.parse(r.SerializedValues);\r\n // tmpRec.ID = r.ID;\r\n // tmpRec.EntID = r.EntID;\r\n // tmpRec.Version = r.Version;\r\n // tmpRec.userID = r.userID;\r\n // tmpRec.AnswerDate = r.AnswerDate;\r\n // this.dynamicModuleListConfig.values.push(tmpRec);\r\n // });\r\n // }\r\n // );\r\n // }\r\n // }\r\n\r\n onGoBack(){\r\n this.viewMode = this.onBackTo ;\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n onAddViewEditRecord(event: { record: Record; onlyView: boolean }) {\r\n\r\n console.log(\"onAddViewEditRecord\", event);\r\n\r\n if (event != null) {\r\n this.onlyView = event.onlyView;\r\n GlobalService.debugLog(\"Version modulo\", event.record.Version)\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records &&\r\n this.endPointConfiguration.Records.GetByIDEndPoint\r\n ) {\r\n // preparo la versione corretta del form\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"EntID\",\r\n ParamValue: event.record.EntID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n {\r\n ParamName: \"Version\",\r\n ParamValue: event.record.Version,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n GlobalService.debugLog(\"query params\", dynamicModuleParams)\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n this.form = res;\r\n GlobalService.debugLog(\"RES\", res)\r\n // preparo i dati del record\r\n var dynamicRecordParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: event.record.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.GetByIDEndPoint,\r\n dynamicRecordParams,\r\n (res: DynRecord) => {\r\n this.selectedRecord = JSON.parse(res.SerializedValues);\r\n this.selectedRecord.ID = res.ID;\r\n this.selectedRecord.EntID = res.EntID;\r\n this.selectedRecord.userID = res.userID;\r\n this.selectedRecord.Version = res.Version;\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n }\r\n );\r\n }\r\n );\r\n } else {\r\n this.selectedRecord = JSON.parse(JSON.stringify(event.record));\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n }\r\n } else {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n console.log(\"success RunEndPointCall\",res,this.defaultViewMode);\r\n this.form = res;\r\n this.selectedRecord = null;\r\n\r\n if (this.answerToDuplicateId != null){\r\n this.selectedRecord = this.answerToDuplicateId;\r\n this.isDuplicate = true;\r\n }\r\n \r\n this.onlyView = false;\r\n this.viewMode = this.defaultViewMode;\r\n this.loader = true;\r\n },\r\n (err) => {\r\n console.log(\"error RunEndPointCall\",err);\r\n }\r\n );\r\n\r\n // this.selectedRecord = null;\r\n // this.onlyView = false;\r\n // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n * @param event Oggetto con due proprietà:\r\n * \"record\" = oggetto da modificare/visualizzare,\r\n * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n */\r\n onViewRecord(record: Record) {\r\n this.loader = false\r\n this.selectedRecord = record\r\n this.viewMode = DynamicModuleViewModeEnum.VIEW\r\n this.loader = true\r\n\r\n }\r\n\r\n // #region SAVE\r\n /**\r\n * Metodo per gestire il componente dopo che il record è stato aggiunto o modificato.\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onSaveRecord(event: Record) {\r\n // this.getRecordsByFormID();\r\n this.saveRecord.emit(event);\r\n // if (this.onSaveBackToList) {\r\n // this.viewMode = DynamicModuleViewModeEnum.LIST;\r\n // } else {\r\n // this.viewMode = DynamicModuleViewModeEnum.NONE;\r\n // }\r\n this.viewMode = this.onBackTo\r\n }\r\n\r\n /**\r\n * Metodo per gestire il componente dopo che e stata richiesta una aggiunto o una modifica del record nell' add-form-record.\r\n * @param event Oggetto di tipo Record da salvare.\r\n */\r\n onAfterSaveRecord(event: Record) {\r\n this.afterSaveRecord.emit(event);\r\n // if (this.onSaveBackToList) {\r\n // this.viewMode = DynamicModuleViewModeEnum.LIST;\r\n // } else {\r\n // this.viewMode = DynamicModuleViewModeEnum.NONE;\r\n // }\r\n this.viewMode = this.onBackTo\r\n }\r\n\r\n\r\n onSaveJson(record: string) {\r\n this.SaveJSON.emit(record);\r\n }\r\n // #endregion SAVE\r\n\r\n\r\n\r\n\r\n\r\n\r\n reload(){\r\n this.loader = false;\r\n setTimeout(\r\n () => this.loader = true,\r\n 50\r\n )\r\n }\r\n\r\n //#region DELETE \r\n /**\r\n * Metodo per eliminare un record dalla lista.\r\n * @param record Record da eliminare selezionato sulla eqp-table.\r\n */\r\n onDeleteRecord(record: Record) {\r\n if (\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Records.DeleteEndPoint\r\n ) {\r\n EqpDynamicModuleDialogService.Confirm(\r\n \"Eliminare il record selezionato?\",\r\n () => {\r\n var dynamicModuleParams = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: record.ID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Records.DeleteEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n // this.getRecordsByFormID();\r\n this.afterDeleteRecord.emit(record);\r\n // this.reloadTables()\r\n this.reload();\r\n }\r\n );\r\n },\r\n false,\r\n \"Richiesta conferma\"\r\n );\r\n } else {\r\n this.deleteRecord.emit(record);\r\n }\r\n }\r\n onAfterDeleteRecord(record: Record) {\r\n this.loader = false\r\n setTimeout(() => this.ngOnInit(), 50 )\r\n this.afterDeleteRecord.emit(record);\r\n }\r\n //#ednregion DELETE \r\n\r\n onAfterFilter(ev){\r\n this.afterFilter.emit(ev);\r\n }\r\n\r\n}\r\n","<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n [additionalParams]=\"dynamicModuleCompileConfig.additionalParams\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [highlightFilter]=\"highlightFilter\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n","import { NgModule } from '@angular/core';\r\n\r\n//Angular Material Components\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatGridListModule,\r\n MatCardModule,\r\n MatStepperModule,\r\n MatTabsModule,\r\n MatExpansionModule,\r\n MatButtonToggleModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule\r\n ],\r\n exports: [\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatListModule,\r\n MatGridListModule,\r\n MatCardModule,\r\n MatStepperModule,\r\n MatTabsModule,\r\n MatExpansionModule,\r\n MatButtonToggleModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule\r\n ],\r\n})\r\nexport class MaterialModule { }","import { TemplateRef } from \"@angular/core\";\r\nimport { MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Form } from \"./form.model\";\r\n\r\nexport class DynamicModuleConfiguratorSpecificConfig {\r\n form: Form = new Form();\r\n orgaID: string = null;\r\n UserID: number = 0;\r\n innerFormManagment: boolean = false;\r\n innerFormRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n constructor(\r\n form: Form = new Form(),\r\n orgaID: string = null,\r\n UserID: number = 0,\r\n innerFormManagment: boolean = false,\r\n innerFormRef: MatDialogRef<TemplateRef<any>> = null\r\n ) {\r\n this.form = form;\r\n this.orgaID = orgaID;\r\n this.UserID = UserID;\r\n this.innerFormManagment = innerFormManagment;\r\n this.innerFormRef = innerFormRef;\r\n }\r\n}\r\n","import { Context } from \"./context.model\";\r\nimport { DynamicModuleViewModeEnum } from \"./dynamicModuleViewModeEnum\";\r\nimport { EndPointConfiguration } from \"./endPointConfiguration.model\";\r\nimport { RecordButton } from \"./record.model\";\r\n\r\nexport class DynamicModuleGeneralConfig {\r\n /**\r\n * Url del server da chiamare per recuperare, salvare o eliminare i record.\r\n * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n */\r\n baseServerUrl: string = null;\r\n\r\n /**\r\n * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n */\r\n userToken: string = null;\r\n\r\n /**\r\n * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n */\r\n endPointConfiguration: EndPointConfiguration = null;\r\n\r\n context: Context = new Context();\r\n\r\n /**\r\n * imposta la modalità di lavoro del componente COMPILE/LIST/REPAIR\r\n */\r\n // starterViewMode: DynamicModuleViewModeEnum = DynamicModuleViewModeEnum.LIST;\r\n /**\r\n * Specifica del form da visualizzare DynaForms.ID\r\n */\r\n // formID: string;\r\n\r\n constructor( baseServerUrl: string = \"\", userToken: string = \"\", context: Context = new Context(), endPointConfiguration: EndPointConfiguration = null){\r\n this.baseServerUrl = baseServerUrl;\r\n this.userToken = userToken;\r\n this.context = context;\r\n this.endPointConfiguration = endPointConfiguration;\r\n }\r\n}\r\n","import { tick } from \"@angular/core/testing\";\r\nimport { DynamicModuleConfiguratorSpecificConfig } from \"./dynamicModuleConfiguratorSpecificConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"./dynamicModuleGeneralConfig.model\";\r\n\r\nexport class DynamicModuleConfiguratorConfig {\r\n dynamicModuleGeneralConfig: DynamicModuleGeneralConfig;\r\n dynamicModuleConfiguratorSpecificConfig: DynamicModuleConfiguratorSpecificConfig\r\n\r\n constructor( general: DynamicModuleGeneralConfig = new DynamicModuleGeneralConfig(), specific: DynamicModuleConfiguratorSpecificConfig = new DynamicModuleConfiguratorSpecificConfig()) {\r\n this.dynamicModuleGeneralConfig = general\r\n this.dynamicModuleConfiguratorSpecificConfig = specific\r\n }\r\n}\r\n","export class Formula {\r\n formula:string;\r\n current_number:number = 0;\r\n prev_number:number = 0;\r\n stack:string[] = [];\r\n start:boolean = false; \r\n dotted:boolean = false; // input number having dot\r\n is_operand:boolean = false;\r\n radians:boolean = true;\r\n operation:string = '';\r\n memory:number = 0;\r\n in_memory:boolean = false;\r\n bracket:boolean = false;\r\n secondScreen:boolean = false;\r\n\r\n constructor(formula:string='') {\r\n this.formula=formula;\r\n }\r\n\r\n get() {\r\n return this.formula;\r\n }\r\n\r\n parse(value:string):number {\r\n return parseFloat(value);\r\n }\r\n\r\n getCurrentNumber() {\r\n return this.parse(this.formula);\r\n }\r\n\r\n setRadians(switcher:boolean):boolean {\r\n this.radians=switcher;\r\n return this.radians;\r\n }\r\n\r\n\r\n clear():string {\r\n this.formula = '0';\r\n\r\n this.dotted = false;\r\n this.is_operand = false;\r\n this.operation = '';\r\n this.start = false;\r\n this.stack = [];\r\n this.bracket = false;\r\n return this.formula;\r\n }\r\n\r\n clearMemory() {\r\n this.memory = 0;\r\n this.in_memory = false;\r\n }\r\n\r\n sumToMemory() {\r\n let value=this.getCurrentNumber();\r\n this.memory += value;\r\n this.in_memory = true;\r\n this.start = true;\r\n }\r\n\r\n deductToMemory() {\r\n let value=this.getCurrentNumber();\r\n this.memory -= value;\r\n this.in_memory = true;\r\n this.start = true;\r\n }\r\n\r\n readMemory():string {\r\n this.formula=this.memory.toString();\r\n return this.formula;\r\n }\r\n\r\n addBracket(value:string):void {\r\n // brackets can be set only if we have not set them before and we set operand (if we set brackets first - it will not make sense)\r\n if (value == '(' && this.bracket == false && this.is_operand == true) {\r\n this.stack.push(value);\r\n this.bracket = true;\r\n this.is_operand = false;\r\n }\r\n if (value == ')' && this.bracket == true && this.is_operand != true) {\r\n this.bracket = false;\r\n this.stack.push(this.formula);\r\n this.stack.push(')');\r\n this.is_operand = false;\r\n this.start = true;\r\n this.formula=eval(this.stack.join('')).toString();\r\n this.stack=[this.formula];\r\n }\r\n }\r\n\r\n setOperation(operand:string):void {\r\n this.operation=operand;\r\n // If operator already set - nothing doing\r\n if (this.is_operand) {\r\n this.operation = operand;\r\n return null;\r\n }\r\n this.is_operand = true;\r\n this.stack.push(this.formula);\r\n this.stack.push(this.operation);\r\n this.start=true;\r\n }\r\n\r\n calculate():number {\r\n let result:number;\r\n if (this.stack.length<3) return;\r\n this.is_operand = false;\r\n this.current_number=this.parse(this.stack.pop());\r\n this.operation=this.stack.pop();\r\n this.prev_number=this.parse(this.stack.pop());\r\n if (!this.prev_number) return 0;\r\n\r\n switch (this.operation) {\r\n case '+':\r\n result=this.prev_number+this.current_number;\r\n this.show(result);\r\n break;\r\n case '-':\r\n result=this.prev_number-this.current_number;\r\n this.show(result);\r\n break;\r\n case '*':\r\n result=this.prev_number*this.current_number;\r\n this.show(result);\r\n break;\r\n case '/':\r\n result=this.prev_number/this.current_number;\r\n this.show(result);\r\n break;\r\n case 'sqrt':\r\n result=Math.pow(this.prev_number,1/this.current_number);\r\n this.show(result);\r\n break;\r\n case 'pow':\r\n result=Math.pow(this.prev_number,this.current_number);\r\n this.show(result);\r\n break;\r\n case 'yx':\r\n result = Math.pow(this.current_number, this.prev_number);\r\n this.show(result);\r\n break;\r\n case 'log':\r\n result = Math.log(this.prev_number) / Math.log(this.current_number);\r\n break;\r\n }\r\n\r\n this.current_number=this.parse(this.formula);\r\n\r\n this.start=true;\r\n return result;\r\n }\r\n\r\n\r\n addValue(value:string,start:boolean):string {\r\n if (start || this.start || (this.dotted == false && this.formula == '0' && value != '.')) {\r\n this.formula='';\r\n }\r\n this.start=start;\r\n if (value=='.') {\r\n if (this.dotted==true) {\r\n return this.formula; \r\n }\r\n this.dotted=true;\r\n }\r\n this.formula+=value;\r\n this.is_operand = false;\r\n return this.formula;\r\n }\r\n\r\n removeSymbol():void {\r\n let len=this.formula.length;\r\n let last_symbol=this.formula.substring(len - 1,len);\r\n if (last_symbol == '.') {\r\n this.dotted=false;\r\n }\r\n this.formula=this.formula.slice(0,-1);\r\n }\r\n\r\n singleton(operand:string,data:any):number {\r\n let result:number=0;\r\n let rad:number=0;\r\n let grad=180/Math.PI;\r\n this.current_number=parseFloat(this.formula);\r\n \r\n switch (operand) {\r\n case 'invert':\r\n result=this.current_number*data;\r\n break;\r\n case 'sqrt':\r\n result=Math.sqrt(this.current_number);\r\n break;\r\n case 'sqrt3':\r\n result=Math.pow(this.current_number,1/3);\r\n break;\r\n case 'ln':\r\n result=Math.log(this.current_number);\r\n break;\r\n case 'lg':\r\n result=Math.log(this.current_number)/Math.log(data);\r\n break;\r\n case 'pow_base':\r\n let base=data=='e' ? Math.E : data;\r\n result=Math.pow(base,this.current_number);\r\n break;\r\n case 'pow':\r\n let step=parseFloat(data);\r\n result=Math.pow(this.current_number,step);\r\n break;\r\n case 'div':\r\n result=1/this.current_number;\r\n break;\r\n case 'sin':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=Math.sin(rad);\r\n break;\r\n case 'cos':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=Math.cos(rad);\r\n break;\r\n case 'tan':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=Math.tan(rad);\r\n break;\r\n case 'sinh':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=(Math.exp(rad)-Math.exp(-rad))/2;\r\n break;\r\n case 'cosh':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=(Math.exp(rad)+Math.exp(-rad))/2;\r\n break;\r\n case 'tanh':\r\n rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n result=(Math.exp(rad)-Math.exp(-rad))/(Math.exp(rad)+Math.exp(-rad));\r\n break;\r\n case 'asin':\r\n result=Math.asin(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'acos':\r\n result=Math.acos(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'atan':\r\n result=Math.atan(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'asinh':\r\n result=Math.asinh(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'acosh':\r\n result=Math.acosh(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'atanh':\r\n result=Math.atanh(this.current_number);\r\n result=(this.radians) ? result : result*grad;\r\n break;\r\n case 'rand':\r\n result=Math.random();\r\n break;\r\n case 'factorial':\r\n let n=Math.ceil(this.current_number);\r\n result=1;\r\n for (let i=1;i<=n;i++) {\r\n result*=i;\r\n }\r\n break;\r\n case 'percent':\r\n result=this.current_number/100;\r\n break;\r\n case 'ee':\r\n this.formula=this.current_number.toExponential();\r\n return 0;\r\n }\r\n\r\n this.start=true;\r\n this.show(result);\r\n return result;\r\n }\r\n\r\n show(value:number):string {\r\n this.formula=value.toString();\r\n return this.formula;\r\n }\r\n}","import { Component, OnInit, Inject, OnChanges, SimpleChanges, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'\r\nimport { Formula } from '../../../modules/formula.model';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { BaseField } from '../../../models/baseField.model';\r\n\r\n@Component({\r\n selector: 'eqp-dynamic-module-add-formula-component',\r\n templateUrl: './add-formula-field.component.html',\r\n styleUrls: ['./add-formula-field.component.scss']\r\n})\r\n\r\nexport class AddFormulaComponent implements OnInit, OnChanges {\r\n\r\n @ViewChild('formula', { static: false }) formulaTextArea: ElementRef<HTMLTextAreaElement>;\r\n caretPosition: number = 0;\r\n fieldNull: boolean = true;\r\n formula = new Formula('0');\r\n stringaFormula: string = \"\";\r\n counter: number = 0;\r\n Fields: Array<BaseField> = [];\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any,\r\n public dialogRef: MatDialogRef<AddFormulaComponent>,\r\n public dialog: MatDialog) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.Fields = this.data.fields;\r\n if (this.Fields != undefined)\r\n if (this.Fields.length == 0) {\r\n this.fieldNull = true;\r\n } else {\r\n this.fieldNull = false;\r\n }\r\n\r\n if (this.data.formula != undefined && this.data.formula != null && this.data.formula != \"\" && this.data.formula != \"undefined\") {\r\n this.stringaFormula = this.data.formula;\r\n localStorage.setItem(\"formula\", this.data.formula);\r\n } else {\r\n localStorage.setItem(\"formula\", \"\");\r\n }\r\n }\r\n\r\n clear(): any {\r\n this.stringaFormula = \"\";\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.caretPosition = this.formulaTextArea.nativeElement.selectionStart;\r\n }\r\n lostFocus(textArea) {\r\n this.caretPosition = textArea.selectionStart;\r\n\r\n }\r\n back() {\r\n\r\n if (localStorage.getItem('formula') != undefined || localStorage.getItem('formula') != null || localStorage.getItem('formula') != \"undefined\") {\r\n this.dialogRef.close({ formula: localStorage.getItem('formula').toString() });\r\n localStorage.removeItem('formula');\r\n }\r\n else\r\n this.dialogRef.close({ formula: \" \" });\r\n }\r\n addSymbol(value: string): void {\r\n this.stringaFormula = this.stringaFormula.trim()\r\n let lastChar = this.stringaFormula.charAt(this.stringaFormula.length - 1);\r\n if (lastChar == '+' || lastChar == '-' || lastChar == '*' || lastChar == '/') {\r\n if (this.caretPosition != 0) {\r\n var substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + \" \" + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + \" \" + value;\r\n }\r\n\r\n }\r\n else {\r\n if (this.caretPosition != 0) {\r\n var substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + \" * \" + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + \" * \" + value;\r\n }\r\n\r\n }\r\n }\r\n\r\n addListNumberReader() {\r\n this.counter++;\r\n const value = \"let value\" + this.counter + \" = 0; let elenco\" + this.counter + \" = INSERISCI_IL_TUO_ELENCO; if (elenco\" + this.counter + \" != null && elenco\" + this.counter + \".constructor == Array){ for (let i = 0; i < elenco\" + this.counter + \".length; i++) { value\" + this.counter + \" += elenco\" + this.counter + \"[i]; } } else { value\" + this.counter + \" = elenco\" + this.counter + \" }\";\r\n this.addNumber(value);\r\n }\r\n\r\n addListStringrReader() {\r\n this.counter++;\r\n const value = \"let value\" + this.counter + \" = \\\"\\\"; let elenco\" + this.counter + \" = INSERISCI_IL_TUO_ELENCO; if (elenco\" + this.counter + \" != null && elenco\" + this.counter + \".constructor == Array){ for (let i = 0; i < elenco\" + this.counter + \".length; i++) { value\" + this.counter + \" += elenco\" + this.counter + \"[i]; } } else { value\" + this.counter + \" = elenco\" + this.counter + \" }\";\r\n this.addNumber(value);\r\n }\r\n\r\n addArrayList(): void {\r\n this.counter++;\r\n const value = \"var outputList\" + this.counter + \" = { \\\"key\\\" : value , \\\"key2\\\" : value2 }; outputList\" + this.counter + \";\";\r\n this.addNumber(value);\r\n }\r\n\r\n addNumber(value: string): void {\r\n this.stringaFormula = this.stringaFormula.trim();\r\n if (UtilityHelperService.isNumeric(value)) {\r\n if (this.caretPosition != 0) {\r\n let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + value;\r\n }\r\n this.caretPosition += 1;\r\n }\r\n else {\r\n if (value == \".\") {\r\n if (this.caretPosition != 0) {\r\n let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + value;\r\n }\r\n } else {\r\n if (this.caretPosition != 0) {\r\n let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n substringa = substringa.trim();\r\n substringa = substringa + \" \" + value + this.stringaFormula.substring(this.caretPosition);\r\n this.stringaFormula = substringa;\r\n }\r\n else {\r\n this.stringaFormula = this.stringaFormula + \" \" + value;\r\n }\r\n }\r\n this.caretPosition += 2;\r\n }\r\n }\r\n\r\n save() {\r\n this.stringaFormula = this.stringaFormula.trim();\r\n if (UtilityHelperService.stringCheckParentesis(this.stringaFormula)) {\r\n localStorage.removeItem('formula');\r\n this.dialogRef.close({ formula: this.stringaFormula });\r\n }\r\n else {\r\n this.dialog.open(DialogDataExampleDialog, {\r\n });\r\n }\r\n }\r\n\r\n public drag_handler(event: any) {\r\n var data = event.dataTransfer.getData(\"Text\");\r\n }\r\n\r\n public dragend_handler(event: any) {\r\n event.target.preview.parentNode.removeChild(event.target.preview);\r\n var data = event.dataTransfer.getData(\"Text\");\r\n }\r\n\r\n public dragenter_handler(event: any) {\r\n if (event.target.className == \"droptarget\") {\r\n event.target.style.backgroundColor = \"lightblue\";\r\n event.target.style.border = \"3px dotted red\";\r\n }\r\n }\r\n\r\n public dragleave_handler(event: any) {\r\n event.currentTarget.style.background = \"white\";\r\n if (event.target.className == \"droptarget\") {\r\n event.target.style.border = \"\";\r\n }\r\n }\r\n\r\n public dragstart_handler(event: any) {\r\n const preview = event.target.cloneNode(true);\r\n event.target.preview = preview;\r\n preview.className = 'preview';\r\n preview.style.cssText = `position: absolute; top: -100%; left: -100%; width: ${event.target.offsetWidth}px; `;\r\n document.body.appendChild(preview);\r\n event.dataTransfer.setDragImage(preview, 0, 0);\r\n event.dataTransfer.setData('text/plain', \"rec.\" + event.target.dataset.dragData);\r\n }\r\n\r\n public drop_handler(event: any) {\r\n event.preventDefault();\r\n var data = event.dataTransfer.getData(\"Text\");\r\n event.currentTarget.style.background = \"white\";\r\n }\r\n\r\n public dragover_handler(event: any) {\r\n event.currentTarget.style.background = \"lightyellow\";\r\n event.preventDefault();\r\n }\r\n\r\n}\r\n\r\n@Component({\r\n selector: 'dialog-data-example',\r\n templateUrl: 'dialog-data-example.component.html'\r\n})\r\nexport class DialogDataExampleDialog {\r\n constructor() { }\r\n}","<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea\r\n name=\"formula\"\r\n #formula\r\n type=\"textarea\"\r\n id=\"formula\"\r\n rows=\"10\"\r\n style=\"width: 100%\"\r\n class=\"droptarget\"\r\n (click)=\"lostFocus(formula)\"\r\n (keyup)=\"lostFocus(formula)\"\r\n (blur)=\"lostFocus(formula)\"\r\n [(ngModel)]=\"stringaFormula\"\r\n ></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"p-1 form-group\">\r\n <form method=\"POST\" class=\"alert alert-secondary\">\r\n <div class=\"w-100\">\r\n <div class=\"row pt-2\">\r\n <div class=\"col\"></div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addListStringrReader()\"\r\n >\r\n Leggi Elenco Txt\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addListNumberReader()\"\r\n >\r\n Leggi Elenco Num\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addArrayList()\"\r\n >\r\n ArrayList\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"\r\n addNumber(\r\n 'if( Condizione ) { se vera } else { se falsa }'\r\n )\r\n \"\r\n >\r\n IF\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('/100')\"\r\n >\r\n %\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-danger\"\r\n (click)=\"clear()\"\r\n >\r\n C\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('/')\"\r\n >\r\n ÷\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,2)')\"\r\n >\r\n x<sup>2</sup>\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,3)')\"\r\n >\r\n x<sup>3</sup>\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore , potenza )')\"\r\n >\r\n x<sup>y</sup>\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber(' * 3.14 ')\"\r\n >\r\n ℼ\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('7')\"\r\n >\r\n 7\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('8')\"\r\n >\r\n 8\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('9')\"\r\n >\r\n 9\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('*')\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sqrt( valore )')\"\r\n >\r\n <sup>2</sup>√x\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( radice , 1/ valore )')\"\r\n >\r\n <sup>y</sup>√x\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log( valore )')\"\r\n >\r\n ln\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log10( valore )')\"\r\n >\r\n log\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('4')\"\r\n >\r\n 4\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('5')\"\r\n >\r\n 5\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('6')\"\r\n >\r\n 6\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('-')\"\r\n >\r\n −\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sin( valore )')\"\r\n >\r\n sin\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.cos( valore )')\"\r\n >\r\n cos\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.tan( valore )')\"\r\n >\r\n tan\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('* 2.718281828459045')\"\r\n >\r\n e\r\n </button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('1')\"\r\n >\r\n 1\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('2')\"\r\n >\r\n 2\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('3')\"\r\n >\r\n 3\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('+')\"\r\n >\r\n +\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('0')\"\r\n >\r\n 0\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('.')\"\r\n >\r\n .\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"back()\"\r\n >\r\n Annulla\r\n </button>\r\n </div>\r\n <div class=\"col d-lt-flex\">\r\n <button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"save()\"\r\n >\r\n Salva\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3 p-2 overflow-auto\" style=\"max-height: 80vh;\">\r\n <div\r\n [hidden]=\"fieldNull\"\r\n cdkDropList\r\n cdkDropListOrientation=\"vertical\"\r\n class=\"example-list\"\r\n >\r\n <div\r\n class=\"example-box\"\r\n draggable=\"true\"\r\n (drag)=\"drag_handler($event)\"\r\n (dragend)=\"dragend_handler($event)\"\r\n (dragenter)=\"dragenter_handler($event)\"\r\n (dragleave)=\"dragleave_handler($event)\"\r\n (dragover)=\"dragover_handler($event)\"\r\n (dragstart)=\"dragstart_handler($event)\"\r\n (drop)=\"drop_handler($event)\"\r\n [attr.data-drag-data]=\"field.Label\"\r\n *ngFor=\"let field of Fields\"\r\n cdkDrag\r\n >\r\n {{ field.Label }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","<h1 mat-dialog-title>Errore!</h1>\r\n<div mat-dialog-content>\r\n La funzione inserita contiene parentesi non chiuse! prima di salvare controlla la funzione.\r\n \r\n</div>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport {\r\n AttachmentType,\r\n EqpAttachmentsComponent,\r\n IAttachmentDTO,\r\n} from \"@eqproject/eqp-attachments\";\r\nimport { PickerModeEnum } from \"@eqproject/eqp-datetimepicker\";\r\nimport { EnumHelper } from \"@eqproject/eqp-select\";\r\nimport { ConfigColumn, TypeColumn } from \"@eqproject/eqp-table\";\r\nimport {\r\n BaseField,\r\n ColSpanSizesEnum,\r\n FieldTypeEnum,\r\n} from \"../../../models/baseField.model\";\r\nimport {\r\n AttachmentField,\r\n AvailableFileExtensions,\r\n AvailableImageExtensions,\r\n} from \"../../../models/fields/attachmentField.model\";\r\nimport {\r\n BooleanField,\r\n BoolPresentantioEnum,\r\n} from \"../../../models/fields/booleanField.model\";\r\nimport {\r\n DateField,\r\n DateTimeTypeEnum,\r\n} from \"../../../models/fields/dateField.model\";\r\nimport { ImageField } from \"../../../models/fields/imageField.model\";\r\nimport {\r\n ButtonImage,\r\n ListPresentationEnum,\r\n ListValueField,\r\n} from \"../../../models/fields/listValueField.model\";\r\nimport { LookupField } from \"../../../models/fields/lookupField.model\";\r\nimport { NumericField } from \"../../../models/fields/numericField.model\";\r\nimport { TextareaField } from \"../../../models/fields/textareaField.model\";\r\nimport {\r\n TextMaskEnum,\r\n TextField,\r\n} from \"../../../models/fields/textField.model\";\r\nimport { FormFieldGroup } from \"../../../models/form.model\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\n\r\n@Component({\r\n selector: \"eqp-dynamic-module-add-form-field\",\r\n templateUrl: \"./add-form-field.component.html\",\r\n styleUrls: [\"./add-form-field.component.scss\"],\r\n})\r\nexport class AddFormFieldComponent implements OnInit {\r\n \r\n @Input() field: BaseField | any;\r\n @Input() indexField: number;\r\n @Input() formFieldsGroups: Array<FormFieldGroup>;\r\n /** Elenco dei Field creati nella form, usati per popolare l'autocomplete della proprietà Formula. */\r\n @Input() availableFields: Array<BaseField>;\r\n @Input() fieldTypesToExclude: Array<FieldTypeEnum> = [\r\n FieldTypeEnum[\"Form di dettaglio\"],\r\n ];\r\n\r\n fieldFormGroup: UntypedFormGroup;\r\n keyValueObject: { key: string; value: string } = { key: \"\", value: \"\" };\r\n availableColSpanSizes: Array<ColSpanSizesEnum> = [];\r\n formulaAutocompleteOptions: Array<{ label: string; value: string }>;\r\n VisibleIfAutocompleteOptions: Array<{ label: string; value: string }>;\r\n AvailableFileExtensions = AvailableFileExtensions;\r\n AvailableImageExtensions = AvailableImageExtensions;\r\n\r\n @Output() saveFieldEvent: EventEmitter<BaseField | any> = new EventEmitter<\r\n BaseField | any\r\n >();\r\n\r\n //#region Template dei vari pezzi di form per la creazione di un campo(in base al tipo scelto).\r\n fieldTypeFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"textFieldFormTemplate\", { static: true })\r\n textFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"textareaFieldFormTemplate\", { static: true })\r\n textareaFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"booleadFieldFormTemplate\", { static: true })\r\n booleadFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"dateFieldFormTemplate\", { static: true })\r\n dateFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"numericFieldFormTemplate\", { static: true })\r\n numericFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"attachmentFieldFormTemplate\", { static: true })\r\n attachmentFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"imageFieldFormTemplate\", { static: true })\r\n imageFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"listValueFieldFormTemplate\", { static: true })\r\n listValueFieldFormTemplate: TemplateRef<any>;\r\n @ViewChild(\"lookupFieldFormTemplate\", { static: true })\r\n lookupFieldFormTemplate: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Proprietà per gestire i metadata nei campi ti dipo Allegato o Immagine\r\n metadataColumns: Array<ConfigColumn>;\r\n //@ViewChild('metadataFieldsTable', { static: false }) metadataFieldsTable: EqpTableComponent;\r\n selectedMetadata: BaseField;\r\n //indexSelectedMetadata: number;\r\n //dialogMetadataRef: MatDialogRef<TemplateRef<any>>;\r\n dialogFormulaRef: MatDialogRef<TemplateRef<any>>;\r\n dialogVisibleIfRef: MatDialogRef<TemplateRef<any>>;\r\n //@ViewChild('dialogMetadata', { static: true }) dialogMetadata: TemplateRef<any>;\r\n @ViewChild(\"dialogFormula\", { static: true }) dialogFormula: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Proprietà per gestire le immagini nei capi di tipo elenco generico\r\n @ViewChild(\"buttonImagesKeyValueInputColumn\", { static: true })\r\n buttonImagesKeyValueInputColumn: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Enumeratori usati nell'html\r\n FieldTypeEnum = FieldTypeEnum;\r\n BoolPresentantioEnum = BoolPresentantioEnum;\r\n DateTimeTypeEnum = DateTimeTypeEnum;\r\n ListPresentationEnum = ListPresentationEnum;\r\n TextMaskEnum = TextMaskEnum;\r\n AttachmentType = AttachmentType;\r\n pickerModeEnum = PickerModeEnum;\r\n subscription: any;\r\n\r\n //#endregion\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private enumHelper: EnumHelper,\r\n private dialog: MatDialog,\r\n private cdr: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (\r\n !this.fieldTypesToExclude.includes(FieldTypeEnum[\"Form di dettaglio\"])\r\n ) {\r\n this.fieldTypesToExclude.push(FieldTypeEnum[\"Form di dettaglio\"]);\r\n }\r\n\r\n this.onFieldTypeChange(false);\r\n this.availableFields = this.availableFields\r\n ? this.availableFields.filter((f) => f != this.field)\r\n : [];\r\n //this.configureColumns();\r\n }\r\n\r\n /**\r\n * Metodo per impostare i valori da suggerire nell'autocomplete del campo Formula.\r\n * Viene scatenato al focus (in questo caso viene passato il parametro a null per differenziarlo\r\n * dall'evento di click sulla tastiera) e al keyup sull'input (il parametro è diverso da null).\r\n * @param keyboardEvent Evento scatenato al keyup sulla tastiera. Se null allora il metodo è stato invocato dal focus sull'input.\r\n * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input\r\n * oppure al keyup sulla tastiera di un tasto diverso dalle frecce.\r\n */\r\n // setFormulaAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n // // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n // // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n // // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n // // si prederebbe la selezione appena fatta).\r\n // if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n // this.formulaAutocompleteOptions = UtilityHelperService.GetAutocompleteOptions(this.availableFields, this.field.Formula);\r\n // }\r\n // }\r\n setVisibleIfAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n // si prederebbe la selezione appena fatta).\r\n if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n this.VisibleIfAutocompleteOptions =\r\n UtilityHelperService.GetAutocompleteOptions(\r\n this.availableFields,\r\n this.field.VisibleIf\r\n );\r\n }\r\n }\r\n omit_special_char(event) {\r\n var k;\r\n k = event.keyCode; // k = event.keyCode; (Both can be used)\r\n if (k == 34) {\r\n event.keyCode = 0;\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Crea il FormGroup per l'aggiunta di un nuovo campo all'interno della form.\r\n * Metodo richiamato ogni volta che cambia il tipo del campo scelto o viene aggiunto/modificato un Field\r\n */\r\n createFieldForm() {\r\n this.fieldFormGroup = this.formBuilder.group({\r\n Label: [\r\n this.field.Label,\r\n [\r\n Validators.required,\r\n this.questionPoll,\r\n Validators.pattern(\"^[a-zA-Z ]*$\"),\r\n ],\r\n ],\r\n Description: [\r\n this.field.Description,\r\n [Validators.required, this.questionPoll],\r\n ],\r\n Readonly: [this.field.Readonly],\r\n Required: [this.field.Required],\r\n FieldType: [\r\n this.field.FieldType,\r\n [Validators.required, this.questionPoll],\r\n ],\r\n ColSpanSizes: [this.field.ColSpanSizes],\r\n InListView: [this.field.InListView],\r\n VisibleIf: [this.field.VisibleIf, this.questionPoll],\r\n Tooltip: [this.field.Tooltip, this.questionPoll],\r\n LabelstyleCSS: [this.field.LabelstyleCSS, this.questionPoll],\r\n FieldstyleCSS: [this.field.FieldstyleCSS, this.questionPoll],\r\n Formula: [this.field.Formula, this.questionPoll],\r\n\r\n AnswerStyleLabelstyleCSS: [this.field.AnswerStyle.LabelstyleCSS, this.questionPoll],\r\n AnswerStyleFieldstyleCSS: [this.field.AnswerStyle.FieldstyleCSS, this.questionPoll],\r\n AnswerStyleVisibleIf: [this.field.AnswerStyle.VisibleIf, this.questionPoll],\r\n AnswerStyleColSpanSizes: [this.field.AnswerStyle.ColSpanSizes],\r\n AnswerStyleInListView: [this.field.AnswerStyle.InListView],\r\n });\r\n\r\n if (this.formFieldsGroups) {\r\n this.fieldFormGroup.addControl(\r\n \"FieldGroup\",\r\n new UntypedFormControl(this.field.FieldGroup, Validators.required)\r\n );\r\n }\r\n }\r\n questionPoll(control: FormControl): { [s: string]: boolean } {\r\n // c'è un FormControl che è vuoto che da problemi (probabilmente type Data, campo Formato)\r\n if (control.value != undefined) {\r\n if (\r\n UtilityHelperService.stringCheckParentesis(\r\n control.value,\r\n control.hasValidator(Validators.required)\r\n )\r\n ) {\r\n return null;\r\n } else {\r\n return { \"Missing Parenthesis\": true };\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n stringSanitaizedValidator(control: FormControl): { [s: string]: boolean } {\r\n // c'è un FormControl che è vuoto che da problemi (probabilmente type Data, campo Formato)\r\n if (control.value != undefined) {\r\n if (\r\n UtilityHelperService.stringCheckParentesis(\r\n control.value,\r\n control.hasValidator(Validators.required)\r\n )\r\n ) {\r\n return null;\r\n } else {\r\n return { \"La formula non è valida\": true };\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n // getAllFormValidationErrors() {\r\n // Object.keys(this.fieldFormGroup.controls).forEach((key) => {\r\n // const controlErrors: ValidationErrors =\r\n // this.fieldFormGroup.get(key).errors;\r\n // if (controlErrors != null) {\r\n // Object.keys(controlErrors).forEach((keyError) => {\r\n // console.log(\r\n // \"Key control: \" + key + \", keyError: \" + keyError + \", err value: \",\r\n // controlErrors[keyError]\r\n // );\r\n // });\r\n // }\r\n // });\r\n // }\r\n\r\n /**\r\n * Metodo chiamato dai mat-error per prendere gli errori generati relativi al campo.\r\n * @param control è il nome del GroupControl di cui leggere se ci sono errori\r\n */\r\n getFormValidationErrors(control: string) {\r\n if (control == \"Label\") GlobalService.debugLog('getFormValidationErrors', this.fieldFormGroup.controls[\"Label\"]);\r\n\r\n const controlErrors: ValidationErrors =\r\n this.fieldFormGroup.controls[control].errors;\r\n let errors = [];\r\n let values = [];\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach((keyError) => {\r\n errors.push(keyError);\r\n });\r\n GlobalService.debugLog('control: ', control);\r\n GlobalService.debugLog('errors: ', errors);\r\n GlobalService.debugLog('values: ', values);\r\n }\r\n return errors.join(\", \");\r\n }\r\n\r\n /**\r\n * Metodo chiamato quando cambia il FieldType del BaseField che si sta aggiungendo/modificando.\r\n * Ricrea l'oggetto field popolando solo le proprietà del BaseField inserite dall'utente\r\n * (quelle comuni a tutte le tipologie di campo), ricrea la form e, in base al FieldType scelto,\r\n * aggiunge alla form i FormControl necessari e seleziona il template corretto da usare.\r\n * @param restoreField Se TRUE ripristina i valori base (ereditati dal modello BaseField) del campo aggiunto/modificato\r\n */\r\n onFieldTypeChange(restoreField: boolean = true) {\r\n if (restoreField) {\r\n this.restoreBaseFieldProperties();\r\n }\r\n\r\n this.createFieldForm();\r\n this.onColSpanSizeSelect();\r\n if ((this.field as BaseField).InListView == null) {\r\n this.field.InListView = true;\r\n }\r\n this.fieldTypeFormTemplate = null;\r\n\r\n switch (this.field.FieldType) {\r\n\r\n // CAMPO DI TESTO\r\n case FieldTypeEnum[\"Campo di testo\"]:\r\n if ((this.field as TextField).Microphone == null) {\r\n this.field.Microphone = false;\r\n }\r\n this.fieldFormGroup.addControl(\r\n \"TextMask\",\r\n new UntypedFormControl((this.field as TextField).TextMask)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MaxLenght\",\r\n new UntypedFormControl((this.field as TextField).MaxLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MinLenght\",\r\n new UntypedFormControl((this.field as TextField).MinLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"Microphone\",\r\n new UntypedFormControl((this.field as TextField).Microphone)\r\n );\r\n this.fieldTypeFormTemplate = this.textFieldFormTemplate;\r\n break;\r\n\r\n // AREA DI TESTO \r\n case FieldTypeEnum[\"Area di testo\"]:\r\n if ((this.field as TextareaField).Microphone == null) {\r\n this.field.Microphone = false;\r\n }\r\n this.fieldFormGroup.addControl(\r\n \"Rows\",\r\n new UntypedFormControl((this.field as TextareaField).Rows, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MaxLenght\",\r\n new UntypedFormControl((this.field as TextareaField).MaxLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MinLenght\",\r\n new UntypedFormControl((this.field as TextareaField).MinLenght, [\r\n this.questionPoll,\r\n Validators.pattern(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"Microphone\",\r\n new UntypedFormControl((this.field as TextareaField).Microphone)\r\n );\r\n this.fieldTypeFormTemplate = this.textareaFieldFormTemplate;\r\n break;\r\n\r\n // BOOLEANO\r\n case FieldTypeEnum.Booleano:\r\n this.fieldFormGroup.addControl(\r\n \"IsTristate\",\r\n new UntypedFormControl((this.field as BooleanField).IsTristate)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"PresetationType\",\r\n new UntypedFormControl(\r\n (this.field as BooleanField).PresetationType,\r\n Validators.required\r\n )\r\n );\r\n this.fieldTypeFormTemplate = this.booleadFieldFormTemplate;\r\n break;\r\n\r\n // DATA E/I ORA\r\n case FieldTypeEnum[\"Data e/o ora\"]:\r\n if (this.field.IsOnlyDate == null) {\r\n this.field.IsOnlyDate = DateTimeTypeEnum[\"Solo data\"];\r\n }\r\n this.fieldFormGroup.addControl(\r\n \"IsOnlyDate\",\r\n new UntypedFormControl((this.field as DateField).IsOnlyDate, [\r\n Validators.required,\r\n this.questionPoll,\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MinDate\",\r\n new UntypedFormControl(\r\n (this.field as DateField).MinDate,\r\n this.questionPoll\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MaxDate\",\r\n new UntypedFormControl(\r\n (this.field as DateField).MaxDate,\r\n this.questionPoll\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"DateFormat\",\r\n new UntypedFormControl((this.field as DateField).DateFormat)\r\n );\r\n this.fieldTypeFormTemplate = this.dateFieldFormTemplate;\r\n break;\r\n\r\n // CAMPO NUMERICO\r\n case FieldTypeEnum[\"Campo numerico\"]:\r\n if ((this.field as NumericField).IsInteger == null) {\r\n this.field.IsInteger = true;\r\n }\r\n\r\n this.fieldFormGroup.addControl(\r\n \"IsInteger\",\r\n new UntypedFormControl((this.field as NumericField).IsInteger)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MinValue\",\r\n new UntypedFormControl((this.field as NumericField).MinValue, [\r\n this.questionPoll,\r\n Validators.pattern(\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\"), //(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MaxValue\",\r\n new UntypedFormControl((this.field as NumericField).MaxValue, [\r\n this.questionPoll,\r\n Validators.pattern(\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\"), //(\"^[0-9]*$\"),\r\n ])\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"DecimalSeparator\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).DecimalSeparator,\r\n [this.questionPoll, Validators.pattern(\"^[a-zA-Z -/',._/\\\\^<>]+\")]\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"DecimalPrecision\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).DecimalPrecision,\r\n [this.questionPoll, Validators.pattern(\"^[0-9]+$\")]\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"ThousandsSeparator\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).ThousandsSeparator,\r\n [this.questionPoll, Validators.pattern(\"^[a-zA-Z -/',._/\\\\^<>]+\")]\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"CurrencySymbol\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).CurrencySymbol,\r\n this.questionPoll\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"MeasureUnit\",\r\n new UntypedFormControl(\r\n (this.field as NumericField).MeasureUnit,\r\n this.questionPoll\r\n )\r\n );\r\n this.fieldTypeFormTemplate = this.numericFieldFormTemplate;\r\n break;\r\n\r\n // ALLEGATO\r\n case FieldTypeEnum.Allegato:\r\n this.fieldFormGroup.addControl(\r\n \"AllowedExtensions\",\r\n new UntypedFormControl(\r\n (this.field as AttachmentField).AllowedExtensions\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiAttach\",\r\n new UntypedFormControl((this.field as AttachmentField).IsMultiAttach)\r\n );\r\n this.fieldTypeFormTemplate = this.attachmentFieldFormTemplate;\r\n break;\r\n\r\n // IMMAGINE\r\n case FieldTypeEnum.Immagine:\r\n (this.field as ImageField).AttachDefinition = new AttachmentField();\r\n this.fieldFormGroup.addControl(\r\n \"EnableDrawing\",\r\n new UntypedFormControl((this.field as ImageField).EnableDrawing)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"ImageIsContextualAttachment\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ImageIsContextualAttachment\r\n )\r\n );\r\n // Imposto i FormControl variabili.\r\n this.onImageIsContextualAttachmentChange();\r\n this.fieldTypeFormTemplate = this.imageFieldFormTemplate;\r\n break;\r\n\r\n // ELENCO GENERICO\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if ((this.field as ListValueField).InListView == null) {\r\n this.field.InListView = true;\r\n }\r\n\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiChoiche\",\r\n new UntypedFormControl((this.field as ListValueField).IsMultiChoiche)\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"PresentationMode\",\r\n new UntypedFormControl(\r\n (this.field as ListValueField).PresentationMode,\r\n Validators.required\r\n )\r\n );\r\n this.fieldTypeFormTemplate = this.listValueFieldFormTemplate;\r\n\r\n break;\r\n\r\n // LOOKUP\r\n case FieldTypeEnum.Lookup:\r\n this.fieldFormGroup.addControl(\r\n \"EntitySourceName\",\r\n new UntypedFormControl(\r\n (this.field as LookupField).EntitySourceName,\r\n Validators.required\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"UseAsGetOrDiscard\",\r\n new UntypedFormControl((this.field as LookupField).UseAsGetOrDiscard)\r\n );\r\n this.fieldTypeFormTemplate = this.lookupFieldFormTemplate;\r\n break;\r\n }\r\n if (\r\n [\r\n FieldTypeEnum.Allegato,\r\n FieldTypeEnum.Immagine,\r\n FieldTypeEnum[\"Form di dettaglio\"],\r\n ].includes(this.field.FieldType)\r\n ) {\r\n this.field.Formula = null;\r\n this.fieldFormGroup.controls[\"Formula\"].disable();\r\n this.fieldFormGroup.controls[\"InListView\"].disable();\r\n } else {\r\n this.fieldFormGroup.controls[\"Formula\"].enable();\r\n this.fieldFormGroup.controls[\"InListView\"].enable();\r\n }\r\n if (\r\n [\r\n FieldTypeEnum.Allegato,\r\n FieldTypeEnum.Immagine,\r\n FieldTypeEnum[\"Form di dettaglio\"],\r\n FieldTypeEnum[\"Data e/o ora\"],\r\n ].includes(this.field.FieldType)\r\n ) {\r\n this.field.Formula = null;\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].disable();\r\n this.fieldFormGroup.controls[\"FieldstyleCSS\"].disable();\r\n } else {\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].enable();\r\n this.fieldFormGroup.controls[\"FieldstyleCSS\"].enable();\r\n }\r\n if ([FieldTypeEnum.Booleano].includes(this.field.FieldType)) {\r\n this.field.Formula = null;\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].disable();\r\n } else {\r\n this.fieldFormGroup.controls[\"LabelstyleCSS\"].enable();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore della proprietà ImageIsContextualAttachment nel caso\r\n * di campi di tipo Immagine. Se TRUE allora rimuove i FormControl per le proprietà IsMultiAttach\r\n * e AllowedExtensions e aggiunge i FormControl per le proprietà ImgName e ContextualAttachment,\r\n * altrimenti il contrario.\r\n */\r\n onImageIsContextualAttachmentChange() {\r\n (this.field as ImageField).ImgName = null;\r\n (this.field as ImageField).AttachDefinition.AllowedExtensions = [];\r\n (this.field as ImageField).AttachDefinition.IsMultiAttach = false;\r\n (this.field as ImageField).ContextualAttachment = null;\r\n\r\n if ((this.field as ImageField).ImageIsContextualAttachment) {\r\n this.fieldFormGroup.removeControl(\"IsMultiAttach\");\r\n this.fieldFormGroup.removeControl(\"AllowedExtensions\");\r\n this.fieldFormGroup.addControl(\r\n \"ImgName\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ImgName,\r\n Validators.required\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"ContextualAttachment\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).ContextualAttachment,\r\n Validators.required\r\n )\r\n );\r\n } else {\r\n this.fieldFormGroup.removeControl(\"ImgName\");\r\n this.fieldFormGroup.removeControl(\"ContextualAttachment\");\r\n this.fieldFormGroup.addControl(\r\n \"IsMultiAttach\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).AttachDefinition.IsMultiAttach\r\n )\r\n );\r\n this.fieldFormGroup.addControl(\r\n \"AllowedExtensions\",\r\n new UntypedFormControl(\r\n (this.field as ImageField).AttachDefinition.AllowedExtensions\r\n )\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per intercettare l'aggiunta di un allegato nei campi di tipo Immagine per aggiornare\r\n * il valore della proprietà ContextualAttachment e la validazione del relativo FormControl.\r\n * @param event Array contenente l'elenco aggiornato degli allegati caricati (nel nostro caso ne contiene al più 1).\r\n */\r\n catchContextualAttachmentChange(event: Array<IAttachmentDTO>) {\r\n if (event && event.length > 0) {\r\n (this.field as ImageField).ContextualAttachment = event[0];\r\n } else {\r\n (this.field as ImageField).ContextualAttachment = null;\r\n }\r\n this.fieldFormGroup.controls[\"ContextualAttachment\"].setValue(\r\n (this.field as ImageField).ContextualAttachment\r\n );\r\n }\r\n\r\n /**\r\n * Metodo invocato alla selezione di una classe nella select per le colonne di bootstrap\r\n * da usare nella visualizzazione del campo. Questa funzione manipola la sorgente dati per\r\n * la eqp-select in modo da escludere i valori dell'enumeratore che fanno riferimento ad\r\n * una larghezza di schermo già selezionata. Esempio: per gli schermi piccoli (sm) l'utente\r\n * seleziona la classe \"col-sm-6\", al change del valore questo metodo rimuove dalla select\r\n * tutti gli altri valori per la grandezza di schermo selezionata.\r\n */\r\n onColSpanSizeSelect() {\r\n // Recupero l'array degli oggetti chiave-valore che rappreseta l'enumeratore\r\n let colSizeClassEnumArray = this.enumHelper.getEnumArray(\r\n ColSpanSizesEnum,\r\n false,\r\n null\r\n );\r\n // Costruisco l'array delle classi selezionate dall'utente in formato stringa\r\n let selectedDimensions: Array<string> = this.field.ColSpanSizes\r\n ? this.field.ColSpanSizes.map((col) => ColSpanSizesEnum[col])\r\n : [];\r\n // Filtro i valori ottenuti dall'enumeratore per escludere tutti i valori per le\r\n // grandezze di schermo già selezionatead esclusione dei valori selezionati.\r\n this.availableColSpanSizes = colSizeClassEnumArray.filter(\r\n (value: { key: number; value: string }) =>\r\n !selectedDimensions.find(\r\n (col) =>\r\n value.value.includes(col.substring(4, 6)) && value.value != col\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del tipo di visualizzazione scelta per i campi di tipo elenco generico.\r\n * Se viene scelta la visualizzazione ad immagini svuota la lista delle coppie chiave-valore inserite\r\n * in precedenza, altrimenti svuota la lista delle immagini caricate.\r\n */\r\n onPresentationModeChange() {\r\n if (\r\n (this.field as ListValueField).PresentationMode ===\r\n ListPresentationEnum.Immagini\r\n ) {\r\n (this.field as ListValueField).ValuePairs = null;\r\n } else {\r\n (this.field as ListValueField).ButtonImageList = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato quando viene caricato il componente eqp-attachments per caricare le immagini da usare\r\n * nella visualizzazione ad immagini dei campi di tipo \"Elenco generico\". Aggiunge due colonne a quelle\r\n * configurate nel componente in cui l'utente può indicare chiave e valore della scelta.\r\n * @param component Istanza del componente eqp-attachments in cui effettuare la modifica.\r\n */\r\n configureButtonImagesColumns(component: EqpAttachmentsComponent) {\r\n component.attachmentsColumns.splice(\r\n component.attachmentsColumns.length - 1,\r\n 0,\r\n {\r\n key: \"ButtonKey\",\r\n display: \"Label\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.buttonImagesKeyValueInputColumn,\r\n }\r\n );\r\n component.attachmentsColumns.splice(\r\n component.attachmentsColumns.length - 1,\r\n 0,\r\n {\r\n key: \"ButtonValue\",\r\n display: \"Valore\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.buttonImagesKeyValueInputColumn,\r\n }\r\n );\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio degli allegati quando viene configurato un campo di tipo \"Elenco generico\"\r\n * con il tipo di visualizzazione ad immagini. Intercetta l'elenco aggiornato delle immagini caricate e lo\r\n * memorizza nell'oggetto field corrente.\r\n * @param attachments Array aggiornato degli allegati caricati.\r\n */\r\n catchButtonImagesChange(attachments: Array<IAttachmentDTO>) {\r\n (this.field as ListValueField).ButtonImageList =\r\n attachments as Array<ButtonImage>;\r\n }\r\n\r\n /**\r\n * Metodo chiamato al keyup degli input testuali che prevedono l'aggiunta del valore inserito in un array.\r\n * Se l'utente preme il tasto invio, in base al tipo di campo che sta inserendo/modificando, questo metodo\r\n * aggiunge il valore inserito dall'utente nella lista di stringhe corretta (in input viene passato il nome\r\n * della proprietà in cui inserire la stringa).\r\n * @param event Evento che rappresenta il keyup dell'utente\r\n * @param propertyName Nome della proprietà del field in cui inserire la stringa digitata.\r\n */\r\n onMultiSelectInputKeyup(event, propertyName: string) {\r\n if (event.code === \"Enter\" || event.code === \"NumpadEnter\") {\r\n switch (this.field.FieldType) {\r\n case FieldTypeEnum.Lookup:\r\n case FieldTypeEnum.Allegato:\r\n if (!this.field[propertyName]) {\r\n this.field[propertyName] = new Array<string>();\r\n }\r\n this.field[propertyName].push(event.currentTarget.value);\r\n break;\r\n case FieldTypeEnum.Immagine:\r\n if (!(this.field as ImageField).AttachDefinition[propertyName]) {\r\n (this.field as ImageField).AttachDefinition[propertyName] =\r\n new Array<string>();\r\n }\r\n (this.field as ImageField).AttachDefinition[propertyName].push(\r\n event.currentTarget.value\r\n );\r\n break;\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if (!this.keyValueObject.key || !this.keyValueObject.value) {\r\n return;\r\n }\r\n if (!(this.field as ListValueField).ValuePairs) {\r\n (this.field as ListValueField).ValuePairs = {};\r\n }\r\n (this.field as ListValueField).ValuePairs[this.keyValueObject.key] =\r\n this.keyValueObject.value;\r\n this.keyValueObject = { key: \"\", value: \"\" };\r\n break;\r\n }\r\n event.currentTarget.value = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo chiamato per mostrare come elenco le opzioni aggiunte in un campo di tipo \"Elenco generico\".\r\n * @returns Restituisce un array di oggetti del tipo { key: string, value: string } con i valori inseriti dall'utente.\r\n */\r\n getDictionaryKeyValue() {\r\n if ((this.field as ListValueField).ValuePairs) {\r\n return Object.keys((this.field as ListValueField).ValuePairs).map((k) => {\r\n return {\r\n key: k,\r\n value: (this.field as ListValueField).ValuePairs[k],\r\n };\r\n });\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per rimuovere una opzione aggiunta al campo di tipo \"Elenco generico\"\r\n * @param key Nome della chiave da rimuovere\r\n */\r\n deleteKeyFromDictionary(key: string) {\r\n delete (this.field as ListValueField).ValuePairs[key];\r\n }\r\n\r\n /**\r\n * Metodo per aprire il dialog per aggiungere/modificare un metadata in un campo di tipo Allegato o Immagine.\r\n * @param metadata Metadata da modificare, se null allora ne sto creando uno nuovo.\r\n */\r\n // openMetadataDialog(field: BaseField = null) {\r\n // if (field) {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // this.indexSelectedMetadata = (this.field as AttachmentField).MetadataFields.indexOf(field);\r\n // this.selectedMetadata = JSON.parse(JSON.stringify(field));\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // this.indexSelectedMetadata = (this.field as ImageField).AttachDefinition.MetadataFields.indexOf(field);\r\n // this.selectedMetadata = JSON.parse(JSON.stringify(field));\r\n // }\r\n // } else {\r\n // this.selectedMetadata = new BaseField();\r\n // this.indexSelectedMetadata = null;\r\n // }\r\n // this.dialogMetadataRef = this.dialog.open(this.dialogMetadata, {\r\n // disableClose: true,\r\n // hasBackdrop: true,\r\n // width: '75%'\r\n // });\r\n // }\r\n openFormulaDialog() {\r\n this.dialogFormulaRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n fields: this.availableFields,\r\n formula: this.field.Formula,\r\n },\r\n });\r\n this.dialogFormulaRef.afterClosed().subscribe((result) => {\r\n this.field.Formula = result.formula.toString();\r\n });\r\n }\r\n\r\n openVisibleIfDialog() {\r\n this.dialogVisibleIfRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n fields: this.availableFields,\r\n formula: this.field.VisibleIf,\r\n },\r\n });\r\n this.dialogVisibleIfRef.afterClosed().subscribe((result) => {\r\n this.field.VisibleIf = result.formula.toString();\r\n });\r\n }\r\n openAnswerStyleVisibleIfDialog() {\r\n this.dialogVisibleIfRef = this.dialog.open(this.dialogFormula, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n data: {\r\n fields: this.availableFields,\r\n formula: this.field.AnswerStyle.VisibleIf,\r\n },\r\n });\r\n this.dialogVisibleIfRef.afterClosed().subscribe((result) => {\r\n this.field.AnswerStyle.VisibleIf = result.formula.toString();\r\n });\r\n }\r\n\r\n stringSanitizer(value) {\r\n if (!UtilityHelperService.stringCheckParentesis(value)) {\r\n // alert(\"errore!\");\r\n }\r\n }\r\n /**\r\n * Metodo invocato dall'output dal dialog per aggiungere/modificare un metadata\r\n * nei campi di tipo Allegato o Immagine. Prima di aggiungere il metadata nell'elenco\r\n * contolla se esiste un altro metadata con lo stesso nome e nel caso genera un errore\r\n * (i metadata, come per i campi della form, devono avere un nome univoco).\r\n * @param metadata Metadata aggiunto o modificato, se null allora il dialog è stato chiuso senza fare modifiche.\r\n */\r\n // onSaveMetadata(metadata: BaseField) {\r\n // if (metadata) {\r\n // if (\r\n // (this.field.FieldType === FieldTypeEnum.Allegato\r\n // && (this.field as AttachmentField).MetadataFields\r\n // && (this.field as AttachmentField).MetadataFields.find(\r\n // (m, i) => m.Label === metadata.Label\r\n // && (this.indexSelectedMetadata == null ? true : this.indexSelectedMetadata !== i)\r\n // )\r\n // ) ||\r\n // (this.field.FieldType === FieldTypeEnum.Immagine\r\n // && (this.field as ImageField).AttachDefinition.MetadataFields\r\n // && (this.field as ImageField).AttachDefinition.MetadataFields.find(\r\n // (m, i) => m.Label === metadata.Label\r\n // && (this.indexSelectedMetadata == null ? true : this.indexSelectedMetadata !== i)\r\n // )\r\n // )\r\n // ) {\r\n // EqpDynamicModuleDialogService.Warning('Impossibile inserire due metadata con la stessa label.');\r\n // throw new Error('Impossibile inserire due metadata con la stessa label.');\r\n // }\r\n\r\n // if (this.indexSelectedMetadata != null && this.indexSelectedMetadata >= 0) {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // (this.field as AttachmentField).MetadataFields[this.indexSelectedMetadata] = metadata;\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields[this.indexSelectedMetadata] = metadata;\r\n // }\r\n // } else {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // if (!(this.field as AttachmentField).MetadataFields) {\r\n // (this.field as AttachmentField).MetadataFields = new Array<BaseField>();\r\n // }\r\n // (this.field as AttachmentField).MetadataFields.push(metadata);\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // if (!(this.field as ImageField).AttachDefinition.MetadataFields) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields = new Array<BaseField>();\r\n // }\r\n // (this.field as ImageField).AttachDefinition.MetadataFields.push(metadata);\r\n // }\r\n // }\r\n // }\r\n // this.dialogMetadataRef.close();\r\n // this.setMetadataOrdinalPosition();\r\n // this.reloadMetadataTable();\r\n // }\r\n\r\n /**\r\n * Metodo per disabilitare il pulsante per salvare il campo inserito/modificato.\r\n * @returns Restituisce un booleano, se true il salvataggio viene disabilitato.\r\n */\r\n disableSaveField(): boolean {\r\n if (this.fieldFormGroup.invalid) {\r\n return true;\r\n }\r\n\r\n switch (this.field.FieldType) {\r\n case FieldTypeEnum[\"Elenco generico\"]:\r\n if (\r\n (this.field as ListValueField).PresentationMode !=\r\n ListPresentationEnum.Immagini\r\n ) {\r\n if (\r\n (this.field as ListValueField).Formula != undefined &&\r\n (this.field as ListValueField).Formula != \"\"\r\n ) {\r\n if (!(this.field as ListValueField).ValuePairs) {\r\n (this.field as ListValueField).ValuePairs = {};\r\n }\r\n return false;\r\n }\r\n\r\n if(\r\n (this.field as ListValueField).ValueString != undefined &&\r\n (this.field as ListValueField).ValueString != null &&\r\n (this.field as ListValueField).ValueString != \"\"){\r\n return false\r\n }\r\n\r\n return (\r\n !(this.field as ListValueField).ValuePairs ||\r\n (this.field as ListValueField).ValuePairs.length === 0\r\n );\r\n } else {\r\n return (\r\n !(this.field as ListValueField).ButtonImageList ||\r\n (this.field as ListValueField).ButtonImageList.length === 0 ||\r\n !!(this.field as ListValueField).ButtonImageList.find(\r\n (i) => !i.ButtonKey || !i.ButtonValue\r\n )\r\n );\r\n }\r\n case FieldTypeEnum.Lookup:\r\n return (\r\n !(this.field as LookupField).FieldNames ||\r\n (this.field as LookupField).FieldNames.length === 0\r\n );\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare il campo inserito/modificato.\r\n * Se è stato inserito un field con la stessa label viene generato un errore (le label devono essere univoche).\r\n * Una volta aggiunto/aggiornato il campo nell'elenco dei Field della Form chiude il dialog e ricarica la tabella\r\n * che mostra l'elenco dei campi aggiunti alla form.\r\n */\r\n saveAndExitAddField(save: boolean) {\r\n if (save) {\r\n GlobalService.debugLog('add-form-field save', this.field)\r\n this.saveFieldEvent.emit(this.field);\r\n } else {\r\n this.saveFieldEvent.emit(null);\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per ripristinare l'oggetto field al cambio del tipo selezionato.\r\n * Lascia valorizzate solo le proprietà dell'oggetto BaseField comune a tutti i tipi di campo.\r\n */\r\n private restoreBaseFieldProperties() {\r\n if (this.field) {\r\n const tmpBaseField = JSON.parse(JSON.stringify(this.field));\r\n this.field = new BaseField();\r\n this.field.Label = tmpBaseField.Label;\r\n this.field.Description = tmpBaseField.Description;\r\n this.field.Required = tmpBaseField.Required;\r\n this.field.FieldType = tmpBaseField.FieldType;\r\n this.field.Formula = tmpBaseField.Formula;\r\n this.field.ColSpanSizes = tmpBaseField.ColSpanSizes;\r\n this.field.InListView = tmpBaseField.InListView;\r\n this.field.Tooltip = tmpBaseField.Tooltip;\r\n this.field.Readonly = tmpBaseField.Readonly;\r\n this.field.FieldGroup = tmpBaseField.FieldGroup;\r\n this.field.VisibleIf = tmpBaseField.VisibleIf;\r\n }\r\n }\r\n\r\n // private configureColumns() {\r\n // this.metadataColumns = [\r\n // {\r\n // key: 'action', display: '', type: TypeColumn.MenuAction, buttonMenuIcon: 'more_vert', styles: { flex: '0 0 6%' },\r\n // actions: [\r\n // { name: 'Modifica', icon: 'edit', fn: (element, index, col) => this.openMetadataDialog(element) },\r\n // { name: 'Elimina', icon: 'delete', fn: (element, index, col) => this.deleteMetadata(element) },\r\n // ]\r\n // },\r\n // { key: 'FieldType', display: 'Tipologia', type: TypeColumn.Enum, enumModel: FieldTypeEnum },\r\n // { key: 'Label', display: 'Label' },\r\n // { key: 'Description', display: 'Descrizione' },\r\n // {\r\n // key: 'Required', display: 'Obbligatorio',\r\n // value: (element) => !!element.Required,\r\n // type: TypeColumn.Boolean,\r\n // booleanValues: {\r\n // true: '<i class=\"fa fa-check success-color\"></i>',\r\n // false: '<i class=\"fa fa-close error-color\"></i>'\r\n // },\r\n // styles: { flex: '0 0 7%', cellAlignment: CellAlignmentEnum.CENTER }\r\n // },\r\n // ];\r\n // }\r\n\r\n /**\r\n * Metodo per eliminare un metadata aggiunto per un campo di tipo Allegato o Immagine.\r\n * @param metadata Metadata da eliminare.\r\n */\r\n // private deleteMetadata(metadata: BaseField) {\r\n // EqpDynamicModuleDialogService.Confirm('Eliminare il metadata selezionato?', () => {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // (this.field as AttachmentField).MetadataFields.splice((this.field as AttachmentField).MetadataFields.indexOf(metadata), 1);\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields.splice((this.field as ImageField).AttachDefinition.MetadataFields.indexOf(metadata), 1);\r\n // }\r\n // this.setMetadataOrdinalPosition();\r\n // this.reloadMetadataTable();\r\n // }, false, 'Richiesta conferma');\r\n // }\r\n\r\n /**\r\n * Imposta l'ordinamento dei metadata all'interno dei campi di tipo Allegato e Immagine.\r\n */\r\n // private setMetadataOrdinalPosition() {\r\n // if (this.field.FieldType === FieldTypeEnum.Allegato) {\r\n // if ((this.field as AttachmentField).MetadataFields) {\r\n // (this.field as AttachmentField).MetadataFields.forEach(metadata => {\r\n // metadata.OrdinalPosition = (this.field as AttachmentField).MetadataFields.indexOf(metadata);\r\n // });\r\n // }\r\n // } else if (this.field.FieldType === FieldTypeEnum.Immagine) {\r\n // if ((this.field as ImageField).AttachDefinition.MetadataFields) {\r\n // (this.field as ImageField).AttachDefinition.MetadataFields.forEach(metadata => {\r\n // metadata.OrdinalPosition = (this.field as ImageField).AttachDefinition.MetadataFields.indexOf(metadata);\r\n // });\r\n // }\r\n // }\r\n // }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della tabella dei metadata visualizzata nella creazione/modifica\r\n * dei campi di tipo Allegato o Immagine.\r\n */\r\n // private reloadMetadataTable() {\r\n // if (this.metadataFieldsTable) {\r\n // this.metadataFieldsTable.reloadDatatable();\r\n // }\r\n // }\r\n}\r\n","<!-- <div class=\"add-form-field bigwrapper\" style=\"max-height: 100vh !important; overflow-x: hidden; overflow-y: auto;\"> -->\r\n\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n {{indexField != null && indexField >= 0 ? \"Modifica\" : \"Aggiungi\"}} campo\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent \">\r\n <form [formGroup]=\"fieldFormGroup\" style=\"height: 100%;\">\r\n <!--#region AREA PRINCIPALE -->\r\n <div class=\"row eqp-dform-add-form-field-main\">\r\n <!--#region TIPO CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 tipoCampo\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldType'].status != 'VALID' && fieldFormGroup.controls['FieldType'].touched }\">\r\n Tipo campo *\r\n </mat-label>\r\n <eqp-select [enumData]=\"FieldTypeEnum\" [(ngModelInput)]=\"field.FieldType\"\r\n [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange()\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'FieldType'\"\r\n [enumDataToExclude]=\"fieldTypesToExclude\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO CAMPO -->\r\n\r\n <!--#region CODICE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Label'].status != 'VALID' && fieldFormGroup.controls['Label'].touched }\">\r\n Codice *\r\n </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Label\" required matInput [(ngModel)]=\"field.Label\"\r\n (keypress)=\"omit_special_char($event)\" spellcheck=\"false\" autocomplete=\"off\"\r\n (focusout)=\"stringSanitizer(field.Label)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Label') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['pattern']\">\r\n Si possono inserire solo lettere a-z\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion CODICE -->\r\n\r\n <!--#region DESCRIZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['Description'].status != 'VALID' && fieldFormGroup.controls['Description'].touched }\">\r\n Descrizione *\r\n </mat-label>\r\n <mat-form-field>\r\n <input name=\"Description\" formControlName=\"Description\" required matInput\r\n [(ngModel)]=\"field.Description\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Description)\">\r\n <!-- <mat-error *ngIf=\"!field.Description.valid && field.FormFormGroup.controls[field.Description].touched\"> -->\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Description') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion DESCRIZIONE -->\r\n\r\n <!--#region FORMULA -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Formula (Javascript) </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"Formula\" matInput [(ngModel)]=\"field.Formula\"\r\n (click)=\"openFormulaDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formula)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formula') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Formula'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FORMULA -->\r\n\r\n <!--#region SEZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\" *ngIf=\"formFieldsGroups\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldGroup'].status != 'VALID' && fieldFormGroup.controls['FieldGroup'].touched }\">Sezione\r\n *</mat-label>\r\n <eqp-select [arrayData]=\"formFieldsGroups\" [(ngModelInput)]=\"field.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'FieldGroup'\" required [includeFullObject]=\"false\">\r\n </eqp-select>\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldGroup') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['FieldGroup'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </div>\r\n <!--#endregion SEZIONE -->\r\n\r\n <!--#region OBBLIGATORIO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Required\" formControlName=\"Required\"\r\n color=\"primary\">\r\n Obbligatorio\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion OBBLIGATORIO -->\r\n\r\n <!--#region READONLY -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Readonly\" formControlName=\"Readonly\"\r\n color=\"primary\">\r\n ReadOnly\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion READONLY -->\r\n\r\n </div>\r\n <!--#endregion AREA PRINCIPALE -->\r\n\r\n <!--#region AREA TABS -->\r\n <mat-tab-group class=\"eqp-dform-add-form-field-tabs\" mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\r\n <!--#region STILE COMPILAZIONE -->\r\n <mat-tab label=\"Stile Compilazione\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizes\" [(ngModelInput)]=\"field.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'ColSpanSizes'\"\r\n [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['LabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['FieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n \r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['VisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n <!--#region TOOLTIP -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Tooltip </mat-label>\r\n <mat-form-field>\r\n <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput [(ngModel)]=\"field.Tooltip\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Tooltip') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['required']\">\r\n Obbligatorio\r\n </li>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['Tooltip'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion TOOLTIP -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE COMPILAZIONE -->\r\n\r\n <!--#region STILE DELLA RISPSOTA -->\r\n <mat-tab label=\"Stile Risposta\">\r\n <div class=\"row\">\r\n\r\n <!--#region LARGHEZZA CAMPO -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Larghezza campo</mat-label>\r\n <eqp-select [arrayData]=\"availableColSpanSizes\" [(ngModelInput)]=\"field.AnswerStyle.ColSpanSizes\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n (ngModelInputChange)=\"onColSpanSizeSelect()\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AnswerStyleColSpanSizes'\"\r\n [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion LARGHEZZA CAMPO -->\r\n\r\n <!--#region LABEL CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Label css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleLabelstyleCSS\" formControlName=\"AnswerStyleLabelstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.LabelstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.LabelstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('LabelstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleLabelstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LABEL CSS -->\r\n\r\n <!--#region FIELD CSS -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Field css </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleFieldstyleCSS\" formControlName=\"AnswerStyleFieldstyleCSS\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.FieldstyleCSS\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.FieldstyleCSS)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('FieldstyleCSS') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleFieldstyleCSS'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FIELD CSS -->\r\n\r\n <!--#region VISIBLE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n [hidden]=\"(field.AnswerStyle.VisibleIf != null || field.AnswerStyle.VisibleIf != undefined) && field.AnswerStyle.VisibleIf != ''\">\r\n <div class=\" align-self-center\">\r\n <mat-slide-toggle [(ngModel)]=\"field.AnswerStyle.InListView\" formControlName=\"AnswerStyleInListView\"\r\n color=\"primary\" [disabled]=\"fieldFormGroup.controls['AnswerStyleInListView'].disabled\">\r\n Visibile\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <!--#endregion VISIBLE -->\r\n\r\n <!--#region VISIBLE IF -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> VisibleIf </mat-label>\r\n <mat-form-field>\r\n <input name=\"AnswerStyleVisibleIf\" formControlName=\"AnswerStyleVisibleIf\" matInput\r\n [(ngModel)]=\"field.AnswerStyle.VisibleIf\" (click)=\"openAnswerStyleVisibleIfDialog()\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.AnswerStyle.VisibleIf)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('VisibleIf') }} -->\r\n <ul>\r\n <li\r\n *ngIf=\"fieldFormGroup.controls['AnswerStyleVisibleIf'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <mat-form-field>\r\n <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput [(ngModel)]=\"field.VisibleIf\"\r\n [matAutocomplete]=\"VisibleIfAutocomplete\" (keyup)=\"setVisibleIfAutocompleteOptions($event)\"\r\n (focus)=\"setVisibleIfAutocompleteOptions(null)\" (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n <mat-autocomplete #VisibleIfAutocomplete=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of VisibleIfAutocompleteOptions\" [value]=\"option.value\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field> -->\r\n </div>\r\n <!--#endregion VISIBLE IF -->\r\n\r\n </div>\r\n </mat-tab>\r\n <!--#endregion STILE DELLA RISPSOTA -->\r\n\r\n <!--#region SPECIFICHE -->\r\n <mat-tab label=\"Specifiche\">\r\n <div class=\"row\">\r\n <ng-container *ngTemplateOutlet=\"fieldTypeFormTemplate\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n <!--#endregion SPECIFICHE -->\r\n\r\n </mat-tab-group>\r\n <!--#region AREA TABS -->\r\n\r\n <!--#region listValueFieldFormTemplate vallues -->\r\n \r\n <!--#endregion listValueFieldFormTemplate vallues -->\r\n\r\n </form>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-footer>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\">\r\n <!-- <div class=\"buttonsForma\"> -->\r\n <button class=\"btn mat-raised-button cancel\" (click)=\"saveAndExitAddField(false)\" type=\"button\">\r\n Annulla\r\n </button>\r\n <span class=\"me-2\"></span>\r\n <button class=\"mr-2 save\" mat-raised-button color=\"primary\" (click)=\"saveAndExitAddField(true)\"\r\n [disabled]=\"disableSaveField()\" type=\"button\">\r\n Salva\r\n </button>\r\n <!-- </div> -->\r\n </div>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- </div> -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI DI TESTO -->\r\n<ng-template #textFieldFormTemplate>\r\n <!--#region MASCHERA -->\r\n <div class=\"col-sm-12 col-md-6\">\r\n <mat-label>Maschera</mat-label>\r\n <eqp-select [enumData]=\"TextMaskEnum\" [(ngModelInput)]=\"field.TextMask\" [formGroupInput]=\"fieldFormGroup\"\r\n [formControlNameInput]=\"'TextMask'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion MASCHERA -->\r\n\r\n <!--#region SPEECH TO TEXT -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SPEECH TO TEXT -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MinLenght'].status != 'VALID' && fieldFormGroup.controls['MinLenght'].touched }\">\r\n Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n [ngClass]=\"{'text-danger': fieldFormGroup.controls['MaxLenght'].status != 'VALID' && fieldFormGroup.controls['MaxLenght'].touched }\">\r\n Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI DI TESTO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI AREA DI TESTO -->\r\n<ng-template #textareaFieldFormTemplate>\r\n <!--#region RIGHE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Righe </mat-label>\r\n <mat-form-field class=\"righe\">\r\n <input id=\"rows\" formControlName=\"Rows\" type=\"number\" [min]=\"0\" matInput [(ngModel)]=\"field.Rows\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.Rows)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Rows') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion RIGHE -->\r\n\r\n <!--#region SpeechToText -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\" [hidden]=\"field.Readonly\">\r\n <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n Speech-To-Text\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SpeechToText -->\r\n\r\n <!--#region LUNGHEZZA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza minima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n <!--#region LUNGHEZZA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Lunghezza massima </mat-label>\r\n <mat-form-field>\r\n <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxLenght') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion LUNGHEZZA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI AREA DI TESTO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI BOOLEANI -->\r\n<ng-template #booleadFieldFormTemplate>\r\n <!--#region A TRE STATI -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsTristate\" formControlName=\"IsTristate\" color=\"primary\">\r\n A tre stati\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion A TRE STATI -->\r\n\r\n <!--#region TIPO PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di presentazione *</mat-label>\r\n <eqp-select [enumData]=\"BoolPresentantioEnum\" [(ngModelInput)]=\"field.PresetationType\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresetationType'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO PRESENTAZIONE -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI BOOLEANI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI DATA -->\r\n<ng-template #dateFieldFormTemplate>\r\n <!--#region TIPO DI DATA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label>Tipo di data</mat-label>\r\n <eqp-select [enumData]=\"DateTimeTypeEnum\" [(ngModelInput)]=\"field.IsOnlyDate\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IsOnlyDate'\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI DATA -->\r\n\r\n <!--#region FORMATO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Formato </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DateFormat\" matInput [(ngModel)]=\"field.DateFormat\"\r\n [matTooltip]=\"'Indicare il formato seguendo la guida del pacchetto momentjs.'\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formato)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('Formato') }} -->\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion FORMATO -->\r\n\r\n <!--#region DATA MINIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data minima </mat-label>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"pickerModeEnum.DATE\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"pickerModeEnum.DATETIME\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MinDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MinDate'\"\r\n [pickerMode]=\"pickerModeEnum.TIME\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MINIMA -->\r\n\r\n <!--#region DATA MASSIMA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\">\r\n <mat-label> Data massima </mat-label>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"pickerModeEnum.DATE\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"pickerModeEnum.DATETIME\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n <eqp-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n [(ngModelInput)]=\"field.MaxDate\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'MaxDate'\"\r\n [pickerMode]=\"pickerModeEnum.TIME\" [UTCDate]=\"true\" [showSeconds]=\"false\">\r\n </eqp-datetimepicker>\r\n </div>\r\n <!--#endregion DATA MASSIMA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI DATA -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI NUMERICI -->\r\n<ng-template #numericFieldFormTemplate>\r\n <!--#region VALORE INTERO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsInteger\" formControlName=\"IsInteger\" color=\"primary\">\r\n Valore intero\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion VALORE INTERO -->\r\n\r\n <!--#region SEPARATORE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalSeparator\" matInput [(ngModel)]=\"field.DecimalSeparator\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.DecimalSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['pattern']\">\r\n Non è possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE DECIMALI -->\r\n\r\n <!--#region PRECISIONE DECIMALI -->\r\n <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Precisione decimali </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"DecimalPrecision\" type=\"number\" [min]=\"0\" matInput\r\n [(ngModel)]=\"field.DecimalPrecision\" spellcheck=\"false\" autocomplete=\"off\"\r\n (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.DecimalPrecision)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('DecimalPrecision') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion PRECISIONE DECIMALI -->\r\n\r\n <!--#region SEPARATORE MIGLIAIA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Separatore migliaia </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ThousandsSeparator\" matInput [(ngModel)]=\"field.ThousandsSeparator\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.ThousandsSeparator)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('ThousandsSeparator') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['pattern']\">\r\n Non è possibile inserire dei numeri.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['ThousandsSeparator'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SEPARATORE MIGLIAIA -->\r\n\r\n <!--#region SIMBOLO VALUTA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo prima del valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Simbolo valuta </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"CurrencySymbol\" matInput [(ngModel)]=\"field.CurrencySymbol\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.CurrencySymbol)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('CurrencySymbol') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['CurrencySymbol'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion SIMBOLO VALUTA -->\r\n\r\n <!--#region UNITA DI MISURA -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label\r\n matTooltip=\"Simbolo dopo il valore\"\r\n matTooltipClass=\"example-tooltip-uppercase\"\r\n > Unità di misura </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MeasureUnit\" matInput [(ngModel)]=\"field.MeasureUnit\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.MeasureUnit)\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MeasureUnit') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MeasureUnit'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion UNITA DI MISURA -->\r\n\r\n <!--#region VALORE MINIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore minimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MinValue\" type=\"number\" matInput [(ngModel)]=\"field.MinValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MinValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MinValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MINIMO -->\r\n\r\n <!--#region VALORE MASSIMO -->\r\n <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Valore massimo </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"MaxValue\" type=\"number\" matInput [(ngModel)]=\"field.MaxValue\" spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxValue)\"\r\n pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n <mat-error>\r\n <!-- {{ getFormValidationErrors('MaxValue') }} -->\r\n <ul>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['pattern']\">\r\n Inserire un valore numerico.\r\n </li>\r\n <li *ngIf=\"fieldFormGroup.controls['MaxValue'].errors?.['Missing Parenthesis']\">\r\n Attenzione, ci sono parentesi non chiuse.\r\n </li>\r\n </ul>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!--#endregion VALORE MASSIMO -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI NUMERICI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI ALLEGATO -->\r\n<ng-template #attachmentFieldFormTemplate>\r\n <!--#region ALLEGATI MULTIPLI -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiAttach\" formControlName=\"IsMultiAttach\" color=\"primary\">\r\n Allegati multipli\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion ALLEGATI MULTIPLI -->\r\n\r\n <!--#region ESTENSIONI ACCETTATE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Estensioni accettate</mat-label>\r\n <eqp-select [arrayData]=\"AvailableFileExtensions.concat(AvailableImageExtensions)\"\r\n [(ngModelInput)]=\"field.AllowedExtensions\" [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedExtensions'\"\r\n [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion ESTENSIONI ACCETTATE -->\r\n\r\n <!-- <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 col-md-6\">\r\n <div class=\"header-title-standard\">\r\n Elenco metadata\r\n </div>\r\n </div>\r\n <div class=\"col-sm-12 col-md-6 text-right buttonsForm\">\r\n <button class=\"btn btn-primary save\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"openMetadataDialog()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px;\">Aggiungi allegato</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table #metadataFieldsTable [createMatCard]=\"false\" [columns]=\"metadataColumns\"\r\n [data]=\"field.MetadataFields\" [emptyTableMessage]=\"'Nessun metadata inserito'\" [searchText]=\"'Cerca'\">\r\n </eqp-table>\r\n </div> -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI ALLEGATO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI IMMAGINE -->\r\n<ng-template #imageFieldFormTemplate>\r\n <div class=\"col-sm-12 col-md-4 mt-2 mb-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.ImageIsContextualAttachment\" formControlName=\"ImageIsContextualAttachment\"\r\n color=\"primary\" (ngModelChange)=\"onImageIsContextualAttachmentChange()\">\r\n Immagine pre-caricata nel campo\r\n </mat-slide-toggle>\r\n </div>\r\n <!-- CAMPO NASCOSTO DA RIPARARE FUNZIONAMENTO -->\r\n <div [hidden]=\"true\" class=\"col-sm-12 col-md-4 mt-2 mb-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.EnableDrawing\" formControlName=\"EnableDrawing\" color=\"primary\">\r\n Abilita il disegno\r\n </mat-slide-toggle>\r\n </div>\r\n <!-- /. CAMPO DA RIPARARE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\"\r\n *ngIf=\"!field.ImageIsContextualAttachment\">\r\n <mat-slide-toggle [(ngModel)]=\"field.AttachDefinition.IsMultiAttach\" formControlName=\"IsMultiAttach\"\r\n color=\"primary\">\r\n Immagini multiple\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" *ngIf=\"!field.ImageIsContextualAttachment\">\r\n <mat-label>Estensioni accettate</mat-label>\r\n <eqp-select [arrayData]=\"AvailableImageExtensions\" [(ngModelInput)]=\"field.AttachDefinition.AllowedExtensions\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\" [isMultiSelect]=\"true\"\r\n [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedExtensions'\" [includeFullObject]=\"false\">\r\n </eqp-select>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\" *ngIf=\"field.ImageIsContextualAttachment\">\r\n <mat-label> Nome immagine* </mat-label>\r\n <mat-form-field>\r\n <input formControlName=\"ImgName\" matInput [(ngModel)]=\"field.ImgName\" required spellcheck=\"false\"\r\n autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.ImgName)\">\r\n <mat-error>\r\n {{ getFormValidationErrors('ImgName') }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\" *ngIf=\"field.ImageIsContextualAttachment\">\r\n <eqp-attachments [attachmentsList]=\"field._contextualAttachments\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n (localEditedAttachments)=\"catchContextualAttachmentChange($event)\" #contextualAttachmentEqpAttachments>\r\n </eqp-attachments>\r\n </div>\r\n <!-- <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row mt-2\">\r\n <div class=\"col-sm-12 col-md-6\">\r\n <div class=\"header-title-standard\">\r\n Elenco metadata\r\n </div>\r\n </div>\r\n <div class=\"col-sm-12 col-md-6 text-right buttonsForm\">\r\n <button class=\"btn btn-primary save\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"openMetadataDialog()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px;\">Aggiungi</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table #metadataFieldsTable [createMatCard]=\"false\" [columns]=\"metadataColumns\"\r\n [data]=\"field.AttachDefinition.MetadataFields\" [emptyTableMessage]=\"'Nessun metadata inserito'\"\r\n [searchText]=\"'Cerca'\">\r\n </eqp-table>\r\n </div> -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI IMMAGINE -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI LISTA DI VALORI -->\r\n<ng-template #listValueFieldFormTemplate>\r\n <!--#region SCELTA MULTIPLA -->\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n Scelta multipla\r\n </mat-slide-toggle>\r\n </div>\r\n <!--#endregion SCELTA MULTIPLA -->\r\n\r\n <!--#region TIPO DI PRESENTAZIONE -->\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label>Tipo di presentazione*</mat-label>\r\n <eqp-select [enumData]=\"ListPresentationEnum\" [(ngModelInput)]=\"field.PresentationMode\" required\r\n [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresentationMode'\"\r\n (ngModelInputChange)=\"onPresentationModeChange()\">\r\n </eqp-select>\r\n </div>\r\n <!--#endregion TIPO DI PRESENTAZIONE -->\r\n \r\n <!--#region GESTIONE OPZIONI CASO PRESENTAZIONE AD IMMAGINI -->\r\n <div class=\"col-sm-12 col-md-12 mt-2\" *ngIf=\"field.PresentationMode == ListPresentationEnum.Immagini\">\r\n <eqp-attachments [attachmentsList]=\"field.ButtonImageList\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"true\" [showHeader]=\"false\"\r\n [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"catchButtonImagesChange($event)\"\r\n (onComponentLoaded)=\"configureButtonImagesColumns($event)\">\r\n </eqp-attachments>\r\n </div>\r\n <!--#endregion GESTIONE OPZIONI CASO PRESENTAZIONE AD IMMAGINI -->\r\n\r\n <!--#region GESTIONE OPZIONI -->\r\n <div class=\"col-sm-12 mt-2\" *ngIf=\"field.PresentationMode != ListPresentationEnum.Immagini\">\r\n\r\n <mat-label> area dei valori da inserire </mat-label>\r\n <mat-form-field>\r\n <textarea matInput \r\n placeholder=\"key1|value1;key2|value2\" \r\n [(ngModel)]=\"field.ValueString\"\r\n spellcheck=\"false\" \r\n autocomplete=\"off\"\r\n >\r\n </textarea>\r\n </mat-form-field>\r\n\r\n <!-- <div class=\"row\">\r\n <h4 class=\"key-value-list-section-title\"> </h4>\r\n <div class=\"col-md-4\">\r\n <mat-label> Label opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.key\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <mat-label> Valore opzione (invio per confermare)</mat-label>\r\n <mat-form-field>\r\n <input matInput [(ngModel)]=\"keyValueObject.value\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-4 align-self-center\">\r\n <span class=\"mr-3\">Opzioni inserite:</span>\r\n <ul class=\"value-pairs-list\">\r\n <li *ngFor=\"let keyValuePair of getDictionaryKeyValue()\">\r\n <mat-icon class=\"mr-1\" (click)=\"deleteKeyFromDictionary(keyValuePair.key)\">close\r\n </mat-icon>\r\n <span><b>Label: </b> {{keyValuePair.key}} - <b>Valore: </b> {{keyValuePair.value}}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div> -->\r\n\r\n </div> \r\n <!--#endregion GESTIONE OPZIONI -->\r\n\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI LISTA DI VALORI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI LOOKUP -->\r\n<ng-template #lookupFieldFormTemplate>\r\n <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n <mat-slide-toggle [(ngModel)]=\"field.UseAsGetOrDiscard\" formControlName=\"UseAsGetOrDiscard\" color=\"primary\"\r\n matTooltip=\"Se true la lookup viene visualizzata in una modale per lo scegli scarta\">\r\n Usa per scegli o scarta\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n <mat-label> Nome entità </mat-label>\r\n <mat-form-field matTooltip=\"Nome dell'entità relazionata\">\r\n <input formControlName=\"EntitySourceName\" required matInput [(ngModel)]=\"field.EntitySourceName\"\r\n spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n (focusout)=\"stringSanitizer(field.EntitySourceName)\">\r\n <mat-error>\r\n {{ getFormValidationErrors('EntitySourceName') }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 mt-2\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <mat-label> Nomi dei campi (invio per confermare) </mat-label>\r\n <mat-form-field\r\n matTooltip=\"Elenco di campi ordinato che verrà visualizzato nella lookup (premere invio per confermare)\">\r\n <input matInput (keyup)=\"onMultiSelectInputKeyup($event, 'FieldNames')\" spellcheck=\"false\"\r\n autocomplete=\"off\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8 align-self-center\">\r\n <span class=\"mr-3\">Nomi selezionati:</span>\r\n <div class=\"extension-container\" *ngFor=\"let extension of field.FieldNames; let i = index\">\r\n <span>{{extension}}</span>\r\n <mat-icon class=\"ml-1\" (click)=\"field.FieldNames.splice(i,1)\">close\r\n </mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI LOOKUP -->\r\n\r\n<!-- DIALOG PER AGGIUNGERE UN METADATA NEI CAMPI DI TIPO ALLEGATO O IMMAGINE -->\r\n<!-- <ng-template #dialogMetadata>\r\n <eqp-dynamic-module-add-form-field [field]=\"selectedMetadata\" [availableFields]=\"availableFields\"\r\n [indexField]=\"indexSelectedMetadata\" (saveFieldEvent)=\"onSaveMetadata($event)\" [fieldTypesToExclude]=\"[6,7,10]\">\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template> -->\r\n\r\n<ng-template #buttonImagesKeyValueInputColumn let-row=\"row\" let-col=\"col\">\r\n <mat-form-field>\r\n <mat-label> {{col.display}} </mat-label>\r\n <input matInput [(ngModel)]=\"row[col.key]\" required spellcheck=\"false\" autocomplete=\"off\">\r\n </mat-form-field>\r\n</ng-template>\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>","// import { ThrowStmt } from '@angular/compiler';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport {\r\n UntypedFormBuilder,\r\n UntypedFormControl,\r\n UntypedFormGroup,\r\n Validators,\r\n} from \"@angular/forms\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport {\r\n CellAlignmentEnum,\r\n ConfigColumn,\r\n EqpTableComponent,\r\n TypeColumn,\r\n} from \"@eqproject/eqp-table\";\r\nimport { NumericField } from \"../../../models/fields/numericField.model\";\r\nimport { BaseField, ColSpanSizesEnum, FieldTypeEnum } from \"../../../models/baseField.model\";\r\nimport { Context } from \"../../../models/context.model\";\r\nimport {\r\n EndPointConfiguration,\r\n EndPointDataParams,\r\n ParamTypeEnum,\r\n} from \"../../../models/endPointConfiguration.model\";\r\nimport {\r\n ActionOnRecord,\r\n Form,\r\n FormFieldGroup,\r\n FormScalarTypeEnum,\r\n FormTypeEnum,\r\n} from \"../../../models/form.model\";\r\nimport { ArrayValidators } from \"../../../services/custom-form-validators.service\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { DynamicModuleCompileConfig } from \"../../../models/dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleConfiguratorConfig } from \"../../../models/dynamicModuleConfiguratorConfig.model\";\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\n\r\n@Component({\r\n selector: \"eqp-dynamic-module-configurator\",\r\n templateUrl: \"./eqp-dynamic-module-configurator.component.html\",\r\n styleUrls: [\"./eqp-dynamic-module-configurator.component.scss\"],\r\n})\r\nexport class EqpDynamicModuleConfiguratorComponent implements OnInit {\r\n \r\n @Input() debugMode: boolean = false;\r\n\r\n @Input() configurations: DynamicModuleConfiguratorConfig =\r\n new DynamicModuleConfiguratorConfig();\r\n @Input() formID: string = null;\r\n @Input() viewMode: string = \"addOrEdit\"; // Export\r\n\r\n loader: boolean = false;\r\n /**\r\n * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n */\r\n userToken: string = null;\r\n /**\r\n * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n */\r\n endPointConfiguration: EndPointConfiguration = null;\r\n /**\r\n * Url del server da chiamare per recuerare, salvare o eliminare i record.\r\n * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n */\r\n baseServerUrl: string = null;\r\n context: Context = new Context();\r\n\r\n /* export variables */\r\n downloadName: string;\r\n downloadJsonHref: any;\r\n stringifiedForm: string;\r\n\r\n /* import variables */\r\n importedModule: string = null; // json object\r\n dialogImportRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogImport\", { static: true }) dialogImport: TemplateRef<any>;\r\n\r\n form: Form = new Form();\r\n orgaID: string = null;\r\n UserID: number = 36;\r\n innerFormManagment: boolean = false;\r\n innerFormRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n /* CONFIGURAZIONE PER VISUALIZZAZIONE FORM CREATA */\r\n viewConfig: DynamicModuleCompileConfig = new DynamicModuleCompileConfig(\r\n true,\r\n false,\r\n false,\r\n \"0\"\r\n );\r\n\r\n formFormGroup: UntypedFormGroup;\r\n formCompleted = false;\r\n previewForm: Form;\r\n formFieldGroupName: string;\r\n\r\n actionAutocompleteOptions: Array<{ label: string; value: string }>;\r\n\r\n //#region Enumeratori usati nell'html\r\n FormTypeEnum = FormTypeEnum;\r\n FormScalarTypeEnum = FormScalarTypeEnum;\r\n //#endregion\r\n\r\n //#region Proprietà per creazione/modifica campo\r\n fieldsColumns: Array<ConfigColumn>;\r\n @ViewChild(\"fieldsTable\", { static: false }) fieldsTable: EqpTableComponent;\r\n selectedField: BaseField | any;\r\n indexSelectedField: number;\r\n actionOnRecordFormGroup: UntypedFormGroup;\r\n dialogFieldRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogField\", { static: true }) dialogField: TemplateRef<any>;\r\n @ViewChild(\"fieldSectionColumnTemplate\", { static: true })\r\n fieldSectionColumnTemplate: TemplateRef<any>;\r\n //#endregion\r\n\r\n //#region Proprietà per creare/modificare una Form di dettaglio\r\n selectedInnerForm: Form;\r\n indexSelectedInnerForm: number;\r\n dialogInnerFormRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogInnerForm\", { static: true })\r\n dialogInnerForm: TemplateRef<any>;\r\n innerFormConfig: DynamicModuleConfiguratorConfig;\r\n //#endregion\r\n\r\n //#region Proprietà per creare/modificare una action sui record di una Form\r\n actionsOnRecordColumns: Array<ConfigColumn>;\r\n @ViewChild(\"actionsOnRecordTable\", { static: false })\r\n actionsOnRecordTable: EqpTableComponent;\r\n selectedAction: ActionOnRecord;\r\n indexSelectedAction: number;\r\n dialogActionOnRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild(\"dialogActionOnRecord\", { static: true })\r\n dialogActionOnRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n /**\r\n * Evento emesso quando si salva una form e non è stato specificato un endpoint da chiamare.\r\n */\r\n @Output() saveFormEvent: EventEmitter<Form> = new EventEmitter<Form>();\r\n\r\n /**\r\n * Evento emesso DOPO aver eseguito una chiamata al server per il salvataggiodi una form all'endpoint specificato.\r\n */\r\n @Output() afterSaveFormEvent: EventEmitter<Form> = new EventEmitter<Form>();\r\n\r\n constructor(\r\n private formBuilder: UntypedFormBuilder,\r\n private dialog: MatDialog,\r\n private utilityHelperService: UtilityHelperService,\r\n private sanitizer: DomSanitizer\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n GlobalService.debugMode = this.debugMode;\r\n GlobalService.debugLog('ngOnInit - configurations', this.configurations);\r\n GlobalService.debugLog('ngOnInit - formID', this.formID);\r\n\r\n this.baseServerUrl =\r\n this.configurations.dynamicModuleGeneralConfig.baseServerUrl;\r\n this.context = this.configurations.dynamicModuleGeneralConfig.context;\r\n this.endPointConfiguration =\r\n this.configurations.dynamicModuleGeneralConfig.endPointConfiguration;\r\n // this.formID = this.configurations.dynamicModuleGeneralConfig.formID;\r\n this.userToken = this.configurations.dynamicModuleGeneralConfig.userToken;\r\n\r\n this.form =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.form;\r\n this.orgaID =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.orgaID;\r\n this.UserID =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.UserID;\r\n this.innerFormManagment =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.innerFormManagment;\r\n this.innerFormRef =\r\n this.configurations.dynamicModuleConfiguratorSpecificConfig.innerFormRef;\r\n\r\n this.configureDefaultEndPoints();\r\n this.getFormByID();\r\n if (this.context) {\r\n UtilityHelperService.SetContext(this.context);\r\n }\r\n this.loader = true;\r\n }\r\n\r\n /**\r\n * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n * a cui si deve connettere e al token da passare per autenticarsi.\r\n * Se la proprietà baseServerUrl è null e non sono stati configurati i vari endpoint allora\r\n * non viene eseguita nessuna chiamata http per recuperare/salvare i dati.\r\n */\r\n configureDefaultEndPoints() {\r\n if (!this.endPointConfiguration && this.baseServerUrl) {\r\n this.endPointConfiguration =\r\n this.utilityHelperService.ConfigureDefaultEndPoints(\r\n this.baseServerUrl,\r\n this.userToken\r\n );\r\n if (this.formID) {\r\n this.endPointConfiguration.Forms.GetByIDEndPoint.Params = [\r\n {\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n },\r\n ];\r\n }\r\n }\r\n }\r\n stringSanitizer(value) {\r\n if (!UtilityHelperService.stringCheckParentesis(value)) {\r\n alert(\"errore! erano presenti delle parentesi.\");\r\n return false\r\n } else {\r\n return true\r\n }\r\n }\r\n setName(Name: string) {\r\n if(!this.stringSanitizer(Name)){\r\n const RegExpParetesis = /[\\(\\)\\[\\]\\{\\}]/g;\r\n // Rimuovi tutte le parentesi non bilanciate\r\n this.form.Name = Name.replace(RegExpParetesis, '');\r\n }\r\n if(this.form.ID == null){ // this.form.Code == null || this.form.Code == undefined || this.form.Code == \"\" ){\r\n this.setCode(this.form.Name);\r\n }\r\n }\r\n setCode(Code: string) {\r\n this.stringSanitizer(Code);\r\n \r\n const RegExpPlain = /[^\\w]/g;\r\n this.form.Code = Code.toUpperCase().replace(RegExpPlain, \"\");\r\n }\r\n omit_special_char(event) {\r\n var k;\r\n k = event.keyCode; // k = event.keyCode; (Both can be used)\r\n if (k == 34) {\r\n event.keyCode = 0;\r\n return false;\r\n }\r\n }\r\n\r\n /* IMPORT FUNCTION */\r\n onImport(event) {\r\n const selectedFile = event.target.files[0];\r\n const fileReader = new FileReader();\r\n fileReader.readAsText(selectedFile, \"UTF-8\");\r\n fileReader.onload = () => {\r\n GlobalService.debugLog('onImport - fileReader.result.toString()', fileReader.result.toString());\r\n this.importedModule = fileReader.result.toString();\r\n\r\n if (this.importedModule != null) {\r\n if (confirm(\"stai per sovrascrivere il modulo\")) {\r\n // chiamo il parse così da non creare un referenceBinding\r\n this.setFormAndConfigure(JSON.parse(this.importedModule));\r\n this.closeImport();\r\n }\r\n } else {\r\n alert(\"seleziona un file\");\r\n }\r\n };\r\n fileReader.onerror = (error) => {\r\n alert(\"seleziona un file valido o controlla che non sia corrotto\");\r\n console.error(error);\r\n };\r\n }\r\n\r\n importModule() {\r\n this.dialogImportRef = this.dialog.open(this.dialogImport, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n // width: \"75%\",\r\n // maxHeight: \"80%\",\r\n // height: \"80%\",\r\n });\r\n }\r\n\r\n closeImport() {\r\n this.dialogImportRef.close();\r\n }\r\n /* END IMPORT FUNCTION */\r\n\r\n /**\r\n * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n */\r\n getFormByID() {\r\n if (\r\n this.formID &&\r\n this.endPointConfiguration &&\r\n this.endPointConfiguration.Forms &&\r\n this.endPointConfiguration.Forms.GetByIDEndPoint\r\n ) {\r\n const dynamicModuleParams: Array<EndPointDataParams> =\r\n new Array<EndPointDataParams>();\r\n dynamicModuleParams.push({\r\n ParamName: \"id\",\r\n ParamValue: this.formID,\r\n ParamType: ParamTypeEnum[\"Query param\"],\r\n });\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n dynamicModuleParams,\r\n (res: Form) => {\r\n /* getting ready for export */\r\n let clone = new Form();\r\n clone.Code = \"IMPORT_\" + res.Code;\r\n clone.Name = \"import_\" + res.Name;\r\n clone.Description = res.Description;\r\n clone.FormScalarType = res.FormScalarType;\r\n clone.FormFieldsGroups = res.FormFieldsGroups;\r\n clone.ActionsOnRecord = res.ActionsOnRecord;\r\n clone.Fields = res.Fields;\r\n clone.ObjectFields = res.ObjectFields;\r\n clone.InnerForms = res.InnerForms;\r\n clone.RootEntityID = res.RootEntityID;\r\n\r\n this.downloadName = \"export_\" + res.Name;\r\n this.stringifiedForm = JSON.stringify(clone);\r\n this.downloadJsonHref = this.sanitizer.bypassSecurityTrustUrl(\r\n \"data:text/json;charset=UTF-8,\" +\r\n encodeURIComponent(this.stringifiedForm)\r\n );\r\n /* end export */\r\n\r\n this.setFormAndConfigure(res);\r\n },\r\n (err) => {\r\n this.setFormAndConfigure(new Form());\r\n }\r\n );\r\n } else {\r\n this.setFormAndConfigure();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del tipo di visualizzazione della form.\r\n * Se l'utente sceglie una visualizzazione raggruppata il metodo aggiunge al FormGroup un nuovo\r\n * controllo per l'array dei nomi delle sezioni da creare.\r\n */\r\n onChangeFormScalarType() {\r\n if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n if (!this.formFormGroup.contains(\"FormFieldsGroups\")) {\r\n this.formFormGroup.removeControl(\"FormFieldsGroups\");\r\n this.formFormGroup.addControl(\r\n \"FormFieldsGroups\",\r\n new UntypedFormControl(this.form.FormFieldsGroups, [\r\n Validators.required,\r\n ArrayValidators.minLenght(1),\r\n ])\r\n );\r\n }\r\n } else {\r\n this.form.FormFieldsGroups = null;\r\n if (this.formFormGroup.contains(\"FormFieldsGroups\"))\r\n this.formFormGroup.removeControl(\"FormFieldsGroups\");\r\n }\r\n this.formFormGroup.updateValueAndValidity();\r\n this.configureColumns();\r\n }\r\n\r\n /**\r\n * Evento invocato al keyup nell'input per inserire i nomi delle sezioni per la visualizzazione\r\n * raggruppata della form. Quanto l'utente preme il tasto invio viene aggiunto il nuovo nome alle\r\n * sezioni dispobili se non ne esiste una con lo stesso nome.\r\n * @param event Evento che rappresenta il keyup sulla tastiera.\r\n */\r\n onFormFieldGroupNameKeyUp(event) {\r\n if (event.code === \"Enter\" || event.code === \"NumpadEnter\") {\r\n if (!this.form.FormFieldsGroups) {\r\n this.form.FormFieldsGroups = new Array<FormFieldGroup>();\r\n }\r\n if (\r\n !this.form.FormFieldsGroups.find(\r\n (n) => n.Name == this.formFieldGroupName\r\n )\r\n ) {\r\n this.form.FormFieldsGroups.push({ Name: this.formFieldGroupName });\r\n }\r\n // Imposto il nuovo valore del FormControl per aggiornare lo stato della form.\r\n this.formFormGroup.controls[\"FormFieldsGroups\"].setValue(\r\n this.form.FormFieldsGroups\r\n );\r\n this.formFieldGroupName = null;\r\n this.setFormFieldGroupOrdinalPosition();\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per rimuovere la sezione selezionata da quelle disponibili per la form.\r\n * @param groupName Nome della sezione da eliminare.\r\n */\r\n onDeleteFormFieldGroupName(groupName: string) {\r\n this.form.FormFieldsGroups.splice(\r\n this.form.FormFieldsGroups.findIndex((g) => g.Name === groupName),\r\n 1\r\n );\r\n // Imposto il nuovo valore del FormControl per aggiornare lo stato della form.\r\n this.formFormGroup.controls[\"FormFieldsGroups\"].setValue(\r\n this.form.FormFieldsGroups\r\n );\r\n // Se esistono Field legati alla sezione che si vuole eliminare allora rompo il legame.\r\n if (this.form.Fields.find((f) => f.FieldGroup == groupName)) {\r\n this.form.Fields.filter((f) => f.FieldGroup == groupName).forEach(\r\n (f) => (f.FieldGroup = null)\r\n );\r\n }\r\n this.setFormFieldGroupOrdinalPosition();\r\n }\r\n\r\n /**\r\n * Metodo chiamato quando si vuole aggiungere un nuovo campo o si vuole modificare uno esistente.\r\n * Memorizza l'eventuale Field scelto one crea uno nuovo prima di aprire il dialog per modificarlo/aggiungerlo.\r\n * @param field Oggetto BaseField da modificare. Se null ne viene creata una nuova istanza per l'aggiunta.\r\n */\r\n openFieldDialog(field: BaseField = null) {\r\n if (field) {\r\n this.indexSelectedField = this.form.Fields.indexOf(field);\r\n this.selectedField = JSON.parse(JSON.stringify(field));\r\n if(this.selectedField.AnswerStyle == null){\r\n this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: \"\", LabelstyleCSS: \"\", ColSpanSizes: [] };\r\n }\r\n console.log('this.selectedField', this.selectedField)\r\n } else {\r\n this.selectedField = new BaseField();\r\n this.indexSelectedField = null;\r\n }\r\n this.dialogFieldRef = this.dialog.open(this.dialogField, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n height: \"80%\",\r\n });\r\n }\r\n\r\n /**\r\n * Metodo che salva il campo appena creato o modificato.\r\n * Prima del salvataggio controlla se esiste un altro campo con la stessa label, in questo\r\n * case genere un errore (i campi devono avere nomi, e quindi label, univoche - i nomi vengono\r\n * ricavati unendo le parole che formano la label tramite \"_\").\r\n * @param field Campo da salvare\r\n */\r\n onSaveField(field: BaseField) {\r\n if (field) {\r\n if (\r\n this.form.Fields &&\r\n this.form.Fields.find(\r\n (f, i) =>\r\n f.Label === field.Label &&\r\n (this.indexSelectedField == null\r\n ? true\r\n : this.indexSelectedField !== i)\r\n )\r\n ) {\r\n EqpDynamicModuleDialogService.Warning(\r\n \"Impossibile inserire due campi con lo stesso Codice.\"\r\n );\r\n throw new Error(\"Impossibile inserire due campi con lo stesso Codice.\");\r\n }\r\n\r\n if (this.indexSelectedField != null && this.indexSelectedField >= 0) {\r\n this.form.Fields[this.indexSelectedField] = field;\r\n } else {\r\n if (!this.form.Fields) {\r\n this.form.Fields = new Array<BaseField>();\r\n }\r\n this.form.Fields.push(field);\r\n }\r\n }\r\n GlobalService.debugLog(\"onSaveField\", this.form)\r\n this.closeFieldDialog();\r\n this.setFieldOrdinalPosition();\r\n this.reloadFieldsTable();\r\n }\r\n\r\n /**\r\n * Metodo che controlla se lo step per l'aggiunta dei campi nella form è concluso.\r\n * @returns Se TRUE lo step viene considerato completato ed è possbile passare al successivo.\r\n */\r\n isFieldStepCompleted(): boolean {\r\n if (!this.form.Fields) {\r\n return false;\r\n }\r\n if (\r\n this.form.FormScalarType != FormScalarTypeEnum.Semplice &&\r\n this.form.Fields.find((f) => !f.FieldGroup)\r\n ) {\r\n return false;\r\n }\r\n return this.form.Fields.length > 0;\r\n }\r\n\r\n /**\r\n * Metodo per aprire il dialog di creazione/modifica delle form di dettaglio.\r\n * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica.\r\n * @param innenrForm Form di dettaglio da modificare (se null allora vado in add).\r\n */\r\n openInnerFormDialog(innenrForm: Form = null) {\r\n this.innerFormConfig = new DynamicModuleConfiguratorConfig();\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormManagment =\r\n true;\r\n // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form\r\n // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form.OldName\r\n // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormRef\r\n // [form]=\"selectedInnerForm\"\r\n // [innerFormManagment]=\"true\"\r\n // [innerFormRef]=\"dialogInnerFormRef\"\r\n\r\n if (innenrForm) {\r\n this.indexSelectedInnerForm = this.form.InnerForms.indexOf(innenrForm);\r\n\r\n // this.selectedInnerForm = JSON.parse(JSON.stringify(innenrForm));\r\n // this.selectedInnerForm.OldName = innenrForm.Name;\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form =\r\n JSON.parse(JSON.stringify(innenrForm));\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form.OldName =\r\n innenrForm.Name;\r\n\r\n this.indexSelectedField = this.form.Fields.findIndex(\r\n (f) => f.Label === innenrForm.Name\r\n );\r\n } else {\r\n // this.selectedInnerForm = new Form();\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form =\r\n new Form();\r\n this.indexSelectedInnerForm = null;\r\n this.indexSelectedField = null;\r\n }\r\n // this.dialogInnerFormRef = this.dialog.open(this.dialogInnerForm, {\r\n\r\n this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormRef =\r\n this.dialog.open(this.dialogInnerForm, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"85%\",\r\n });\r\n }\r\n\r\n /**\r\n * Metodo scatenato al salvataggio di una form di dettaglio.\r\n * @param event Form creata/modificata dall'utente. Se è null allora l'utente ha abbandonato la configurazione.\r\n */\r\n onSaveOrExitInnerForm(event: Form) {\r\n if (event != null) {\r\n if (\r\n this.form.Name === event.Name ||\r\n (this.form.InnerForms &&\r\n this.form.InnerForms.find(\r\n (a, i) =>\r\n a.Name === event.Name &&\r\n (this.indexSelectedInnerForm == null\r\n ? true\r\n : this.indexSelectedInnerForm !== i)\r\n )) ||\r\n (this.form.Fields &&\r\n this.indexSelectedInnerForm == null &&\r\n this.form.Fields.find(\r\n (f, i) =>\r\n f.Label === event.Name &&\r\n (this.indexSelectedField == null\r\n ? true\r\n : this.indexSelectedField !== i)\r\n ))\r\n ) {\r\n EqpDynamicModuleDialogService.Warning(\r\n \"Impossibile inserire due form di dettaglio con lo stesso nome.\"\r\n );\r\n throw new Error(\r\n \"Impossibile inserire due form di dettaglio con lo stesso nome.\"\r\n );\r\n }\r\n\r\n const innerFormField: BaseField = new BaseField();\r\n innerFormField.Name = event.Name.split(\" \").join(\"_\");\r\n innerFormField.Label = event.Name;\r\n innerFormField.FieldType = FieldTypeEnum[\"Form di dettaglio\"];\r\n innerFormField.FieldGroup =\r\n this.indexSelectedField != null\r\n ? this.form.Fields[this.indexSelectedField].FieldGroup\r\n : null;\r\n\r\n if (\r\n this.indexSelectedInnerForm != null &&\r\n this.indexSelectedInnerForm >= 0\r\n ) {\r\n this.form.InnerForms[this.indexSelectedInnerForm] = event;\r\n this.form.Fields[this.indexSelectedField] = innerFormField;\r\n } else {\r\n if (!this.form.InnerForms) {\r\n this.form.InnerForms = new Array<Form>();\r\n }\r\n this.form.InnerForms.push(event);\r\n this.form.Fields.push(innerFormField);\r\n }\r\n this.reloadFieldsTable();\r\n }\r\n this.dialogInnerFormRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per aprire il dialog di creazione/modifica delle action.\r\n * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica.\r\n * @param action ActionOnRecord da modificare (se null allora vado in add).\r\n */\r\n openActionOnRecordDialog(action: ActionOnRecord = null) {\r\n if (action) {\r\n this.indexSelectedAction = this.form.ActionsOnRecord.indexOf(action);\r\n this.selectedAction = JSON.parse(JSON.stringify(action));\r\n } else {\r\n this.selectedAction = new ActionOnRecord();\r\n this.indexSelectedAction = null;\r\n }\r\n this.createActionOnRecordForm();\r\n this.dialogActionOnRecordRef = this.dialog.open(this.dialogActionOnRecord, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: \"75%\",\r\n });\r\n }\r\n\r\n /**\r\n * Metodo per impostare i valori da suggerire nell'autocomplete del campo Formula.\r\n * Viene scatenato al focus (in questo caso viene passato il parametro a null per differenziarlo\r\n * dall'evento di click sulla tastiera) e al keyup sull'input (il parametro è diverso da null).\r\n * @param keyboardEvent Evento scatenato al keyup sulla tastiera. Se null allora il metodo è stato invocato dal focus sull'input.\r\n * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input\r\n * oppure al keyup sulla tastiera di un tasto diverso dalle frecce.\r\n */\r\n setActionAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n // si prederebbe la selezione appena fatta).\r\n if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n this.actionAutocompleteOptions =\r\n UtilityHelperService.GetAutocompleteOptions(\r\n this.form.Fields,\r\n this.selectedAction.Action\r\n );\r\n }\r\n }\r\n /**\r\n * Metodo per salvare l'azione creata/modificate.\r\n */\r\n saveActionOnRecord() {\r\n if (\r\n this.form.ActionsOnRecord &&\r\n this.form.ActionsOnRecord.find(\r\n (a, i) =>\r\n a.Name === this.selectedAction.Name &&\r\n (this.indexSelectedAction == null\r\n ? true\r\n : this.indexSelectedAction !== i)\r\n )\r\n ) {\r\n EqpDynamicModuleDialogService.Warning(\r\n \"Impossibile inserire due action con lo stesso nome.\"\r\n );\r\n throw new Error(\"Impossibile inserire due action con lo stesso nome.\");\r\n }\r\n\r\n if (this.indexSelectedAction != null && this.indexSelectedAction >= 0) {\r\n this.form.ActionsOnRecord[this.indexSelectedAction] = this.selectedAction;\r\n } else {\r\n if (!this.form.ActionsOnRecord) {\r\n this.form.ActionsOnRecord = new Array<ActionOnRecord>();\r\n }\r\n this.form.ActionsOnRecord.push(this.selectedAction);\r\n }\r\n this.closeDialogActionOnRecord();\r\n this.setActionOrdinalPosition();\r\n this.reloadActionsOnRecordTable();\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog della inner form.\r\n */\r\n closeDialogInnerForm() {\r\n this.innerFormRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per chiudere il dialog di gestione delle action.\r\n */\r\n closeDialogActionOnRecord() {\r\n this.dialogActionOnRecordRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per segnare come conclusa la creazione della form e per crearne una copia\r\n * da visalizzare come anteprima.\r\n * @param completed Se TRUE segna la form come conclusa e ne crea una copia da visualizzare\r\n */\r\n setFormStatus(completed: boolean) {\r\n if (completed) {\r\n this.formCompleted = true;\r\n this.previewForm = JSON.parse(JSON.stringify(this.form));\r\n GlobalService.debugLog(\"previewForm\", this.previewForm)\r\n\r\n // Per visualizzare correttamente l'oanteprima della form appena creata\r\n // bisogna valorizzare la proprietà Name dei campi della form e delle InnerForms.\r\n this.previewForm.Fields.forEach((field) => {\r\n field.Name = field.Label.split(\" \").join(\"_\");\r\n });\r\n if (\r\n this.previewForm.InnerForms &&\r\n this.previewForm.InnerForms.length > 0\r\n ) {\r\n this.previewForm.InnerForms.forEach((form) => {\r\n form.Fields.forEach((field) => {\r\n field.Name = field.Label.split(\" \").join(\"_\");\r\n });\r\n });\r\n }\r\n } else {\r\n this.formCompleted = false;\r\n this.previewForm = null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per salvare la form creata alla fine del wizard.\r\n * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n * nel body della chiamata, altrimenti scatena l'evento \"saveFormEvent\".\r\n */\r\n saveForm() {\r\n if (\r\n this.endPointConfiguration != null &&\r\n this.endPointConfiguration.Forms.SaveEndPoint\r\n ) {\r\n // Per far arrivare al server l'array di Field bisogna passarli su Any\r\n this.form.ObjectFields = [];\r\n this.form.Fields.forEach((field) => {\r\n if (field.FieldType == FieldTypeEnum.Allegato) {\r\n const fldA: any = field;\r\n fldA.MetadataObjectFields = fldA.MetadataFields;\r\n fldA.MetadataFields = [];\r\n this.form.ObjectFields.push(fldA);\r\n } else {\r\n if (field.FieldType == FieldTypeEnum[\"Campo numerico\"]) {\r\n if (\r\n (<NumericField>field).MaxValue == undefined ||\r\n (<NumericField>field).MaxValue == null\r\n ) {\r\n (<NumericField>field).MaxValue = Number.MAX_SAFE_INTEGER;\r\n }\r\n if (\r\n (<NumericField>field).MinValue == undefined ||\r\n (<NumericField>field).MinValue == null\r\n ) {\r\n (<NumericField>field).MinValue = 0;\r\n }\r\n }\r\n this.form.ObjectFields.push(field);\r\n }\r\n });\r\n this.form.Fields = null;\r\n this.form.OrgaID = this.orgaID;\r\n if (this.form.CreationDate == null) {\r\n this.form.CreationDate = new Date();\r\n this.form.CreationUser = this.UserID;\r\n }\r\n this.form.ModifyUser = this.UserID;\r\n // chiamata effettiva\r\n const dynamicModuleParams = [\r\n {\r\n ParamName: \"Form\",\r\n ParamValue: this.form,\r\n ParamType: ParamTypeEnum[\"In Body\"],\r\n },\r\n ];\r\n this.utilityHelperService.RunEndPointCall(\r\n this.endPointConfiguration.Forms.SaveEndPoint,\r\n dynamicModuleParams,\r\n (res) => {\r\n EqpDynamicModuleDialogService.Success(\"Form salvata con successo!\");\r\n this.afterSaveFormEvent.emit(this.form);\r\n }\r\n );\r\n } else {\r\n this.saveFormEvent.emit(this.form);\r\n }\r\n }\r\n\r\n //#region FUNZIONI PRIVATE\r\n\r\n /**\r\n * Metodo per impostare la form e configurare colonne/FormGourp.\r\n * @param form Form da utilizzare.\r\n */\r\n private setFormAndConfigure(form: Form = null) {\r\n if (form != null) {\r\n this.form = form;\r\n }\r\n this.configureColumns();\r\n this.createFormForm();\r\n }\r\n\r\n /**\r\n * Configura le colonne per le tabelle necessarie alla creazione della form:\r\n * - per la visualizzazione dei campi inseriti\r\n * - per le form di dettaglio create\r\n * - per le azioni configurate sui record della form\r\n */\r\n private configureColumns() {\r\n this.fieldsColumns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 4rem\" },\r\n actions: [\r\n {\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.editField(element),\r\n },\r\n {\r\n name: \"Duplica\",\r\n icon: \"file_copy\",\r\n fn: (element, index, col) => this.duplicateField(element),\r\n },\r\n {\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) => this.deleteElement(element, \"Fields\"),\r\n },\r\n {\r\n name: \"Sposta su\",\r\n icon: \"arrow_upward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, true, \"Fields\"),\r\n disabled: (element) => this.form.Fields.indexOf(element) === 0,\r\n },\r\n {\r\n name: \"Sposta giù\",\r\n icon: \"arrow_downward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, false, \"Fields\"),\r\n disabled: (element) =>\r\n this.form.Fields.indexOf(element) >= this.form.Fields.length - 1,\r\n },\r\n ],\r\n },\r\n {\r\n key: \"FieldType\",\r\n display: \"Tipologia\",\r\n type: TypeColumn.Enum,\r\n enumModel: FieldTypeEnum,\r\n styles: { flex: \"0 0 12rem\" },\r\n },\r\n { key: \"Label\", display: \"Label\", styles: { flex: \"0 0 8rem\" } },\r\n {\r\n key: \"Description\",\r\n display: \"Descrizione\",\r\n styles: { flex: \"0 0 12rem\" },\r\n },\r\n {\r\n key: \"Required\",\r\n display: \"Obbligatorio\",\r\n value: (element) => !!element.Required,\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n {\r\n key: \"Formula\",\r\n display: \"Calcolato\",\r\n value: (element) => !!element.Formula,\r\n type: TypeColumn.Boolean,\r\n booleanValues: {\r\n true: '<i class=\"fa fa-check success-color\"></i>',\r\n false: '<i class=\"fa fa-close error-color\"></i>',\r\n },\r\n styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n },\r\n ];\r\n\r\n if (\r\n this.form.FormScalarType &&\r\n this.form.FormScalarType != FormScalarTypeEnum.Semplice\r\n ) {\r\n this.fieldsColumns.splice(1, 0, {\r\n key: \"FieldGroup\",\r\n display: \"Sezione\",\r\n type: TypeColumn.ExternalTemplate,\r\n externalTemplate: this.fieldSectionColumnTemplate,\r\n styles: { flex: \"0 0 14rem\" },\r\n });\r\n // this.fieldsColumns.push(\r\n // {\r\n // key: \"FieldGroup\",\r\n // display: \"Sezione\",\r\n // type: TypeColumn.ExternalTemplate,\r\n // externalTemplate: this.fieldSectionColumnTemplate,\r\n // styles: { flex: \"0 0 14rem\" }\r\n // }\r\n // );\r\n }\r\n\r\n this.actionsOnRecordColumns = [\r\n {\r\n key: \"action\",\r\n display: \"\",\r\n type: TypeColumn.MenuAction,\r\n buttonMenuIcon: \"more_vert\",\r\n styles: { flex: \"0 0 6%\" },\r\n actions: [\r\n {\r\n name: \"Modifica\",\r\n icon: \"edit\",\r\n fn: (element, index, col) => this.openActionOnRecordDialog(element),\r\n },\r\n {\r\n name: \"Elimina\",\r\n icon: \"delete\",\r\n fn: (element, index, col) =>\r\n this.deleteElement(element, \"ActionsOnRecord\"),\r\n },\r\n {\r\n name: \"Sposta su\",\r\n icon: \"arrow_upward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, true, \"ActionsOnRecord\"),\r\n disabled: (element) =>\r\n this.form.ActionsOnRecord.indexOf(element) === 0,\r\n },\r\n {\r\n name: \"Sposta giù\",\r\n icon: \"arrow_downward\",\r\n fn: (element, index, col) =>\r\n this.moveElement(element, false, \"ActionsOnRecord\"),\r\n disabled: (element) =>\r\n this.form.ActionsOnRecord.indexOf(element) >=\r\n this.form.ActionsOnRecord.length - 1,\r\n },\r\n ],\r\n },\r\n { key: \"Icon\", display: \"Icona\", styles: { flex: \" 0 0 15%\" } },\r\n { key: \"Name\", display: \"Nome\", styles: { flex: \" 0 0 20%\" } },\r\n { key: \"Action\", display: \"Azione\" },\r\n ];\r\n }\r\n\r\n /**\r\n * Crea il FormGroup per l'oggetto Form\r\n */\r\n private createFormForm() {\r\n this.formFormGroup = this.formBuilder.group({\r\n Code: [this.form.Code, Validators.required],\r\n Name: [this.form.Name, Validators.required],\r\n Description: [this.form.Description],\r\n FormScalarType: [this.form.FormScalarType, Validators.required],\r\n });\r\n this.onChangeFormScalarType();\r\n }\r\n\r\n /**\r\n * Crea il FormGroup epr l'aggiunta o la modifica di una action sui record della Form.\r\n */\r\n private createActionOnRecordForm() {\r\n this.actionOnRecordFormGroup = this.formBuilder.group({\r\n Name: [this.selectedAction.Name, Validators.required],\r\n Icon: [this.selectedAction.Icon, Validators.required],\r\n Action: [this.selectedAction.Action, Validators.required],\r\n });\r\n }\r\n\r\n /**\r\n * Chiude il dialog per aggiungere/modificare un Field senza salvare\r\n */\r\n private closeFieldDialog() {\r\n if (this.dialogFieldRef != undefined) this.dialogFieldRef.close();\r\n }\r\n\r\n /**\r\n * Metodo per gestire l'apertura del dialog per la modifica di un Field.\r\n * Se il field è di tipo \"Form di dettaglio\" apre il dialog per la modifica di una\r\n * InnerForm altrimenti apre quello per la modifica di un Field.\r\n * @param field Campo da modificare\r\n */\r\n private editField(field: BaseField) {\r\n if (field.FieldType != FieldTypeEnum[\"Form di dettaglio\"]) {\r\n this.openFieldDialog(field);\r\n } else {\r\n this.openInnerFormDialog(\r\n this.form.InnerForms.find((f) => f.Name == field.Label)\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per gestire la duplicazione di un Field.\r\n * @param field Campo da modificare\r\n */\r\n private duplicateField(field: BaseField) {\r\n if (field.FieldType != FieldTypeEnum[\"Form di dettaglio\"]) {\r\n // ricreo l'oggetto passando per un json\r\n let cloneField: BaseField = JSON.parse(JSON.stringify(field));\r\n\r\n cloneField.Label = field[\"Label\"] + \"Copy\";\r\n cloneField.OrdinalPosition = this.form.Fields.length + 1;\r\n\r\n this.selectedField = new BaseField();\r\n this.indexSelectedField = null;\r\n this.onSaveField(cloneField);\r\n } else {\r\n alert(\"non è possibile duplicare una form di dettaglio\");\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per rimuovere un Field all'interno di una Form.\r\n * Richiede conferma all'utente prima di rimuoverlo.\r\n * @param field BaseField da rimuovere\r\n */\r\n private deleteElement(\r\n element: BaseField | ActionOnRecord | Form,\r\n propertyName: string\r\n ) {\r\n EqpDynamicModuleDialogService.Confirm(\r\n \"Eliminare l'elemento selezionato?\",\r\n () => {\r\n this.form[propertyName].splice(\r\n this.form[propertyName].indexOf(element),\r\n 1\r\n );\r\n if (propertyName === \"Fields\") {\r\n this.setFieldOrdinalPosition();\r\n this.reloadFieldsTable();\r\n } else if (propertyName === \"ActionsOnRecord\") {\r\n this.setActionOrdinalPosition();\r\n this.reloadActionsOnRecordTable();\r\n }\r\n },\r\n false,\r\n \"Richiesta conferma\"\r\n );\r\n }\r\n\r\n /**\r\n * Metodo per spostare un campo all'interno della form.\r\n * @param field Oggetto di tipo BaseField da spostare.\r\n * @param moveUp Se TRUE allora sposta verso l'alto il campo (abbassa l'indice) altrimenti il contrario.\r\n */\r\n private moveElement(\r\n element: BaseField | ActionOnRecord,\r\n moveUp: boolean,\r\n propertyName: string\r\n ) {\r\n const startingIndex = this.form[propertyName].indexOf(element);\r\n const endingIndex = startingIndex + (moveUp ? -1 : 1);\r\n\r\n this.form[propertyName].splice(startingIndex, 1);\r\n this.form[propertyName].splice(endingIndex, 0, element);\r\n\r\n if (propertyName === \"Fields\") {\r\n this.setFieldOrdinalPosition();\r\n this.reloadFieldsTable();\r\n } else if (propertyName === \"ActionsOnRecord\") {\r\n this.setActionOrdinalPosition();\r\n this.reloadActionsOnRecordTable();\r\n }\r\n }\r\n\r\n /**\r\n * Imposta l'ordinamento delle sezioni che compongono la form.\r\n */\r\n private setFormFieldGroupOrdinalPosition() {\r\n this.form.FormFieldsGroups.forEach((g, i) => (g.OrdinalPosition = i));\r\n }\r\n\r\n /**\r\n * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente\r\n * ha definito nella tabella in cui sono mostrati\r\n */\r\n private setFieldOrdinalPosition() {\r\n if (this.form.Fields) {\r\n this.form.Fields.forEach((field) => {\r\n field.OrdinalPosition = this.form.Fields.indexOf(field);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della tabella dei campi aggiunti in una form\r\n */\r\n private reloadFieldsTable() {\r\n if (this.fieldsTable) {\r\n this.fieldsTable.reloadDatatable();\r\n }\r\n }\r\n\r\n /**\r\n * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente\r\n * ha definito nella tabella in cui sono mostrati\r\n */\r\n private setActionOrdinalPosition() {\r\n if (this.form.ActionsOnRecord) {\r\n this.form.ActionsOnRecord.forEach((action) => {\r\n action.OrdinalPosition = this.form.ActionsOnRecord.indexOf(action);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per ricaricare i dati della tabella delle azioni aggiuntive sui record della Form.\r\n */\r\n private reloadActionsOnRecordTable() {\r\n if (this.actionsOnRecordTable) {\r\n this.actionsOnRecordTable.reloadDatatable();\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n}\r\n","<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n\r\n<div class=\"dynamic-module-configurator-header row title p-1\" *ngIf=\"innerFormManagment\">\r\n <div class=\"col-md-10\">\r\n <div class=\"header-title-standard\">Aggiunta form di dettaglio</div>\r\n </div>\r\n <div class=\"col-md-2 text-right\">\r\n <mat-icon class=\"close\" (click)=\"closeDialogInnerForm()\">close</mat-icon>\r\n </div>\r\n</div>\r\n\r\n<!--#region EXPORT MODULE -->\r\n<div class=\"dynamic-module-configurator-exporter\" *ngIf=\"loader && viewMode == 'Export'\" class=\"p-3\">\r\n <a\r\n class=\"btn btn-clear\"\r\n mat-raised-button\r\n color=\"primary\"\r\n title=\"Download JSON\"\r\n [href]=\"downloadJsonHref\"\r\n download=\"{{ downloadName }}.json\"\r\n >Export</a\r\n >\r\n <br />\r\n {{ stringifiedForm }}\r\n</div>\r\n<!--#endregion EXPORT MODULE -->\r\n\r\n<mat-horizontal-stepper\r\n *ngIf=\"loader && viewMode == 'addOrEdit'\"\r\n linear\r\n #stepper\r\n [ngClass]=\"{ outerForm: true, 'innerFormManagment-stepper': innerFormManagment }\"\r\n class=\"dynamic-module-configurator-stepper {{ 'last-edited-step-' + stepper.selectedIndex }}\"\r\n>\r\n <!--#region DATI GENERALI DELLA FORM -->\r\n <mat-step class=\"dynamic-module-configurator-general-data\" [stepControl]=\"formFormGroup\">\r\n <form [formGroup]=\"formFormGroup\" (keydown.enter)=\"(false)\">\r\n <ng-template matStepLabel>\r\n <div\r\n class=\"stepper-header-overlay\"\r\n (click)=\"setFormStatus(false)\"\r\n ></div>\r\n Dati generali della form\r\n </ng-template>\r\n\r\n <div class=\"row firstRow\">\r\n <div class=\"col-md-6\">\r\n <mat-label\r\n [matTooltip]=\"'Va inserito per essere utilizzato come riferimento nei template. non accetta caratteri speciali ne spazi.'\"\r\n >\r\n Codice Univoco \r\n </mat-label>\r\n <mat-form-field class=\"name\">\r\n <input\r\n matInput\r\n [matTooltip]=\"'Va inserito per essere utilizzato come riferimento nei template. non accetta caratteri speciali ne spazi.'\"\r\n formControlName=\"Code\"\r\n [(ngModel)]=\"form.Code\"\r\n required\r\n (focusout)=\"setCode(form.Code)\"\r\n disabled=\"true\"\r\n readonly=\"true\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n\r\n <div class=\"col-md-4\">\r\n <mat-label>Nome</mat-label>\r\n <mat-form-field class=\"name\">\r\n <input\r\n matInput\r\n formControlName=\"Name\"\r\n [(ngModel)]=\"form.Name\"\r\n required\r\n (focusout)=\"setName(form.Name)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col-md-4\">\r\n <mat-label>Tipo di visualizzazione</mat-label>\r\n <eqp-select\r\n class=\"nameSection\"\r\n [enumData]=\"FormScalarTypeEnum\"\r\n [(ngModelInput)]=\"form.FormScalarType\"\r\n [isRequired]=\"false\"\r\n required\r\n [showCancelButton]=\"false\"\r\n [formGroupInput]=\"formFormGroup\"\r\n [formControlNameInput]=\"'FormScalarType'\"\r\n (ngModelInputChange)=\"onChangeFormScalarType()\"\r\n >\r\n </eqp-select>\r\n </div>\r\n \r\n <div class=\"col-md-6\">\r\n <mat-label>Descrizione</mat-label>\r\n <mat-form-field class=\"name\">\r\n <input\r\n matInput\r\n formControlName=\"Description\"\r\n [(ngModel)]=\"form.Description\"\r\n (focusout)=\"stringSanitizer(form.Name)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div\r\n class=\"row inserted\"\r\n *ngIf=\"\r\n form.FormScalarType &&\r\n form.FormScalarType != FormScalarTypeEnum.Semplice\r\n \"\r\n >\r\n <div class=\"col-md-4\">\r\n <mat-label> Nome sezione (invio per confermare) </mat-label>\r\n <mat-form-field class=\"nameSection\">\r\n <input\r\n matInput\r\n [(ngModel)]=\"formFieldGroupName\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (keyup)=\"onFormFieldGroupNameKeyUp($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <span class=\"mr-3\">Sezioni inserite:</span>\r\n <ul class=\"section-list\">\r\n <li *ngFor=\"let groupName of form.FormFieldsGroups; let i = index\">\r\n <span class=\"sectionInsert\">\r\n <mat-icon\r\n class=\"mr-1\"\r\n (click)=\"onDeleteFormFieldGroupName(groupName.Name)\"\r\n >close </mat-icon\r\n >{{ groupName.Name }}\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end\">\r\n <!-- IMPORT -->\r\n <button\r\n *ngIf=\"!this.formID\"\r\n class=\"btn btn-clear button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"importModule()\"\r\n >\r\n Importa\r\n </button>\r\n <!-- END IMPORT -->\r\n\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n [disabled]=\"formFormGroup.invalid\"\r\n >\r\n Successivo\r\n </button>\r\n </div>\r\n </form>\r\n </mat-step>\r\n <!--#endregion DATI GENERALI DELLA FORM -->\r\n\r\n <!--#region AGGIUNTA DEI CAMPI DELLA FORM -->\r\n <mat-step class=\"dynamic-module-configurator-add-field\" [completed]=\"isFieldStepCompleted()\">\r\n <ng-template matStepLabel>\r\n <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n <mat-label>Campi da inserire</mat-label>\r\n </ng-template>\r\n\r\n <div class=\"row justify-content-start addButtons\">\r\n <div class=\"col\">\r\n <button\r\n class=\"btn btn-primary me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openFieldDialog()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi campo</span>\r\n </button>\r\n\r\n <button\r\n class=\"btn btn-outlined me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openInnerFormDialog()\"\r\n *ngIf=\"!innerFormManagment\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi form di dettaglio</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <eqp-table\r\n class=\"table\"\r\n #fieldsTable\r\n [createMatCard]=\"false\"\r\n [columns]=\"fieldsColumns\"\r\n [data]=\"form.Fields\"\r\n [emptyTableMessage]=\"'Nessun campo inserito'\"\r\n [searchText]=\"''\"\r\n >\r\n </eqp-table>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end\">\r\n <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n [disabled]=\"!isFieldStepCompleted()\"\r\n [ngClass]=\"{ disabled: formFormGroup.invalid }\"\r\n (click)=\"setFormStatus(false)\"\r\n >\r\n Successivo\r\n </button>\r\n </div>\r\n </mat-step>\r\n <!--#endregion AGGIUNTA DEI CAMPI DELLA FORM -->\r\n\r\n <ng-template matStepperIcon=\"edit\" let-index=\"index\">\r\n <mat-label>{{ index + 1 }}</mat-label>\r\n </ng-template>\r\n\r\n <!--#region AGGIUNTA DELLE OPERAZIONI SUI RECORD -->\r\n <mat-step>\r\n <ng-template matStepLabel>\r\n <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n Azioni aggiuntive sui record\r\n </ng-template>\r\n\r\n <div class=\"row justify-content-start addButtons\">\r\n <div class=\"col\">\r\n <button\r\n class=\"btn btn-primary\"\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"openActionOnRecordDialog()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi azione</span>\r\n </button>\r\n </div>\r\n </div>\r\n <eqp-table\r\n class=\"table\"\r\n #actionsOnRecordTable\r\n [createMatCard]=\"false\"\r\n [columns]=\"actionsOnRecordColumns\"\r\n [data]=\"form.ActionsOnRecord\"\r\n [emptyTableMessage]=\"'Nessuna action inserita'\"\r\n [searchText]=\"''\"\r\n >\r\n </eqp-table>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end buttonsNextDiv\">\r\n <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n matStepperNext\r\n (click)=\"setFormStatus(true)\"\r\n >\r\n Successivo\r\n </button>\r\n </div>\r\n </mat-step>\r\n <!--#endregion AGGIUNTA DELLE OPERAZIONI SUI RECORD -->\r\n\r\n <!--#region VISUALIZZAZIONE FORM CREATA -->\r\n <mat-step class=\"dynamic-module-configurator-preview\">\r\n <ng-template matStepLabel>\r\n <div\r\n class=\"stepper-header-overlay\"\r\n (click)=\"setFormStatus( formFormGroup.valid && form.Fields && form.Fields.length > 0 )\"\r\n ></div>\r\n Anteprima\r\n </ng-template>\r\n\r\n <add-form-record\r\n *ngIf=\"previewForm && formCompleted\"\r\n [form]=\"previewForm\"\r\n [configurations]=\"viewConfig\"\r\n >\r\n </add-form-record>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end button-nextDiv\">\r\n <button\r\n class=\"mr-2 button-exit\"\r\n mat-raised-button\r\n matStepperPrevious\r\n (click)=\"setFormStatus(false)\"\r\n >\r\n Precedente\r\n </button>\r\n <button\r\n class=\"button-next\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"saveForm()\"\r\n >\r\n Salva form\r\n </button>\r\n </div>\r\n </mat-step>\r\n <!--#endregion VISUALIZZAZIONE FORM CREATA -->\r\n\r\n</mat-horizontal-stepper>\r\n\r\n<!-- DIALOG AGGIUNTA/MODIFICA CAMPO -->\r\n<ng-template #dialogField>\r\n <eqp-dynamic-module-add-form-field\r\n [field]=\"selectedField\"\r\n [indexField]=\"indexSelectedField\"\r\n (saveFieldEvent)=\"onSaveField($event)\"\r\n [availableFields]=\"form.Fields\"\r\n [formFieldsGroups]=\"\r\n form.FormScalarType != FormScalarTypeEnum.Semplice\r\n ? form.FormFieldsGroups\r\n : null\r\n \"\r\n >\r\n </eqp-dynamic-module-add-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<ng-template #fieldSectionColumnTemplate let-row=\"row\">\r\n <eqp-select\r\n [arrayData]=\"form.FormFieldsGroups\"\r\n [(ngModelInput)]=\"row.FieldGroup\"\r\n [arrayKeyProperty]=\"'Name'\"\r\n [arrayValueProperty]=\"'Name'\"\r\n placeholder=\"Sezione\"\r\n [isRequired]=\"true\"\r\n [includeFullObject]=\"false\"\r\n >\r\n </eqp-select>\r\n</ng-template>\r\n\r\n<!-- DIALOG PER AGGIUNGERE/MODIFICARE UNA ACTION SUI RECORD DELLA FORM -->\r\n<ng-template #dialogActionOnRecord>\r\n <div\r\n class=\"container-fluid third-modal\"\r\n style=\"max-height: 70vh !important; overflow-x: hidden; overflow-y: auto\"\r\n >\r\n <form [formGroup]=\"actionOnRecordFormGroup\">\r\n <div class=\"row title\">\r\n <div class=\"header-title-standard\">\r\n {{\r\n indexSelectedAction != null && indexSelectedAction >= 0\r\n ? \"Modifica\"\r\n : \"Aggiungi\"\r\n }}\r\n azione sul record\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Nome </mat-label>\r\n <mat-form-field>\r\n <input\r\n formControlName=\"Name\"\r\n required\r\n matInput\r\n [(ngModel)]=\"selectedAction.Name\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-sm-12 col-md-4 mt-2\">\r\n <mat-label> Icona </mat-label>\r\n <mat-form-field>\r\n <input\r\n formControlName=\"Icon\"\r\n required\r\n matInput\r\n [(ngModel)]=\"selectedAction.Icon\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col-12 mt-2\">\r\n <mat-label>Azione (Javascript)</mat-label>\r\n <mat-form-field>\r\n <textarea\r\n matInput\r\n [rows]=\"3\"\r\n formControlName=\"Action\"\r\n required\r\n [(ngModel)]=\"selectedAction.Action\"\r\n [matAutocomplete]=\"actionAutocomplete\"\r\n (keyup)=\"setActionAutocompleteOptions($event)\"\r\n (focus)=\"setActionAutocompleteOptions(null)\"\r\n style=\"\r\n border: 1px solid lightgray !important;\r\n border-radius: 10px !important;\r\n \"\r\n ></textarea>\r\n <mat-autocomplete #actionAutocomplete=\"matAutocomplete\">\r\n <mat-option\r\n *ngFor=\"let option of actionAutocompleteOptions\"\r\n [value]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-end mt-2 mb-1\">\r\n <div class=\"buttonsForm\">\r\n <button\r\n class=\"btn mat-raised-button cancel\"\r\n (click)=\"closeDialogActionOnRecord()\"\r\n type=\"button\"\r\n >\r\n Annulla\r\n </button>\r\n <button\r\n class=\"mr-2 save\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"saveActionOnRecord()\"\r\n [disabled]=\"actionOnRecordFormGroup.invalid\"\r\n type=\"button\"\r\n >\r\n Salva\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER CONFIGURARE LE FORM DI DETTAGLIO -->\r\n<ng-template #dialogInnerForm>\r\n <!-- [form]=\"selectedInnerForm\"\r\n [innerFormManagment]=\"true\"\r\n [innerFormRef]=\"dialogInnerFormRef\" -->\r\n <eqp-dynamic-module-configurator\r\n [configurations]=\"innerFormConfig\"\r\n (saveFormEvent)=\"onSaveOrExitInnerForm($event)\"\r\n >\r\n </eqp-dynamic-module-configurator>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER IMPORT -->\r\n<ng-template #dialogImport>\r\n <mat-card class=\"importDialog\">\r\n <mat-card-header class=\"p-2 justify-content-around\"> \r\n <mat-card-title>\r\n Import\r\n </mat-card-title> \r\n </mat-card-header>\r\n <mat-card-content class=\"p-2\">\r\n <input type=\"file\" class=\"input-file-btn pb-2\" (change)=\"onImport($event)\" />\r\n </mat-card-content>\r\n <mat-card-footer class=\"p-2 d-flex justify-content-end\">\r\n <button\r\n class=\"btn btn-clear button-back me-2\"\r\n mat-raised-button\r\n color=\"disabled\"\r\n (click)=\"closeImport()\"\r\n >\r\n Annulla\r\n </button>\r\n </mat-card-footer>\r\n </mat-card>\r\n</ng-template>\r\n","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { IBaseFieldComponent } from '../../../interfaces/iBaseFieldComponent.interface';\r\nimport { BaseField, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../form-records/list-form-record/list-form-record.component';\r\n\r\n@Component({\r\n selector: 'dynamic-module-field',\r\n templateUrl: './dynamic-module-field.component.html',\r\n styleUrls: ['./dynamic-module-field.component.scss']\r\n})\r\nexport class DynamicModuleFieldComponent implements OnInit, IBaseFieldComponent {\r\n\r\n @Input() field: BaseField;\r\n @Input() form: Form;\r\n @Input() record: Record;\r\n @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n FieldTypeEnum = FieldTypeEnum;\r\n\r\n //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n selectedInnerForm: Form;\r\n selectedInnerFormRecord: Record;\r\n indexInnerFormRecord: number;\r\n onlyViewInnerFormRecord: boolean = false;\r\n dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n //#endregion\r\n\r\n @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldComponent>;\r\n @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n constructor(\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n\r\n updateField(): void {\r\n if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n this.fieldTemplate.forEach(f => f.updateField());\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.configList.values = this.record[this.field.Name]\r\n this.configList.showTitle = true;\r\n this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n }\r\n\r\n /**\r\n * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n */\r\n onRecordChange() {\r\n this.recordChange.emit(this.record);\r\n }\r\n\r\n /**\r\n * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n * @returns Restituisce un oggetto di tipo Form.\r\n */\r\n getInnerFormFromField(field: BaseField): Form {\r\n if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n return this.form.InnerForms.find(f => f.Name == field.Label);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo per aprire un dialog in cui aggiungere/modificare/visualizzare un record appartenente\r\n * a una form di dettaglio.\r\n * @param record Evento di output del componente list-form-record, contiene il record selezionato e un booleno che indica \r\n * se l'utente vuole modificare o visualizzare l'elemento selezionato.\r\n * @param innerForm Contiene la Form di dettaglio dalla quale è stato richiesto il record.\r\n */\r\n onAddViewEditInnerFormRecord(record: { record: Record, onlyView: boolean }, field: BaseField) {\r\n this.selectedInnerForm = this.getInnerFormFromField(field);\r\n if (record == null) {\r\n this.selectedInnerFormRecord = new Record();\r\n this.indexInnerFormRecord = null;\r\n this.onlyViewInnerFormRecord = false;\r\n } else {\r\n this.selectedInnerFormRecord = JSON.parse(JSON.stringify(record.record));\r\n this.indexInnerFormRecord = this.record[field.Name].indexOf(record);\r\n this.onlyViewInnerFormRecord = record.onlyView;\r\n }\r\n\r\n this.dialogInnerFormRecordRef = this.dialog.open(this.dialogInnerFormRecord, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n width: '75%'\r\n });\r\n }\r\n\r\n /**\r\n * Metodo invocato al salvataggio o alla chiusura del dialog di aggiunta/modifica/visualizzazione\r\n * di un record di una form di dettaglio.\r\n * @param record Oggetto restituito dal componente add-form-field (questo qui) contenente il Record \r\n * aggiornato dall'utente. Se null allora l'utente non ha modificato nulla e ha chiuso il dialog.\r\n */\r\n onSaveInnerFormRecord(record: Record) {\r\n if (record != null) {\r\n const arrayName: string = this.selectedInnerForm.Name.split(' ').join('_');\r\n if (this.indexInnerFormRecord != null && this.indexInnerFormRecord >= 0) {\r\n this.record[arrayName][this.indexInnerFormRecord] = record;\r\n } else {\r\n if (!this.record[arrayName]) {\r\n this.record[arrayName] = [];\r\n }\r\n this.record[arrayName].push(record);\r\n }\r\n }\r\n this.dialogInnerFormRecordRef.close();\r\n\r\n // Ricarico la tabella dei record per visualizzare le modifiche fatte dall'utente.\r\n if (this.listInnerFormRecords && this.listInnerFormRecords.length > 0) {\r\n this.listInnerFormRecords.forEach(list => {\r\n if (list && list.tableRecords) {\r\n list.tableRecords.reloadDatatable();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","<text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</text-field-template>\r\n\r\n<textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</textarea-field-template>\r\n\r\n<boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</boolean-field-template>\r\n\r\n<date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</date-field-template>\r\n\r\n<numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</numeric-field-template>\r\n\r\n<list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</list-value-field-template>\r\n\r\n<attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</attachment-field-template>\r\n\r\n<image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n</image-field-template>\r\n\r\n<list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n</list-form-record>\r\n\r\n<!-- DIALOG PER AGGIUNGERE/MODIFICARE/VISUALIZZARE UN RECORD IN UNA FORM DI DETTAGLIO -->\r\n<ng-template #dialogInnerFormRecord>\r\n <add-form-record [form]=\"selectedInnerForm\" [record]=\"selectedInnerFormRecord\" [onlyView]=\"onlyViewInnerFormRecord\"\r\n (saveRecordEvent)=\"onSaveInnerFormRecord($event)\"></add-form-record>\r\n</ng-template>","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { EqpDynamicModuleComponent } from './components/exported/eqp-dynamic-module/eqp-dynamic-module.component';\r\nimport { MaterialModule } from './modules/material.module';\r\nimport { EqpTableModule } from '@eqproject/eqp-table';\r\nimport { EqpAttachmentsModule } from '@eqproject/eqp-attachments';\r\nimport { EqpSelectModule } from '@eqproject/eqp-select';\r\nimport { EqpDatetimepickerModule } from '@eqproject/eqp-datetimepicker';\r\nimport { EqpFiltersModule } from '@eqproject/eqp-filters';\r\nimport { EqpNumericModule } from '@eqproject/eqp-numeric';\r\nimport { EqpDynamicModuleConfiguratorComponent } from './components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';\r\nimport { AddFormFieldComponent } from './components/private/add-form-field/add-form-field.component';\r\nimport { TextFieldTemplateComponent } from './components/private/field-templates/text-field-template/text-field-template.component';\r\nimport { BooleanFieldTemplateComponent } from './components/private/field-templates/boolean-field-template/boolean-field-template.component';\r\nimport { DateFieldTemplateComponent } from './components/private/field-templates/date-field-template/date-field-template.component';\r\nimport { TextareaFieldTemplateComponent } from './components/private/field-templates/textarea-field-template/textarea-field-template.component';\r\nimport { NumericFieldTemplateComponent } from './components/private/field-templates/numeric-field-template/numeric-field-template.component';\r\nimport { ListValueFieldTemplateComponent } from './components/private/field-templates/list-value-field-template/list-value-field-template.component';\r\nimport { AttachmentFieldTemplateComponent } from './components/private/field-templates/attachment-field-template/attachment-field-template.component';\r\nimport { ImageFieldTemplateComponent } from './components/private/field-templates/image-field-template/image-field-template.component';\r\nimport { ListFormRecordComponent } from './components/private/form-records/list-form-record/list-form-record.component';\r\nimport { AddFormRecordComponent } from './components/private/form-records/add-form-record/add-form-record.component';\r\nimport { DynamicModuleFieldComponent } from './components/private/dynamic-module-field/dynamic-module-field.component';\r\nimport { SpinnerComponent } from './components/private/spinner/spinner.component';\r\nimport { DynamicModuleFieldFixComponent } from './components/private/dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { AddFormulaComponent,DialogDataExampleDialog } from './components/private/add-formula-field/add-formula-field.component';\r\nimport { RepairFormFieldsComponent } from './components/private/form-records/repair-form-fields/repair-form-fields.component';\r\nimport { ListViewFormRecordComponent } from './components/private/form-records/list-view-form-record/list-view-form-record.component';\r\nimport { ViewFormRecordComponent } from './components/private/form-records/view-form-record/view-form-record.component';\r\nimport { SingleRecordComponent } from './components/private/form-records/list-view-form-record/single-record/single-record.component';\r\nimport { FilterFormStatisticComponent } from './components/private/form-statistics/filter-form-statistic/filter-form-statistic.component';\r\nimport { DynamicModuleFilterFixComponent } from './components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component';\r\nimport { TextFilterTemplateComponent } from './components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component';\r\nimport { NumericFilterTemplateComponent } from './components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component';\r\nimport { BooleanFilterTemplateComponent } from './components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component';\r\nimport { DateFilterTemplateComponent } from './components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component';\r\nimport { ListValueFilterTemplateComponent } from './components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component';\r\nimport { TextareaFilterTemplateComponent } from './components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component';\r\nimport { AttachmentFilterTemplateComponent } from './components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component';\r\nimport { ImageFilterTemplateComponent } from './components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component';\r\nimport { ListFormRecordFilterTemplateComponent } from './components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component';\r\nimport { GraphsComponent } from './components/private/graphs/graphs.component';\r\nimport { GraphComponent } from './components/private/graphs/graph/graph.component';\r\nimport { CanvasJSAngularStockChartsModule, CanvasJSChart, CanvasJSStockChart } from '@canvasjs/angular-stockcharts';\r\n\r\n@NgModule({\r\n declarations: [\r\n EqpDynamicModuleComponent,\r\n EqpDynamicModuleConfiguratorComponent,\r\n AddFormFieldComponent,\r\n TextFieldTemplateComponent,\r\n BooleanFieldTemplateComponent,\r\n DateFieldTemplateComponent,\r\n TextareaFieldTemplateComponent,\r\n NumericFieldTemplateComponent,\r\n ListValueFieldTemplateComponent,\r\n AttachmentFieldTemplateComponent,\r\n ImageFieldTemplateComponent,\r\n ListFormRecordComponent,\r\n ListViewFormRecordComponent,\r\n AddFormRecordComponent,\r\n ViewFormRecordComponent,\r\n DynamicModuleFieldComponent,\r\n DynamicModuleFieldFixComponent,\r\n SpinnerComponent,\r\n AddFormulaComponent,\r\n DialogDataExampleDialog,\r\n RepairFormFieldsComponent,\r\n SingleRecordComponent,\r\n FilterFormStatisticComponent,\r\n DynamicModuleFilterFixComponent,\r\n TextFilterTemplateComponent,\r\n NumericFilterTemplateComponent,\r\n BooleanFilterTemplateComponent,\r\n DateFilterTemplateComponent,\r\n ListValueFilterTemplateComponent,\r\n TextareaFilterTemplateComponent,\r\n AttachmentFilterTemplateComponent,\r\n ImageFilterTemplateComponent,\r\n ListFormRecordFilterTemplateComponent,\r\n GraphsComponent,\r\n GraphComponent\r\n ],\r\n imports: [\r\n MaterialModule,\r\n FormsModule,\r\n CommonModule,\r\n ReactiveFormsModule,\r\n EqpTableModule,\r\n EqpAttachmentsModule,\r\n EqpSelectModule,\r\n EqpDatetimepickerModule,\r\n EqpFiltersModule,\r\n EqpNumericModule,\r\n CanvasJSAngularStockChartsModule\r\n ],\r\n exports: [\r\n EqpDynamicModuleComponent,\r\n EqpDynamicModuleConfiguratorComponent,\r\n CanvasJSChart,\r\n CanvasJSStockChart\r\n ]\r\n})\r\nexport class EqpDynamicModuleModule { }\r\n","import { DynamicModuleCompileConfig } from \"./dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"./dynamicModuleGeneralConfig.model\";\r\nimport { DynamicModuleListConfig } from \"./dynamicModuleListConfig.model\";\r\nimport { DynamicModuleRepairConfig } from \"./dynamicModuleRepairConfig.model\";\r\n\r\nexport class DynamicModuleConfig {\r\n dynamicModuleGeneralConfig: DynamicModuleGeneralConfig;\r\n dynamicModuleCompileConfig: DynamicModuleCompileConfig;\r\n dynamicModuleListConfig: DynamicModuleListConfig;\r\n dynamicModuleRepairConfig: DynamicModuleRepairConfig;\r\n\r\n constructor(\r\n general: DynamicModuleGeneralConfig,\r\n compile: DynamicModuleCompileConfig,\r\n list: DynamicModuleListConfig,\r\n repair: DynamicModuleRepairConfig\r\n ) {\r\n this.dynamicModuleGeneralConfig = general;\r\n this.dynamicModuleCompileConfig = compile;\r\n this.dynamicModuleListConfig = list;\r\n this.dynamicModuleRepairConfig = repair;\r\n }\r\n}\r\n","import { IRootObject } from \"../interfaces/iRootObject.interface\";\r\nimport { BaseField } from \"./baseField.model\";\r\nimport { BaseObj } from \"./baseObj.model\";\r\n\r\n/**\r\n * Rappresenta l'entità su cui vengono eseguite le operazioni di salvataggio.\r\n */\r\nexport class Entity extends BaseObj implements IRootObject {\r\n Name: string;\r\n Fields: Array<BaseField>;\r\n OrgaID: string;\r\n}\r\n","import { IAttachmentDTO } from \"@eqproject/eqp-attachments\";\r\nimport { BaseField } from \"../baseField.model\";\r\nimport { AttachmentField } from \"./attachmentField.model\";\r\n\r\nexport class ImageField extends BaseField {\r\n /**Se true il medico può disegnare sull'immagine */\r\n EnableDrawing: boolean;\r\n\r\n /**Se true l'immagine non è fissa, ma viene caricata come un allegato; */\r\n ImageIsContextualAttachment: boolean;\r\n /**Contiene l'allegato caricato nel campo (se ImageIsContextualAttachment == true) */\r\n ContextualAttachment: IAttachmentDTO;\r\n /**Proprietà per recuperare l'allegato caricato come array per eqp-attachments (se ImageIsContextualAttachment == true) */\r\n get _contextualAttachments() {\r\n return this.ContextualAttachment ? [this.ContextualAttachment] : [];\r\n }\r\n /**Nome dell'immagine caricata (se ImageIsContextualAttachment == true) */\r\n ImgName: string;\r\n\r\n AttachDefinition: AttachmentField;\r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Questo tipo di campo rappresenta una lookup ad altri valori */\r\nexport class LookupField extends BaseField {\r\n /**Entità relazionata (il padre) */\r\n EntitySourceName: string;\r\n\r\n /**Elenco di campi ordinato che verrà visualizzato nella lookup */\r\n FieldNames: string[];\r\n\r\n /**Se true la lookup viene visualizzata in una modale per lo scegli scarta */\r\n UseAsGetOrDiscard: boolean;\r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Classe contiene la configurazione dei campi numerici */\r\nexport class NumericField extends BaseField {\r\n IsInteger: boolean;\r\n MinValue: number;\r\n MaxValue: number;\r\n DecimalSeparator: string;\r\n DecimalPrecision: number;\r\n ThousandsSeparator: string;\r\n CurrencySymbol: string;\r\n MeasureUnit: string;\r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class TextareaField extends BaseField {\r\n /**Numero di righe in altezza con cui viene rappresentata la text area */\r\n Rows: number;\r\n MaxLenght: number;\r\n MinLenght: number;\r\n Microphone: boolean;\r\n}","/*\r\n * Public API Surface of eqp-dynamic-module\r\n */\r\nexport * from './lib/eqp-dynamic-module.module';\r\nexport * from './lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component';\r\nexport * from './lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';\r\nexport * from './lib/components/private/add-form-field/add-form-field.component';\r\nexport * from './lib/components/private/dynamic-module-field/dynamic-module-field.component';\r\nexport * from './lib/components/private/field-templates/attachment-field-template/attachment-field-template.component';\r\nexport * from './lib/components/private/field-templates/boolean-field-template/boolean-field-template.component';\r\nexport * from './lib/components/private/field-templates/date-field-template/date-field-template.component';\r\nexport * from './lib/components/private/field-templates/image-field-template/image-field-template.component';\r\nexport * from './lib/components/private/field-templates/list-value-field-template/list-value-field-template.component';\r\nexport * from './lib/components/private/field-templates/numeric-field-template/numeric-field-template.component';\r\nexport * from './lib/components/private/field-templates/text-field-template/text-field-template.component';\r\nexport * from './lib/components/private/field-templates/textarea-field-template/textarea-field-template.component';\r\nexport * from './lib/components/private/form-records/add-form-record/add-form-record.component';\r\nexport * from './lib/components/private/form-records/repair-form-fields/repair-form-fields.component';\r\nexport * from './lib/components/private/form-records/list-form-record/list-form-record.component';\r\nexport * from './lib/interfaces/iBaseFieldComponent.interface';\r\nexport * from './lib/interfaces/iRootObject.interface';\r\nexport * from './lib/models/baseField.model';\r\nexport * from './lib/models/baseObj.model';\r\nexport * from './lib/models/context.model';\r\nexport * from './lib/models/dynamicModuleConfiguratorConfig.model';\r\nexport * from './lib/models/dynamicModuleConfiguratorSpecificConfig.model';\r\nexport * from './lib/models/dynamicModuleConfig.model';\r\nexport * from './lib/models/dynamicModuleGeneralConfig.model';\r\nexport * from './lib/models/dynamicModuleCompileConfig.model';\r\nexport * from './lib/models/dynamicModuleListConfig.model';\r\nexport * from './lib/models/dynamicModuleRepairConfig.model';\r\nexport * from './lib/models/dynamicModuleFilterResultViewModeEnum.model';\r\nexport * from './lib/models/dynamicModuleViewModeEnum';\r\nexport * from './lib/models/dynamicModuleListFormRecordActionsDefault';\r\nexport * from './lib/models/endPointConfiguration.model';\r\nexport * from './lib/models/entity.model';\r\nexport * from './lib/models/form.model';\r\nexport * from './lib/models/record.model';\r\nexport * from './lib/models/fields/attachmentField.model';\r\nexport * from './lib/models/fields/booleanField.model';\r\nexport * from './lib/models/fields/dateField.model';\r\nexport * from './lib/models/fields/imageField.model';\r\nexport * from './lib/models/fields/listValueField.model';\r\nexport * from './lib/models/fields/lookupField.model';\r\nexport * from './lib/models/fields/numericField.model';\r\nexport * from './lib/models/fields/textareaField.model';\r\nexport * from './lib/models/fields/textField.model';\r\nexport * from './lib/services/custom-form-validators.service';\r\nexport * from './lib/services/eqp-dynamic-module-dialog.service';\r\nexport * from './lib/services/spinner.service';\r\nexport * from './lib/services/utilityHelper.services';\r\nexport * from './lib/models/graph.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3.SpinnerService","i1.UtilityHelperService","i2","i3","i5","i6","i1.VoiceRecognitionService","i4","i2.UtilityHelperService","i4.TextFieldTemplateComponent","i5.BooleanFieldTemplateComponent","i6.DateFieldTemplateComponent","i7.TextareaFieldTemplateComponent","i8.NumericFieldTemplateComponent","i9.ListValueFieldTemplateComponent","i10.AttachmentFieldTemplateComponent","i11.ImageFieldTemplateComponent","i12.ListFormRecordComponent","i7","i8.DynamicModuleFieldFixComponent","i3.AddFormRecordComponent","i4.ViewFormRecordComponent","i8","i9.GraphComponent","i9","i10.AddFormRecordComponent","i11.SingleRecordComponent","i12.GraphsComponent","i1.SpinnerService","i4.TextFilterTemplateComponent","i5.NumericFilterTemplateComponent","i6.BooleanFilterTemplateComponent","i7.DateFilterTemplateComponent","i8.ListValueFilterTemplateComponent","i9.TextareaFilterTemplateComponent","i10.AttachmentFilterTemplateComponent","i11.ImageFilterTemplateComponent","i12.ListFormRecordFilterTemplateComponent","i6.ListViewFormRecordComponent","i7.DynamicModuleFilterFixComponent","i3.ListFormRecordComponent","i4.ListViewFormRecordComponent","i5.AddFormRecordComponent","i6.ViewFormRecordComponent","i7.SpinnerComponent","i8.RepairFormFieldsComponent","i9.FilterFormStatisticComponent","i10.GraphsComponent","i10","i11","i12","i13","i14","i15.AddFormulaComponent","i3.UtilityHelperService","i15","i16","i17.AddFormFieldComponent","i18.AddFormRecordComponent","i19.SpinnerComponent","i13.AddFormRecordComponent"],"mappings":"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"}
|