Work with us!

Bringing innovation to tomorrow's climate

At Clivet, the contribution of each member of our team makes a difference. Browse our current job opportunities and find out how you can join the Clivet team.

600+
employees
35
agencies in italy
90
Countries we export to
7
Subsidiaries worldwide
Natural overview from above, our commitment to a sustainable future
Our commitment to a sustainable future

For more than 35 years we have been offering solutions for sustainable comfrot and the well-being of individuals and the environment, using innovative and energy-efficient technologies. Join us on this journey towards a more sustainable future.

Your future starts here

An error occurred while processing the template.
Java method "jdk.proxy3.$Proxy164.getCategory(long)" threw an exception when invoked on jdk.proxy3.$Proxy164 object "com.liferay.portlet.asset.service.impl.AssetCategoryServiceImpl@64912693"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign categoryTitle = assetCategory...  [in template "10110#2640274#72734807" at line 89, column 57]
----
1<#assign hasCategories = false /> 
2<#assign assetCategoryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryService") /> 
3<#assign assetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService") /> 
4<#assign randomNamespace="0.${turnoverstr(.now?long?string)}"?number?string?replace(".", "") /> 
5 
6<style> 
7  .n_${randomNamespace}.categories-filter .dropdown-toggle { 
8	  text-transform: capitalize; 
9	  display: flex; 
10	  flex-direction: row; 
11		justify-content: space-between; 
12		align-items: center; 
13		height: 50px; 
14		min-width: 240px; 
15		border-color: #E7E7E7; 
16    border-radius: 8px; 
17		background-color: #fff; 
18		font-weight: 400; 
19
20	.n_${randomNamespace}.categories-filter .dropdown-toggle::after { 
21    display: block; 
22    /* margin-left: .255em; */ 
23    /* vertical-align: .255em; */ 
24    content: ""; 
25    /* border-top: .3em solid; */ 
26    /* border-right: .3em solid transparent; */ 
27    /* border-bottom: 0; */ 
28    /* border-left: .3em solid transparent; */ 
29    background-image: url(/o/clivet-liferay-nuance-theme/images/icons/chevron.svg); 
30    width: 24px; 
31    height: 24px; 
32    color: #000; 
33    transform: rotate(0deg); 
34
35	.n_${randomNamespace}.categories-filter .dropdown-item { 
36		text-transform: capitalize; 
37  	color: #000 !important; 
38		font-size: 16px; 
39		font-weight: 400; 
40
41	.n_${randomNamespace}.filter-label { 
42		color: #717171; 
43		font-size: 16px; 
44		font-style: normal; 
45		font-weight: 400; 
46
47	@media only screen and (max-width: 991.98px) { 
48		.n_${randomNamespace}.categories-filter .dropdown, 
49		.n_${randomNamespace}.categories-filter .dropdown-toggle { 
50			width: 100%; 
51
52
53</style> 
54 
55<#macro displayCategories 
56	categories 
57
58	<#if categories?has_content> 
59			<#list categories as category> 
60					<#assign categoryURL = renderResponse.createRenderURL() /> 
61 
62					${categoryURL.setParameter("resetCur", "true")} 
63					${categoryURL.setParameter("categoryId", category.getCategoryId()?string)} 
64					<#assign categoryURLs = categoryURL.toString()?replace("#p_"+themeDisplay.getPortletDisplay().getId(),"") /> 
65					<a href="${categoryURLs}" class="dropdown-item"><span class="text-truncate">${category.getTitle(themeDisplay.getLocale())}</span></a> 
66 
67					<#if serviceLocator??> 
68						<#assign childCategories = assetCategoryService.getChildCategories(category.getCategoryId()) /> 
69						<@displayCategories categories=childCategories /> 
70					</#if> 
71			</#list> 
72	</#if> 
73</#macro> 
74 
75<#assign categoryId = paramUtil.getLong(renderRequest, "categoryId") /> 
76<#assign firstButtonId = "" /> 
77<#if entries?has_content> 
78	<div class="n_${randomNamespace} categories-filter container">  
79		    <div class="n_${randomNamespace} filter-label mb-2 mb-lg-0"><@liferay_ui.message key="filter-by" />:</div> 
80		<div class="d-flex flex-column flex-lg-row justify-content-center align-items-center g-3"> 
81			<#assign index = 0/> 
82			<#list entries as entry> 
83				<#assign categories = entry.getCategories() /> 
84				<#assign categories = filterVisibleCategories(categories) /> 
85				<#if categories?has_content> 
86					<#assign hasCategories = true /> 
87						<#assign categoryTitle = entry.getUnambiguousTitle(entries, themeDisplay.getSiteGroupId(), themeDisplay.getLocale()) /> 
88						<#if validator.isNotNull(categoryId) && containsCategory(categories, categoryId)> 
89							<#assign categoryTitle = assetCategoryService.getCategory(categoryId).getName() /> 
90						</#if> 
91						<div class="dropdown"> 
92							<#if index == 0 > 
93							  <#assign firstButtonId = "n_${randomNamespace}dropdownMenuButton" />	 
94							</#if> 
95							<button class="btn dropdown-toggle" type="button" id="n_${randomNamespace}dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 
96    						${categoryTitle} 
97 							</button> 
98							<div class="dropdown-menu" aria-labelledby="n_${randomNamespace}dropdownMenuButton"> 
99								<@displayCategories categories=categories /> 
100							</div> 
101						</div> 
102				</#if> 
103				<#assign index = index + 1/> 
104			</#list> 
105      <#if hasCategories> 
106				<#assign resetCategoryURL = renderResponse.createRenderURL() /> 
107				${resetCategoryURL.setParameter("resetCur", "true")} 
108				${resetCategoryURL.setParameter("categoryId", "")} 
109				<a href="${resetCategoryURL}" class="reset-item btn btn-primary m-auto m-lg-0 justify-content-center"><span class="text-truncate"><@liferay.language key="reset" /></span></a> 
110			</#if> 
111			<#if !hasCategories> 
112				${renderRequest.setAttribute("PORTLET_CONFIGURATOR_VISIBILITY", true)} 
113 
114				<div class="alert alert-info w-100"> 
115					<@liferay_ui.message key="there-are-no-categories" /> 
116				</div> 
117			</#if> 
118		</div> 
119	</div> 
120</#if> 
121 
122<#function containsCategory 
123	categories 
124	lookup 
125
126	<#if categories?has_content> 
127		<#list categories as category> 
128				<#if category.getCategoryId() == lookup> 
129					<#return true /> 
130				</#if> 
131			<#assign childCategories = assetCategoryService.getChildCategories(category.getCategoryId()) /> 
132			<#if childCategories?has_content> 
133				<#return containsCategory(childCategories, lookup)/> 
134			</#if> 
135		</#list> 
136	</#if> 
137	<#return false /> 
138</#function> 
139 
140<#function filterVisibleCategories categories> 
141	<#assign result = [] /> 
142	<#if categories?has_content> 
143		<#list categories as category> 
144			<#attempt> 
145				<#assign visibilityProp = assetCategoryPropertyLocalService.fetchCategoryProperty(category.getCategoryId(), "VISIBILITY_FILTER") /> 
146				<#if visibilityProp?? && visibilityProp.getValue() == "TRUE"> 
147					<#assign result = result + [category] /> 
148				</#if> 
149			<#recover> 
150			</#recover> 
151		</#list> 
152	</#if> 
153	<#return result /> 
154</#function> 
155 
156<#function random > 
157	<#local h="0.${turnoverstr(.now?long?string)}" /> 
158	<#local r=h?number + rnd /> 
159	<#if r >= 1> 
160		<#local r=r-1 /> 
161	</#if> 
162	<#assign rnd=r /> 
163	<#return r/> 
164</#function> 
165 
166<#function turnoverstr str > 
167	<#local l = str?length /> 
168	<#local r = ""/> 
169	<#list 1..l as i> 
170		<#local r = r+str?substring(l-i,l-i+1)/> 
171	</#list> 
172	<#return r/> 
173</#function> 
174 
175 
176<#assign selectedOptionName = "default_value"> 
177<#if filterType?? && filterType.getData()?has_content> 
178    <#if filterType.getData() == 'opzione11682098'> 
179        <#assign selectedOptionName = 'product_filter'> 
180    <#elseif filterType.getData() == 'opzione80749396'> 
181        <#assign selectedOptionName = 'use_case_filter'> 
182    <#elseif filterType.getData() == 'opzione61712593'> 
183        <#assign selectedOptionName = 'job_filter'> 
184    <#elseif filterType.getData() == 'opzione71672717'> 
185        <#assign selectedOptionName = 'content_type_filter'> 
186    <#elseif filterType.getData() == 'opzione22125586'> 
187        <#assign selectedOptionName = 'operator_filter'> 
188    </#if> 
189</#if> 
190					 
191<script> 
192 
193	  $(".n_${randomNamespace}.categories-filter .dropdown-item").on('click', function(event) {  
194    if (typeof sendMeasurementEventFilter === 'function') {   
195		   var filterName = $(this).text(); 
196			  var filterType = '${selectedOptionName}';  
197        sendMeasurementEventFilter('Filter', filterType, filterName, 'no_type'); 
198    } else { 
199      console.error('sendMeasurementEventFilter not defined'); 
200
201  }); 
202	 
203	function fn_${randomNamespace}_fixLabel() { 
204	  let leftBtn = $("#${firstButtonId}").offset().left; 
205		let leftLabel = $(".n_${randomNamespace}.filter-label").offset().left; 
206		$(".n_${randomNamespace}.filter-label").css("paddingLeft", (leftBtn - leftLabel)+'px'); 
207		 
208		 
209
210	$(window).on('resize', function(){ 
211	  fn_${randomNamespace}_fixLabel(); 
212	}); 
213  fn_${randomNamespace}_fixLabel(); 
214</script> 
Test room technician for air conditioning, heating and air treatment systems and installations
Quality
Padua

PROFILE SEARCHED

In preparation for a growth phase of our Laboratory Area in Padua, we are selecting a Laboratory Technician to support us in the development of our business.
The selected resource, placed in the Quality area and coordinated by the Test Room Manager, will have the task of supporting the development process of new products, carrying out certification and qualification tests of new components related to systems and units for air conditioning, heating and air treatment systems.

More specifically, within the operations team, the resource will be responsible for:

  • Conducting laboratory tests defined by a test plan with responsibility for their correct execution;
  • Defining and setting up the instrumentation and room set-up for carrying out the tests;
  • Defining the test sequence and the measuring instrumentation to be used;
  • Carrying out laboratory checks on test benches;
  • Drawing up test reports adopting the standards relating to the products tested and verifying their conformity;
  • Record test results in qualification plans for review and update the necessary technical documents and procedures based on the results obtained;
  • Propose improvements in testing techniques and on the product based on experience and knowledge of new measuring instruments;
  • Participate in test campaigns at third-party laboratories in Italy/Europe, if necessary and requested.

Candidates with the following requirements will be considered for selection:

  • Diploma of thermotechnical/electrical/mechanical expert or vocational school;
  • Basic knowledge of electrical, mechanical, thermotechnical and acoustic measurements;
  • Good skills and propensity for manual work;
  • Ability to analyse and interpret results;
  • Problem solving and teamwork;
  • Operational autonomy and result orientation;
  • Good knowledge of Office package (especially Excel);

Additional requirements that will be a preference:

  • Basic knowledge of the refrigeration circuit;
  • Intermediate level knowledge of the English language;
  • Previous experience of at least 1/2 years in the role or in related tasks (e.g.: tester), within medium/large-sized engineering industrial contexts preferably in the HVAC sector.


Duration

Full-time working hours, also on 2/3 shifts.

Salary, level and duration of contract will be commensurate with experience in the role.

 

To apply click here

Didn't find what you were looking for?
We are always interested in receiving new applications