Resolved Conflicts

This commit is contained in:
harish
2024-10-07 19:26:28 +05:30
16 changed files with 314 additions and 92 deletions

View File

@@ -182,4 +182,6 @@ public class GepafinConstant {
public static final String CALL_NOT_STARTED_YET = "call.not.started.yet"; public static final String CALL_NOT_STARTED_YET = "call.not.started.yet";
public static final String CALL_ALREADY_ENDED = "call.already.ended"; public static final String CALL_ALREADY_ENDED = "call.already.ended";
public static final String APPLICATION_STATUS_UPDATED_SUCCESSFULLY = "application.status.updated.successfully";
} }

View File

@@ -492,7 +492,7 @@ public class ApplicationDao {
} }
} }
public void updateApplicationStatus(Long applicationId, ApplicationStatusTypeEnum status) { public ApplicationResponse updateApplicationStatus(Long applicationId, ApplicationStatusTypeEnum status) {
ApplicationEntity applicationEntity = validateApplication(applicationId); ApplicationEntity applicationEntity = validateApplication(applicationId);
if (status.equals(ApplicationStatusTypeEnum.SUBMIT)) { if (status.equals(ApplicationStatusTypeEnum.SUBMIT)) {
@@ -518,7 +518,9 @@ public class ApplicationDao {
} else { } else {
applicationEntity.setStatus(status.getValue()); applicationEntity.setStatus(status.getValue());
} }
saveApplicationEntity(applicationEntity); applicationEntity = saveApplicationEntity(applicationEntity);
return getApplicationResponse(applicationEntity);
} }
public Integer calculateProgress(Long totalSteps, Long completedSteps) { public Integer calculateProgress(Long totalSteps, Long completedSteps) {

View File

@@ -1,6 +1,7 @@
package net.gepafin.tendermanagement.dao; package net.gepafin.tendermanagement.dao;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.repositories.*;
@@ -174,81 +175,83 @@ public class FlowFormDao {
.orElse(null); .orElse(null);
} }
// public Long getPreviousForm(FormEntity currentFormEntity, ApplicationEntity applicationEntity) {
// // Retrieve the flow edges for the previous forms
// List<FlowEdgesEntity> flowEdgesList = flowEdgesRepository.findByTargetIdAndCallId(
// currentFormEntity.getId(), applicationEntity.getCall().getId());
//
// if (flowEdgesList.isEmpty()) {
// return null;
//// throw new ResourceNotFoundException(Status.NOT_FOUND,
//// Translator.toLocale(GepafinConstant.PREVIOUS_FORM_NOT_FOUND));
// }
//
// // If only one edge exists, return the source form ID
// if (flowEdgesList.size() == 1) {
// return flowEdgesList.get(0).getSourceId();
// }
//
// // For multiple edges, find the previous form based on the chosen value
// List<Long> previousFormIds = flowEdgesList.stream()
// .map(FlowEdgesEntity::getSourceId)
// .toList();
//
// // Fetch the flow data based on previous form IDs
// List<FlowDataEntity> flowDataList = flowDataRepository.findByFormIdInAndCallId(
// previousFormIds, applicationEntity.getCall().getId());
//
// List<String> chosenValues = flowDataList.stream()
// .map(FlowDataEntity::getChoosenValue)
// .toList();
//
// // Fetch the previous forms based on the chosen field values
// Set<FormEntity> formList = applicationFormFieldRepository
// .findByFieldValueInAndApplicationFormApplicationId(chosenValues, applicationEntity.getId()).stream()
// .map(fieldEntity -> fieldEntity.getApplicationForm().getForm())
// .collect(Collectors.toSet());
//
// // Find next form IDs recursively for all forms in the formList
// List<Long> fieldIds = formList.stream()
// .map(formEntity -> getNextForm(formEntity, applicationEntity))
// .toList();
//
// // Return the first matching previous form ID that corresponds to a next form
// return previousFormIds.stream()
// .filter(fieldIds::contains)
// .findFirst().orElse(null);
// }
public Long getPreviousForm(FormEntity currentFormEntity, ApplicationEntity applicationEntity) { public Long getPreviousForm(FormEntity currentFormEntity, ApplicationEntity applicationEntity) {
// Retrieve the flow edges for the previous forms
List<FlowEdgesEntity> flowEdgesList = flowEdgesRepository.findByTargetIdAndCallId(
currentFormEntity.getId(), applicationEntity.getCall().getId());
List<FlowEdgesEntity> flowEdgesList = flowEdgesRepository.findByTargetIdAndCallId( if (flowEdgesList.isEmpty()) {
currentFormEntity.getId(), applicationEntity.getCall().getId()); return null;
if (flowEdgesList.isEmpty()) {
return null;
// throw new ResourceNotFoundException(Status.NOT_FOUND, // throw new ResourceNotFoundException(Status.NOT_FOUND,
// Translator.toLocale(GepafinConstant.PREVIOUS_FORM_NOT_FOUND)); // Translator.toLocale(GepafinConstant.PREVIOUS_FORM_NOT_FOUND));
} }
// // If only one edge exists, return the source form ID // If only one edge exists, return the source form ID
// if (flowEdgesList.size() == 1) { if (flowEdgesList.size() == 1) {
// return flowEdgesList.get(0).getSourceId(); return flowEdgesList.get(0).getSourceId();
// } }
// For multiple edges, find the previous form based on the chosen value // For multiple edges, find the previous form based on the chosen value
List<Long> previousFormIds = flowEdgesList.stream() List<Long> previousFormIds = flowEdgesList.stream()
.map(FlowEdgesEntity::getSourceId) .map(FlowEdgesEntity::getSourceId)
.toList(); .toList();
List<ApplicationFormEntity> applicationFormEntities=applicationFormRepository.findByFormIdInAndApplicationId(previousFormIds,applicationEntity.getId()); // Fetch the flow data based on previous form IDs
List<FlowDataEntity> flowDataList = flowDataRepository.findByFormIdInAndCallId(
previousFormIds, applicationEntity.getCall().getId());
applicationFormEntities.sort(Comparator.comparing(ApplicationFormEntity::getCreatedDate).reversed()); List<String> chosenValues = flowDataList.stream()
.map(FlowDataEntity::getChoosenValue)
.toList();
return applicationFormEntities.isEmpty() ? null : applicationFormEntities.get(0).getForm().getId(); // Fetch the previous forms based on the chosen field values
Set<FormEntity> formList = applicationFormFieldRepository
.findByFieldValueInAndApplicationFormApplicationId(chosenValues, applicationEntity.getId()).stream()
.map(fieldEntity -> fieldEntity.getApplicationForm().getForm())
.collect(Collectors.toSet());
// Find next form IDs recursively for all forms in the formList
List<Long> fieldIds = formList.stream()
.map(formEntity -> getNextForm(formEntity, applicationEntity))
.toList();
// Return the first matching previous form ID that corresponds to a next form
return previousFormIds.stream()
.filter(fieldIds::contains)
.findFirst().orElse(null);
} }
public NextOrPreviousFormResponse getnextOrPreviousForm(ApplicationEntity applicationEntity, Long formId,
FormActionEnum action) { // public Long getPreviousForm(FormEntity currentFormEntity, ApplicationEntity applicationEntity) {
//
// List<FlowEdgesEntity> flowEdgesList = flowEdgesRepository.findByTargetIdAndCallId(
// currentFormEntity.getId(), applicationEntity.getCall().getId());
//
// if (flowEdgesList.isEmpty()) {
// return null;
//// throw new ResourceNotFoundException(Status.NOT_FOUND,
//// Translator.toLocale(GepafinConstant.PREVIOUS_FORM_NOT_FOUND));
// }
//
// // // If only one edge exists, return the source form ID
// // if (flowEdgesList.size() == 1) {
// // return flowEdgesList.get(0).getSourceId();
// // }
//
// // For multiple edges, find the previous form based on the chosen value
// List<Long> previousFormIds = flowEdgesList.stream()
// .map(FlowEdgesEntity::getSourceId)
// .toList();
// if (previousFormIds.size() == 1) {
// return previousFormIds.get(0);
// }
//
// List<ApplicationFormEntity> applicationFormEntities=applicationFormRepository.findByFormIdInAndApplicationId(previousFormIds,applicationEntity.getId());
// applicationFormEntities.sort(Comparator.comparing(ApplicationFormEntity::getCreatedDate).reversed());
//
// return applicationFormEntities.isEmpty() ? null : applicationFormEntities.get(0).getForm().getId();
// }
public NextOrPreviousFormResponse getNextOrPreviousForm(ApplicationEntity applicationEntity, Long formId,
FormActionEnum action) {
Long calculatedFormId = null; Long calculatedFormId = null;
FormEntity formEntity = null; FormEntity formEntity = null;
if (formId == null) { if (formId == null) {
@@ -299,7 +302,7 @@ public class FlowFormDao {
List<FlowEdgesEntity> flowEdgesList = flowEdgesRepository.findByCallId(applicationEntity.getCall().getId()); List<FlowEdgesEntity> flowEdgesList = flowEdgesRepository.findByCallId(applicationEntity.getCall().getId());
Long totalFormSteps = calculateTotalSteps(flowEdgesList); Long totalFormSteps = calculateTotalSteps(flowEdgesList);
Long currentStep = calculateCurrentStep(formEntity); Long currentStep = calculateCurrentStep(flowEdgesList, formEntity);
nextOrPreviousFormResponse.setTotalFormSteps(totalFormSteps); nextOrPreviousFormResponse.setTotalFormSteps(totalFormSteps);
completedSteps = getCompletedSteps(applicationEntity); completedSteps = getCompletedSteps(applicationEntity);
nextOrPreviousFormResponse.setCompletedSteps(Long.valueOf(completedSteps)); nextOrPreviousFormResponse.setCompletedSteps(Long.valueOf(completedSteps));
@@ -321,11 +324,11 @@ public class FlowFormDao {
return completedSteps; return completedSteps;
} }
public Long calculateCurrentStep(FormEntity formEntity) { public Long calculateCurrentStep(List<FlowEdgesEntity> flowEdgesList, FormEntity formEntity) {
Long currentStep = 2l; Long currentStep = 2l;
if (formEntity.getId().equals(formEntity.getCall().getInitialForm())) { if (formEntity.getId().equals(formEntity.getCall().getInitialForm())) {
currentStep = 1l; currentStep = 1l;
} else if (formEntity.getId().equals(formEntity.getCall().getFinalForm())) { } else if (flowEdgesList.size()>1 && formEntity.getId().equals(formEntity.getCall().getFinalForm())) {
currentStep = 3l; currentStep = 3l;
} }
return currentStep; return currentStep;
@@ -341,13 +344,21 @@ public class FlowFormDao {
private Long getDefaultForm(ApplicationEntity applicationEntity) { private Long getDefaultForm(ApplicationEntity applicationEntity) {
List<ApplicationFormEntity> applicationFormList = applicationFormRepository.findByApplicationIdOrderByCreatedDateAsc(applicationEntity.getId()); List<ApplicationFormEntity> applicationFormList = applicationFormRepository.findByApplicationIdOrderByCreatedDateAsc(applicationEntity.getId());
if(applicationFormList.isEmpty()) { if (applicationFormList.isEmpty()) {
return applicationEntity.getCall().getInitialForm(); return applicationEntity.getCall().getInitialForm();
} }
if(applicationFormList.get(applicationFormList.size()-1).getForm().getId().equals(applicationEntity.getCall().getFinalForm())) { if (applicationFormList.get(applicationFormList.size() - 1).getForm().getId().equals(applicationEntity.getCall().getFinalForm())) {
return applicationEntity.getCall().getInitialForm(); return applicationEntity.getCall().getInitialForm();
} }
return getNextForm(applicationFormList.get(applicationFormList.size()-1).getForm(), applicationEntity); FormEntity currentFormEntity = applicationFormList.get(applicationFormList.size() - 1).getForm();
for (ApplicationFormEntity applicationFormEntity : applicationFormList) {
Boolean isCompleted = formDao.validateCompletedSteps(applicationFormFieldRepository.findByApplicationFormId(applicationFormEntity.getId()), applicationEntity, applicationFormEntity.getForm());
if (Boolean.FALSE.equals(isCompleted)) {
return applicationFormEntity.getForm().getId();
}
}
return getNextForm(currentFormEntity, applicationEntity);
} }

View File

@@ -2,6 +2,8 @@ package net.gepafin.tendermanagement.model.response;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
@Data @Data
public class UserSamlResponse { public class UserSamlResponse {
@@ -10,4 +12,6 @@ public class UserSamlResponse {
private String firstName; private String firstName;
private String lastName; private String lastName;
private LocalDateTime dateOfBirth;
} }

View File

@@ -29,6 +29,6 @@ public interface ApplicationService {
public NextOrPreviousFormResponse getNextOrPreviousForm(HttpServletRequest request, Long applicationId, Long formId, FormActionEnum action); public NextOrPreviousFormResponse getNextOrPreviousForm(HttpServletRequest request, Long applicationId, Long formId, FormActionEnum action);
public void updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status); public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status);
} }

View File

@@ -72,12 +72,12 @@ public class ApplicationServiceImpl implements ApplicationService {
public NextOrPreviousFormResponse getNextOrPreviousForm(HttpServletRequest request, Long applicationId, Long formId, public NextOrPreviousFormResponse getNextOrPreviousForm(HttpServletRequest request, Long applicationId, Long formId,
FormActionEnum action) { FormActionEnum action) {
ApplicationEntity applicationEntity = validateApplication(applicationId); ApplicationEntity applicationEntity = validateApplication(applicationId);
return flowFormDao.getnextOrPreviousForm(applicationEntity, formId, action); return flowFormDao.getNextOrPreviousForm(applicationEntity, formId, action);
} }
@Override @Override
public void updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status) { public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status) {
applicationDao.updateApplicationStatus(applicationId, status); return applicationDao.updateApplicationStatus(applicationId, status);
} }

View File

@@ -33,6 +33,7 @@ import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -182,6 +183,13 @@ public class AuthenticationService {
&& !userAttributes.get("cognome").isEmpty()) { && !userAttributes.get("cognome").isEmpty()) {
userSamlResponse.setLastName(userAttributes.get("cognome").get(0).toString()); userSamlResponse.setLastName(userAttributes.get("cognome").get(0).toString());
} }
if (userAttributes.containsKey("dataNascita") && userAttributes.get("dataNascita") != null
&& !userAttributes.get("dataNascita").isEmpty()) {
String dateString =userAttributes.get("dataNascita").get(0).toString();
LocalDate dateOfBirth = LocalDate.parse(dateString);
LocalDateTime dateOfBirthWithTime = dateOfBirth.atStartOfDay();
userSamlResponse.setDateOfBirth(dateOfBirthWithTime);
}
userSamlResponse.setCodiceFiscale(cf); userSamlResponse.setCodiceFiscale(cf);
return userSamlResponse; return userSamlResponse;
} }

View File

@@ -127,7 +127,7 @@ public interface ApplicationApi {
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) })
@PutMapping(value = "/{applicationId}/status", produces = { "application/json" }) @PutMapping(value = "/{applicationId}/status", produces = { "application/json" })
ResponseEntity<Response<Void>> updateApplicationStatus(HttpServletRequest request, ResponseEntity<Response<ApplicationResponse>> updateApplicationStatus(HttpServletRequest request,
@Parameter(description = "The application id", required = true) @PathVariable("applicationId") Long applicationId, @Parameter(description = "The application id", required = true) @PathVariable("applicationId") Long applicationId,
@Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) ApplicationStatusTypeEnum status); @Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) ApplicationStatusTypeEnum status);

View File

@@ -83,10 +83,10 @@ public class ApplicationApiController implements ApplicationApi {
} }
@Override @Override
public ResponseEntity<Response<Void>> updateApplicationStatus(HttpServletRequest request, Long applicationId, public ResponseEntity<Response<ApplicationResponse>> updateApplicationStatus(HttpServletRequest request, Long applicationId,
ApplicationStatusTypeEnum status) { ApplicationStatusTypeEnum status) {
applicationService.updateApplicationStatus(request, applicationId, status); ApplicationResponse applicationResponse = applicationService.updateApplicationStatus(request, applicationId, status);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG))); .body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_UPDATED_SUCCESSFULLY)));
} }
} }

View File

@@ -9,8 +9,8 @@ spring.h2.console.enabled=true
base-url=http://bandi-api.gepafin.it base-url=http://bandi-api.gepafin.it
isVatCheckGloballyDisabled = false isVatCheckGloballyDisabled = false
fe.base.url=http://gepafin-production-fe.s3-website.eu-central-1.amazonaws.com #fe.base.url=http://gepafin-production-fe.s3-website.eu-central-1.amazonaws.com
fe.base.url=http://bandi.gepafin.it
#SPID configuration #SPID configuration
spid.ipd.base.url=https://login.regione.umbria.it spid.ipd.base.url=https://login.regione.umbria.it
active.profile.folder=production active.profile.folder=production

View File

@@ -710,6 +710,35 @@
<sqlFile dbms="postgresql" <sqlFile dbms="postgresql"
path="classpath:db/dump/updated_form_field_data_16-09-2024.sql" /> path="classpath:db/dump/updated_form_field_data_16-09-2024.sql" />
</changeSet> </changeSet>
<changeSet id="23-09-2024_1" author="Harish Bagora" dbms="postgresql">
<!-- Procedure for automatically setting the updated_date -->
<createProcedure>
CREATE OR REPLACE FUNCTION gepafin_schema.clock_timestamp_updated_date_column()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated_date = clock_timestamp();
RETURN NEW;
END;
$$;
</createProcedure>
<createProcedure>
CREATE OR REPLACE FUNCTION gepafin_schema.clock_timestamp_created_date_column()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
BEGIN
IF NEW.created_date IS NULL THEN
NEW.created_date = clock_timestamp();
END IF;
NEW.updated_date = NEW.created_date;
RETURN NEW;
END;
$$;
</createProcedure>
</changeSet>
<changeSet id="23-09-2024_1" author="Rajesh Khore"> <changeSet id="23-09-2024_1" author="Rajesh Khore">
<createTable tableName="saml_response"> <createTable tableName="saml_response">
@@ -842,4 +871,13 @@
path="classpath:db/dump/updated_form_field_data_03-10-2024.sql" /> path="classpath:db/dump/updated_form_field_data_03-10-2024.sql" />
</changeSet> </changeSet>
<changeSet id="03-10-2024_2" author="Nisha Kashyap">
<sql>
TRUNCATE TABLE FORM_FIELD RESTART IDENTITY;
</sql>
<sqlFile dbms="postgresql"
path="classpath:db/dump/updated_form_field_data_03-10-2024_1.sql" />
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -5,4 +5,5 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.23.xsd"> xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.23.xsd">
<include file="db/changelog/db.changelog-1.0.0.xml"/> <include file="db/changelog/db.changelog-1.0.0.xml"/>
<include file="db/changelog/dynamic-triggers.xml" />
</databaseChangeLog> </databaseChangeLog>

View File

@@ -0,0 +1,51 @@
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-4.0.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.23.xsd">
<changeSet id="23-09-2024_3" author="Harish Bagora" runAlways="true">
<sql splitStatements="false">
DO $$
DECLARE
r RECORD;
BEGIN
-- Loop through all tables in the schema that have the 'updated_date' column
FOR r IN (
SELECT table_name
FROM information_schema.columns
WHERE column_name = 'updated_date'
AND table_schema = 'gepafin_schema'
)
LOOP
EXECUTE format(
'CREATE OR REPLACE TRIGGER tg_gepafin_schema_updated_at_%I
BEFORE UPDATE ON gepafin_schema.%I
FOR EACH ROW
EXECUTE FUNCTION gepafin_schema.clock_timestamp_updated_date_column()',
r.table_name, r.table_name
);
END LOOP;
-- Loop through all tables in the schema that have the 'created_date' column
FOR r IN (
SELECT table_name
FROM information_schema.columns
WHERE column_name = 'created_date'
AND table_schema = 'gepafin_schema'
)
LOOP
EXECUTE format(
'CREATE OR REPLACE TRIGGER tg_gepafin_schema_created_at_%I
BEFORE INSERT ON gepafin_schema.%I
FOR EACH ROW
EXECUTE FUNCTION gepafin_schema.clock_timestamp_created_date_column()',
r.table_name, r.table_name
);
END LOOP;
END;
$$ LANGUAGE plpgsql;
</sql>
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,101 @@
INSERT INTO FORM_FIELD (SORT_ORDER, NAME, LABEL, DESCRIPTION, SETTINGS, VALIDATORS, CREATED_DATE, UPDATED_DATE)
VALUES
(1, 'textinput', 'Testo Breve', 'Per risposte concise (nomi, titoli, brevi descrizioni)',
'[{"name": "label", "value": "Testo Breve"}, {"name": "placeholder", "value": ""}]',
'{"isRequired": false, "minLength": null, "maxLength": null, "pattern": null, "custom": null}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(2, 'textarea', 'Testo Lungo', 'Campo di testo esteso per paragrafi, descrizioni, proposte',
'[{"name": "label", "value": "Testo Lungo"}, {"name": "placeholder", "value": ""}]',
'{"isRequired": false, "minLength": null, "maxLength": null, "pattern": null, "custom": null}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(3, 'wysiwyg', 'Campo di Testo Formattato', 'Editor avanzato per testo con formattazione',
'[{"name": "label", "value": "Testo Formattato"}, {"name": "placeholder", "value": ""}]',
'{"isRequired": false, "minLength": null, "maxLength": null, "pattern": null, "custom": null}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(4, 'numberinput', 'Campo Numerico', 'Per l''inserimento di valori numerici (quantità, importi, percentuali)',
'[{"name": "label", "value": "Numero"}, {"name": "placeholder", "value": "0"}, {"name": "step", "value": "0"}]',
'{"isRequired": false, "min": null, "max": null, "pattern": null, "custom": null}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(5, 'radio', 'Scelta Singola', 'Gruppo di opzioni per selezione singola',
'[{"name": "label", "value": "Scelta Singola"}, {"name": "options", "value": []}]',
'{"isRequired": false, "custom": null}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(6, 'select', 'Menu a Tendina', 'Selezione da opzioni predefinite',
'[{"name": "label", "value": "Menu a Tendina"}, {"name": "options", "value": []}]',
'{"isRequired": false, "custom": null}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(7, 'checkboxes', 'Scelta Multipla', 'Gruppo di opzioni per selezione singola o multipla',
'[{"name": "label", "value": "Scelta Multipla"}, {"name": "options", "value": []}]',
'{"isRequired": false, "min": null, "max": null, "custom": null}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(8, 'switch', 'Casella di Spunta', 'Per selezioni binarie, accettazioni, conferme',
'[{"name": "label", "value": "Casella di Spunta"}]',
'{"isRequired": false}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(9, 'datepicker', 'Data', 'Selezione di data',
'[{"name": "label", "value": "Data"}]',
'{"isRequired": false}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(10, 'fileupload', 'Caricamento File', 'Per l''upload di documenti o immagini',
'[{"name": "label", "value": "Caricamento File"}, {"name": "mime", "value": []}]',
'{"isRequired": false, "maxSize": 100000}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(11, 'textinput', 'Campo Partita IVA', 'Specifico per l''inserimento del numero di Partita IVA',
'[{"name": "label", "value": "Partita IVA"}, {"name": "placeholder", "value": ""}]',
'{"isRequired": true, "custom": "isPIVA"}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(12, 'textinput', 'Campo Codice Fiscale','Specifico per l''inserimento del Codice Fiscale italiano per persone fisiche e giuridiche',
'[{"name": "label", "value": "Codice Fiscale"}, {"name": "placeholder", "value": ""}]',
'{"isRequired": true, "custom": "isCodiceFiscale"}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(13, 'textinput', 'Campo CAP','Per l''inserimento del Codice di Avviamento Postale',
'[{"name": "label", "value": "CAP"}, {"name": "placeholder", "value": ""}]',
'{"isRequired": true, "custom": "isCAP"}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(14, 'textinput', 'Campo IBAN', 'Per l''inserimento del codice IBAN',
'[{"name": "label", "value": "IBAN"}, {"name": "placeholder", "value": ""}]',
'{"isRequired": true, "custom": "isIBAN"}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(15, 'textinput', 'Campo Email', 'Per l''inserimento di indirizzi email standard (non PEC)',
'[{"name": "label", "value": "Campo Email"}, {"name": "placeholder", "value": "nome@esempio.it"}]',
'{"isRequired": false, "custom": "isEmail"}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(16, 'textinput', 'Campo PEC', 'Specifico per l''inserimento di un indirizzo di Posta Elettronica Certificata',
'[{"name": "label", "value": "Campo PEC"}, {"name": "placeholder", "value": "nome@pec.it"}]',
'{"isRequired": false, "custom": "isEmailPEC"}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(17, 'textinput', 'Campo URL', 'Per l''inserimento di indirizzi web',
'[{"name": "label", "value": "Indirizzo URL"}, {"name": "placeholder", "value": ""}]',
'{"isRequired": false, "custom": "isUrl"}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(18, 'textinput', 'Marca da bollo', 'Per inserire codice di marca da bollo',
'[{"name": "label", "value": "Marca da bollo"}, {"name": "placeholder", "value": "Numero identificativo"}]',
'{"isRequired": false, "custom": "isMarcaDaBollo"}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(19, 'paragraph', 'Paragrafo', 'Semplice testo formattato',
'[{"name": "text", "value": ""}]',
'{}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
(20, 'table', 'Tabella', 'Tabella',
'[{"name": "label", "value": "Tabella"}, {"name": "table_columns", "value": []}]',
'{}',
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

View File

@@ -209,3 +209,5 @@ user.already.connected.to.company=The user is already connected to this company.
call.not.started.yet = The call has not started yet. Please wait until the specified start date and time. call.not.started.yet = The call has not started yet. Please wait until the specified start date and time.
call.already.ended = The call has already ended. You cannot submit the application after the deadline. call.already.ended = The call has already ended. You cannot submit the application after the deadline.
status.updated.successfully=Status updated successfully.
application.status.updated.successfully = Application status updated successfully.

View File

@@ -9,7 +9,7 @@ get_user_success_msg=Utente recuperato con successo.
get_user_error_msg=Si <20> verificato un errore durante il recupero dell'utente. get_user_error_msg=Si <20> verificato un errore durante il recupero dell'utente.
user.not.active=Utente non attivo. Si prega di contattare il supporto. user.not.active=Utente non attivo. Si prega di contattare il supporto.
user.already.exist.msg=L'utente esiste gi<67> per questo codice fiscale. user.already.exist.msg=L'utente esiste gi<67> per questo codice fiscale.
validate.email=L'email è obbligatoria e deve essere nel formato corretto. Si prega di verificare e riprovare. validate.email=L'email <EFBFBD> obbligatoria e deve essere nel formato corretto. Si prega di verificare e riprovare.
validate.password=La password e confPassword sono obbligatorie. Verifica e riprova. validate.password=La password e confPassword sono obbligatorie. Verifica e riprova.
# Role-related messages # Role-related messages
role.created.success=Ruolo creato con successo. role.created.success=Ruolo creato con successo.
@@ -20,7 +20,7 @@ create.role.error=Errore durante la creazione del ruolo.
update.role.error=Errore durante l'aggiornamento del ruolo. update.role.error=Errore durante l'aggiornamento del ruolo.
role.fetch.success=Ruolo recuperato con successo. role.fetch.success=Ruolo recuperato con successo.
delete.role.error=Errore durante l'eliminazione del ruolo. delete.role.error=Errore durante l'eliminazione del ruolo.
role.id.mandatory=L'ID del ruolo è obbligatorio. role.id.mandatory=L'ID del ruolo <EFBFBD> obbligatorio.
# Region-related messages # Region-related messages
region.created.success=Regione creata con successo. region.created.success=Regione creata con successo.
@@ -194,10 +194,12 @@ company.get.success=Azienda recuperata con successo.
company.not.found=Azienda non trovata. company.not.found=Azienda non trovata.
check.vatnumber.success=Numero di partita IVA verificato con successo. check.vatnumber.success=Numero di partita IVA verificato con successo.
invalid.vatnumber=Numero di partita IVA non valido. invalid.vatnumber=Numero di partita IVA non valido.
vatnumber.mandatory=Il numero di partita IVA è obbligatorio. vatnumber.mandatory=Il numero di partita IVA <EFBFBD> obbligatorio.
vatnumber.already.exists=Il numero di partita IVA esiste già. vatnumber.already.exists=Il numero di partita IVA esiste gi<EFBFBD>.
invalid.email=Email non valida. invalid.email=Email non valida.
company.id.mandatory=L'ID dell'azienda è obbligatorio. company.id.mandatory=L'ID dell'azienda <EFBFBD> obbligatorio.
user.already.connected.to.company=L'utente è già collegato a questa azienda. user.already.connected.to.company=L'utente <EFBFBD> gi<EFBFBD> collegato a questa azienda.
call.not.started.yet = La chiamata non è ancora iniziata. Attendere fino alla data e all'ora di inizio specificate. call.not.started.yet = La chiamata non <EFBFBD> ancora iniziata. Attendere fino alla data e all'ora di inizio specificate.
call.already.ended = La chiamata è già terminata. Non è possibile inviare l'applicazione dopo la scadenza. call.already.ended = La chiamata <EFBFBD> gi<EFBFBD> terminata. Non <EFBFBD> possibile inviare l'applicazione dopo la scadenza.
status.updated.successfully=Stato aggiornato con successo.
application.status.updated.successfully = Stato dell'applicazione aggiornato con successo.