Visualización del menú

Ruta de navegación

Publicador de contenidos

Se ha producido un error al procesar la plantilla.
Java method "com.cofares.services.impl.GoogleMapsDataServiceImpl.getGoogleMapsData(String, String, long, long, String, String, String, String, String)" threw an exception when invoked on com.cofares.services.impl.GoogleMapsDataServiceImpl object "com.cofares.services.impl.GoogleMapsDataServiceImpl@200d3722"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign farmacias = GoogleMapsDataSer...  [in template "20095#20121#70868" at line 252, column 1]
----
1<#assign JSONFactoryUtil = staticUtil["com.liferay.portal.kernel.json.JSONFactoryUtil"]/> 
2<script async src="https://maps.google.com/maps/api/js?v=3&libraries=geometry,places&key=AIzaSyADxO5pq3U3jcHoM1SMQ9FFvIPlENolN5k"></script> 
3<script src="https://cdn.rawgit.com/googlemaps/js-marker-clusterer/gh-pages/src/markerclusterer.js"></script> 
4 
5<script type="text/javascript"> 
6	var centros = []; 
7	var gmarkers = []; 
8	var gmarkersshow = []; 
9	var side_bar_html = ""; 
10	var map, marker_you, userMarker, directionsService, directionsDisplay, infowindow, markerCluster; 
11	var geoActive = true; 
12	var geocoder; 
13 
14	var defaultCoordinates = { coords: { latitude: 36.5, longitude: -13.0 } }; 
15	var defaultZoomLevel = 16; 
16 
17	function addCentros(contador, direccion, latitud, longitud, enlace, telefono) { 
18		var entryLocation = [direccion, latitud, longitud, enlace, telefono]; 
19		centros[contador] = entryLocation; 
20
21 
22	function showError() { 
23		console.log("showError"); 
24		defaultZoomLevel = 5; 
25		initializeMaps(defaultCoordinates); 
26
27 
28	function createMarker(latlng, html_infow, html_res, indice) { 
29		var contentString = html_infow; 
30		var marker = new google.maps.Marker({ 
31			icon: '/documents/20119/0/marker.png', 
32			position: latlng, 
33			zIndex: Math.round(latlng.lat * -100000) << 5, 
34			info: html_res, 
35			ind: indice, 
36			visible: false // Ocultar los marcadores de farmacias al inicio 
37		}); 
38 
39		google.maps.event.addListener(marker, 'click', function () { 
40			infowindow.setContent(contentString); 
41			infowindow.open(map, marker); 
42		}); 
43 
44		gmarkers.push(marker); 
45		return marker; 
46
47 
48	function initLoad() { 
49		geocoder = new google.maps.Geocoder(); 
50		if (navigator.geolocation) { 
51			navigator.geolocation.getCurrentPosition(initializeMaps, showError, { enableHighAccuracy: true, maximumAge: 0 }); 
52		} else { 
53			initializeMaps(defaultCoordinates); 
54
55
56 
57	function initializeMaps(userPosition) { 
58		userMarker = userPosition; 
59 
60		var myOptions = { 
61			zoom: defaultZoomLevel, 
62			center: new google.maps.LatLng(userPosition.coords.latitude, userPosition.coords.longitude), 
63			mapTypeId: google.maps.MapTypeId.ROADMAP 
64		}; 
65 
66		map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
67		infowindow = new google.maps.InfoWindow({ size: new google.maps.Size(150, 50) }); 
68 
69		directionsService = new google.maps.DirectionsService(); 
70		directionsDisplay = new google.maps.DirectionsRenderer(); 
71 
72		loadCentros(); 
73		$(".js_input_dir").select(); 
74		mostrarTodasLasFarmacias(); 
75 
76		google.maps.event.addListener(map, 'idle', function() { 
77			actualizarFarmaciasVisibles(); 
78		}); 
79
80 
81	function loadCentros() { 
82		for (var i = 0; i < centros.length; i++) { 
83			try { 
84				var latlng = { lat: parseFloat(centros[i][1]), lng: parseFloat(centros[i][2]) }; 
85				var html_infow = '<div id="content_gmap"><p class="center_address">' + centros[i][0] + '</p><p><a href="tel:' + centros[i][4] + '">' + centros[i][4] + '</a></p><a class="btn-link" href="javascript:void(0);" onclick="arriveTo(\'' + centros[i][1] + '\', \'' + centros[i][2] + '\');"> Cómo llegar </a></div>'; 
86				var html_res = '<div id="content_gmap"><p class="center_address">' + centros[i][0] + '</p><p><a href="tel:' + centros[i][4] + '">' + centros[i][4] + '</a></p><a class="btn-link" href="javascript:void(0);" onclick="arriveTo(\'' + centros[i][1] + '\', \'' + centros[i][2] + '\');"> Cómo llegar </a></div>'; 
87				createMarker(latlng, html_infow, html_res, i); 
88			} catch (error) { 
89				// Manejo de error al cargar la farmacia 
90
91
92
93 
94	function mostrarTodasLasFarmacias() { 
95		var bounds = new google.maps.LatLngBounds(); 
96		side_bar_html = '<div class="info_container">'; 
97		for (var i = 0; i < gmarkers.length; i++) { 
98			bounds.extend(gmarkers[i].getPosition()); 
99			var distanceText = calculateDistance(gmarkers[i].getPosition()); 
100			side_bar_html += '<div class="info_fcia_side_bar div_side_bar_' + i + '">'; 
101			side_bar_html += '<div class="info_fcia_distance">' + distanceText + '</div>'; 
102			side_bar_html += gmarkers[i].info.replace("{index}", i); 
103			side_bar_html += '</div>'; 
104
105		side_bar_html += '</div>'; 
106		document.getElementById("side_bar").innerHTML = "<div class=\"titulosidebar\"><p class=\"title_results_gmaps\"><strong>" + gmarkers.length + " farmacias</strong> encontradas:</p></div>" + side_bar_html; 
107		 
108		applyMarkerCluster();  
109
110 
111	function applyMarkerCluster() { 
112		if (markerCluster) markerCluster.clearMarkers(); 
113 
114		var clusterStyles = [{ 
115			url: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m1.png', 
116			height: 50, 
117			width: 50, 
118			textColor: '#ffffff', 
119			textSize: 8 
120		}]; 
121 
122		markerCluster = new MarkerClusterer(map, gmarkers, { 
123			styles: clusterStyles, 
124			gridSize: 50, 
125			maxZoom: 12, 
126			zoomOnClick: false 
127		}); 
128 
129		google.maps.event.addListener(markerCluster, 'clusterclick', function(cluster) { 
130			var markers = cluster.getMarkers(); 
131			if (map.getZoom() >= 13) { 
132				for (var i = 0; i < markers.length; i++) { 
133					markers[i].setVisible(true); 
134
135
136			map.fitBounds(cluster.getBounds()); 
137		}); 
138
139 
140	function actualizarFarmaciasVisibles() { 
141		var bounds = map.getBounds(); 
142		side_bar_html = '<div class="info_container">'; 
143		var gmarkersshow = []; 
144 
145		for (var i = 0; i < gmarkers.length; i++) { 
146			if (bounds.contains(gmarkers[i].getPosition())) { 
147				gmarkers[i].setMap(map); 
148				gmarkers[i].setVisible(map.getZoom() >= 13); 
149				gmarkersshow.push(gmarkers[i]); 
150 
151				var distanceText = calculateDistanceFromUser(gmarkers[i].getPosition()); 
152				side_bar_html += '<div class="info_fcia_side_bar div_side_bar_' + i + '">'; 
153				side_bar_html += '<div class="info_fcia_distance"><span class="text-base">' + distanceText + '</span></div>'; 
154				side_bar_html += gmarkers[i].info.replace("{index}", i); 
155				side_bar_html += '</div>'; 
156			} else { 
157				gmarkers[i].setVisible(false); 
158
159
160 
161		side_bar_html += '</div>'; 
162		document.getElementById("side_bar").innerHTML = "<div class=\"titulosidebar\"><p class=\"title_results_gmaps\"><strong>" + gmarkersshow.length + " farmacias</strong> encontradas:</p></div>" + side_bar_html; 
163
164 
165	function calculateDistanceFromUser(markerPosition) { 
166		if (!userMarker) return "N/A"; 
167		var userLocation = new google.maps.LatLng(userMarker.coords.latitude, userMarker.coords.longitude); 
168		var markerLocation = new google.maps.LatLng(markerPosition.lat(), markerPosition.lng()); 
169		var distance = google.maps.geometry.spherical.computeDistanceBetween(userLocation, markerLocation); 
170		return (distance / 1000).toFixed(2) + " km"; 
171
172 
173	function calculateDistance(markerPosition) { 
174		if (!userMarker) return "N/A"; 
175		var userLocation = new google.maps.LatLng(userMarker.coords.latitude, userMarker.coords.longitude); 
176		var markerLocation = new google.maps.LatLng(markerPosition.lat(), markerPosition.lng()); 
177		var distance = google.maps.geometry.spherical.computeDistanceBetween(userLocation, markerLocation); 
178		return (distance / 1000).toFixed(2) + " km"; 
179
180 
181	function codeAddress() { 
182		if (directionsDisplay) directionsDisplay.setMap(null); 
183		$("#map_indications").html(""); 
184 
185		var searchAddress = $("#address").val(); 
186		if (searchAddress) { 
187			setTimeout(function () { 
188				$(".div_lista").fadeIn(); 
189				exe_code_address(searchAddress); 
190			}, 200); 
191
192
193 
194	function exe_code_address(searchAddress) { 
195		if (!searchAddress) return; 
196 
197		// Utiliza un debouncer para evitar llamadas excesivas 
198		if (this.searchTimeout) clearTimeout(this.searchTimeout); 
199 
200		// Esperar 300ms antes de ejecutar la búsqueda 
201		this.searchTimeout = setTimeout(async () => { 
202			try { 
203				const results = await geocodeAddress(searchAddress); 
204 
205				if (results && results.length > 0) { 
206					map.setCenter(results[0].geometry.location); 
207					map.setZoom(16); // Ajusta el nivel de zoom según sea necesario 
208					marker_you = new google.maps.Marker({ map: map, position: results[0].geometry.location }); 
209					actualizarFarmaciasVisibles(); 
210
211			} catch (error) { 
212				//console.error("Error en la búsqueda de direcciones 
213
214		}, 300); // Retardo de 300ms para evitar búsquedas continuas mientras se escribe 
215
216 
217	function geocodeAddress(searchAddress) { 
218		return new Promise((resolve, reject) => { 
219			geocoder.geocode({ address: searchAddress }, function (results, status) { 
220				if (status === google.maps.GeocoderStatus.OK) { 
221					resolve(results); 
222				} else { 
223					reject(new Error("Error en la geocodificación: " + status)); 
224
225			}); 
226		}); 
227
228 
229	function arriveTo(lat, lng) { 
230		var destination = lat + ',' + lng; 
231		var mapsUrl = 'https://www.google.com/maps/dir/?api=1&destination=' + destination; 
232		window.open(mapsUrl, '_blank'); 
233
234</script> 
235 
236 
237<#assign getterUtil = staticUtil["com.liferay.portal.kernel.util.GetterUtil"]/> 
238<#assign groupId = themeDisplay.getScopeGroupId()/> 
239<#assign journalArticleLocalServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")/> 
240<#assign GoogleMapsDataService = serviceLocator.findService("com.cofares.services.api.GoogleMapsDataService")/> 
241<#assign structureID = 3904526/> 
242<#assign googleMapsDataPrivateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDEZ0FwXxBcrXvm\nXHCBfs5TEm+g/5BuDXhhMKh9Pbj/MGk1ozCyFFQFq57YBhW1FfJoKPfZLS7kY0My\nbY29IFZ75f6DQbJfk1Vvdy9HhXZV8SWm5FseLaHGE4bUBMPg8bU5QXMU80ux6Lyp\nAH99cIZ5BmoJ0JkcnLQ8FitMgobnB+tv1ZkJy+4Sbf/gxqubhyqy4OaojcGARleC\nlV/nQDxcnhandiiZGZ+szBc9rSiHJ0eDbvksHUOn1Hk2s+3oOyU2dBNorWGkbaRB\nKbE06rF+zgPP3c5g7goz+osbd06sXpA2xoIOUERlx5/vphcC0YFoXyKUKPzdPn9I\nk/2VohyJAgMBAAECggEADf48IgkorZNP4KdIZFy7aLbHcxIr4UA4PSOnqLJFMN7r\nOAuZWuHqfjO7XJfLMLydQ0EoyEJMW30cNG0Sxd1JqO7HiRfp4Tf3KweaVXJ57mcA\n43JuPYJ+l3hPr5TRVRo56uTk+DxA8eGFNrzjpUI0CoGW/EqhuT4+8+/LN1qU/JCQ\n8RNlFjTjbu35+/XeLzXu4Xt1U+5okAcxQPt7zUZh0rmKe2lA54CF0tNUDWegHQoi\nV9XhRoBXo+tJtBREgHi6t/5FP+605dHMUhFAM22W+X6DO35Bbzs43brkOZYfST64\nNYZ1Q/5M2P5KOA+OobcTYdRj+vXejxSULITbOtfBQwKBgQDx7iZanQgy/xXGjDUe\n1hJy7E1vlMyO1gyuR1mCeLD2S2/arDeQXHzPxFA1Dpq40C2KZSqAZcwwd1NPQMaA\nm0eEO9v945dXtRJbnGwtO0d2nJweLEyL/KS2o9Sb7Ou41ZI4bk4jlCHXAcaoRU9T\njQ7tg56ErymsBmG9X6VEoHsjIwKBgQDP001kYB99vvjXj+53hZfpSdPse4nn8Le+\n8aZIk1UdOgiYgj26QkTlnHbsR/Koem2oowchsfsOS6zEFZuM8EsuaxTjWSaYPCbg\n8Q9YarkAWLU7U5UGPh0CsnG9TsDI4OnQg29RV/SKIBrd3eu0bZzMEA4+oZX170pz\nZLZD6MHCYwKBgAPIpr7qD9PEW5HUZYxK6tTzTy68lApz3JTpNsQsoQ/pFCHGacQP\nPkB9oIeD5/WWA/BTLrv9W5kydJIbwD8IrrCpwwIQijBr+5KFOsfmUnLPdj2ekb/q\nvqTAoTWjGfi1FmldiElUKsdTFslQ9DGpVh9u3I7UsoEnRGYS1eHh5KsjAoGAcErY\n71psyZHtfPP9QsGBcoD8rDOYMSXE8rw5P8+z1qXrzRPabJCwD2y6aTL674OvSsZD\n7TXw1CmZgR23vbB8vukHEUyzaOBflX1K8FhB++jyi8q+o+/d1v46LLKnwiKc05ih\nBk/DBvsP6T+mwwfTCAPI3piKoacZED6jqQ/T2ccCgYBHyKTh7AdNTIKc7y2p8pQ1\nexgZ7gM4BaN9j2naYKSly5km2hFTMvD3lgYpKywOE/y8amgGIJYogrimJ53GBS//\nRILRPguCzQ7snKtH5oZKArj3JxNqr34cqX1mS2Hwk1RggGRTp46S7mitZmArixY6\nBRaAP/QtfzKPGiVU09GhFA==\n-----END PRIVATE KEY-----\n"/> 
243<#assign googleMapsDataPrivateKeyID = "c12a3c4f20b176224995b442b6972d8a86e4351"/> 
244<#assign connectionTimeout = 1000/> 
245<#assign requestTimeout = 45000/> 
246<#assign googleMapsDataSql = "SELECT * FROM farmacias_farline"/> 
247<#assign googleMapsDataKey = "farmacia_farline"/> 
248<#assign googleMapsDataURL = "https://datasource-connector-api-1096555260408.europe-west1.run.app"/> 
249<#assign googleMapsDataURLToken = "https://www.googleapis.com/oauth2/v4/token"/> 
250<#assign googleMapsDataGoogleClientEmail = "api-nombres-largos@cofares-tablas-completas-cal.iam.gserviceaccount.com"/> 
251 
252<#assign farmacias = GoogleMapsDataService.getGoogleMapsData( 
253   googleMapsDataPrivateKey,googleMapsDataPrivateKeyID,connectionTimeout,requestTimeout, 
254   googleMapsDataSql,googleMapsDataKey,googleMapsDataURL,googleMapsDataURLToken, 
255   googleMapsDataGoogleClientEmail 
256)/> 
257<#assign farmaciasArray = JSONFactoryUtil.createJSONArray(farmacias)/> 
258 
259<#if farmaciasArray?has_content> 
260    <#assign contador = 0 /> 
261    <#list 0 ..< farmaciasArray.length() as i> 
262       <#assign direccion = farmaciasArray.get(i).direccion/> 
263       <#assign latitud = farmaciasArray.get(i).latitud/> 
264       <#assign longitud = farmaciasArray.get(i).longitud/> 
265       <#assign enlace = farmaciasArray.get(i).enlace/> 
266       <#assign telefono = farmaciasArray.get(i).telefono/> 
267       <script> 
268           addCentros('${contador}','${direccion?replace("'", "´")}','${latitud?replace(",", ".")}','${longitud?replace(",", ".")}','${enlace}','${telefono}'); 
269       </script> 
270       <#assign contador = contador + 1 /> 
271    </#list> 
272</#if> 
273 
274<div class="tc-map w-100 mx-auto"> 
275    <div class="tc-map-search-ctn"> 
276        <div class="wrapper-ajust"> 
277            <form class="form-map"> 
278							<div class="cards-adt text-center"> 
279								<p class="cards-adt__pretitle"> 
280									Encuentra tu farmacia  
281								</p> 
282                <h2 class="title"> 
283									Encuentra tus productos de Farline más cerca 
284								</h2> 
285							</div> 
286							<div class="inputs-container d-flex justify-content-center mb-3"> 
287								<div class="tc-form-control col-xl-10 col-12 mb-3"> 
288										<label class="tc-map-label" for="address"><span class="text-base">Dirección, CP o Localidad:</span></label> 
289										<input class="field form-control error-field" name="address" id="address" type="textbox" placeholder="Dirección, código postal o localidad"></input> 
290								</div> 
291								<div class="d-flex col-xl-2 col-12 mb-3"> 
292									<div class="d-none"> 
293										<div class="tc-form-control d-flex align-items-end w-100"> 
294											<div class="w-100"> 
295												<label class="tc-map-label" for="radius"><span class="text-base">Radio de búsqueda:</span></label> 
296												<div class="d-flex align-items-center" style="gap: 1rem"> 
297													<input class="hidden field form-control error-field field-small" name="radius" id="radius" type="number" min="1" step="1" value="2" placeholder="Radio de búsqueda"></input> 
298												</div> 
299											</div> 
300										</div> 
301									</div> 
302									<button type="button" class="w-100 btn btn-ico btn-primary" onclick="codeAddress();">Buscar</button> 
303								</div> 
304							</div> 
305            </form> 
306        </div> 
307    </div> 
308    <div class="wrapper-ajust"> 
309        <div class="tc-map-container d-flex"> 
310            <div id="map_canvas" class="tc-map-show col-12 col-md-8"></div> 
311            <div class="div_lista col-12 col-md-4"> 
312                <div id="side_bar" class="side_bar"> 
313                    <div class="p_aviso_side_bar"> 
314                        <p class="evo-form__text-info">Realice una búsqueda para mostrar un listado de resultados.</p> 
315                    </div> 
316                </div> 
317            </div> 
318        </div> 
319        <div id="map_indications" class="tc-map-indications"></div> 
320    </div> 
321</div> 
322<script> 
323$(document).ready(function(){ 
324	 initLoad(); 
325}); 
326	 
327// Get the input field 
328var input = document.getElementById("address"); 
329 
330// Execute a function when the user presses a key on the keyboard 
331input.addEventListener("keypress", function(event) { 
332  // If the user presses the "Enter" key on the keyboard 
333  if (event.key === "Enter") { 
334    // Cancel the default action, if needed 
335    event.preventDefault(); 
336    // Trigger the button element with a click 
337    $(".inputs-container button").click(); 
338
339}); 
340</script> 
341 
342<style> 
343#map_canvas { 
344	height: 500px;		 
345
346.tc-map .div_lista { 
347    max-height: 500px; 
348    overflow: auto; 
349	padding: 0 1rem !important; 
350
351	.tc-map-container { 
352		flex-wrap: wrap; 
353
354	.tc-map { 
355		max-width: 1600px; 
356		padding: 0 2rem; 
357
358 
359	.tc-form-control { 
360		flex-direction: column; 
361    border-bottom: 2px solid #3894D1; 
362
363	 
364	.tc-form-control label { 
365		display: none; 
366
367	 
368	.tc-form-control input { 
369		border: none; 
370    font-size: 24px; 
371    color: #002B74; 
372    height: 100%; 
373
374	 
375	.tc-form-control span { 
376    font-size: 24px; 
377
378	 
379	.form-map button { 
380		color: white; 
381    font-weight: 700; 
382    font-size: 16px; 
383    background-color: #002B74; 
384    border-radius: 4px; 
385    border: 0; 
386    transition: all 0.15s; 
387
388	 
389	.col-8 { 
390		padding-left: 0 !important; 
391
392	 
393	span.rad_err_msg { 
394    color: #c90f0f; 
395
396	 
397	p.title_results_gmaps { 
398    border-bottom: 2px solid #002B74; 
399
400	.info_fcia_side_bar { 
401    display: flex; 
402    flex-direction: row-reverse; 
403    justify-content: space-between; 
404    gap: 0.5rem; 
405    margin-bottom: 1rem; 
406    border-bottom: 1px solid #EFF0F0; 
407    padding-bottom: 1rem; 
408
409	p.center_address { 
410    font-size: 20px; 
411    color: #004396; 
412    font-weight: 700; 
413
414	.info_fcia_distance { 
415    font-size: 20px; 
416		color: #004396; 
417		min-width: 80px; 
418
419	.info_fcia_side_bar p { 
420    margin-bottom: 0; 
421
422	 
423	@media (max-width: 1200px) { 
424		.inputs-container { 
425			flex-direction: column; 
426
427		 
428		.col-12 { 
429			padding-left: 0 !important; 
430			padding-right: 0 !important; 
431
432
433	 
434	@media (max-width: 768px) { 
435		.tc-map { 
436			padding: 0 2rem; 
437
438		 
439		.tc-map .div_lista { 
440	padding: 1rem 0 !important; 
441
442		 
443		.tc-form-control input { 
444				border: none; 
445				font-size: 18px; 
446				color: #002B74; 
447				height: 100%; 
448
449		 
450		.tc-form-control span { 
451				font-size: 18px; 
452
453		 
454
455	 
456</style> 

Disclaimer de farmacias

Texto / imagen / texto - en tu farmacia

¿Por qué nace Farline?

Más de 30 años mejorando tu vida y tu salud

Farline nace para ofrecerte productos de farmacia y parafarmacia de alta calidad al precio más competitivo, respaldados siempre por el consejo de tu farmacéutico de confianza. Somos un laboratorio farmacéutico con más de 30 años, cuya misión es democratizar la calidad farmacéutica, poniendo a tu disposición el mejor cuidado para impulsar tu bienestar y salud, con la mejor relación calidad-precio.
 

En tu farmacia

De la mano de los farmacéuticos, como los profesionales sanitarios más cercanos y siempre apostando por la fabricación nacional, desarrollamos nuestros productos para crear una marca más responsable para ti y tu planeta. Además, nos mantenemos siempre al día de las últimas tendencias para ofrecerte el mejor cuidado para ti y tu familia.

Tu imprescindible - En tu farmacia - 1

Último hito de la marca

Farline, patrocinador de la carrera Contra el Cáncer

Farline ha patrocinado, junto a la Asociación Española Contra el Cáncer, la XI Carrera Madrid en Marcha Contra el Cáncer, que tuvo lugar el pasado 14 de abril. Esta iniciativa se enmarca dentro de nuestro Plan de Responsabilidad Social Corporativa, como un reflejo del compromiso ineludible con el bienestar de nuestros empleados. Por ello, 50 empleados y empleadas de la compañía corrieron por esta causa solidaria.

Carrera cáncer

Publicador de contenidos

¿Cuál es nuestra misión?

Te ofrecemos una amplia gama de productos con excelente relación
calidad-precio

Siempre respaldados con el consejo experto de tu farmacéutico de confianza

¿Cuál es nuestra visión?

Queremos cuidar de ti y de los tuyos, acompañándote en el día a día, siendo tu marca de referencia en la farmacia y creando una comunidad cada vez mayor.

Para cuidar de ti, de tu salud y de tu bienestar

Tu imprescindible - En tu farmacia - 2

Farmaceuticos

Los farmacéuticos

Nuestros mejores embajadores

Farline, nace de la mano de tu farmacéutico de confianza y dentro de un entorno de salud, bienestar y cercanía, como es la farmacia. Como profesionales sanitarios de primer nivel y gracias a su rigor científico y vocación en ofrecerte la mejor recomendación y consejo, los farmacéuticos nos impulsan a desarrollar nuestra gama de productos de la forma más segura y eficaz, pensando siempre en lo mejor para ti.

Valores - En tu farmacia - 1

¿Cuáles son nuestros valores?

La calidad lo es todo

Cuando se trata de cuidar de ti y de los tuyos

Hablamos, escuchamos y compartimos

Para desarrollar productos a medida para ti

Somos transparentes

Somos realmente lo que decimos ser

Apostamos por la fabricación nacional

Para buscar ser más sostenibles con tu planeta

Productos de calidad y confianza

Solo en tu farmacia

Compromiso - En tu farmacia

¿Cuál es nuestro compromiso?

Un compromiso continuo y real en cuidar tu salud y bienestar de la forma más accesible

En tu farmacia

Labor social - En tu farmacia

Fundacion Cofares

Nuestra labor social

Pensando en ti, pensando en todos

Farline acompaña en el día a día a aquellos que lo necesitan, gracias a su labor social.

Cabecera de contenidos - Consejo farmaceutico

Consejo Farmacéutico

Encuentra la recomendación que más necesitas para tu salud y belleza

Publicador de contenidos

Suscripcion footer

Todos los productos

Copyright © 2024 Farline Comercializadora de Productos Farmacéuticos. Reservados todos los derechos.