Senac em Três Corações

Segunda a sexta - 8h às 22h
Avenida Rei Pelé, 660 - Peró
(35) 3239-5750
Unidade de Três Corações
Cursos desta Unidade

Cursos Simplificados

Sobre a unidade

Presente em Três Corações desde 2005, o Senac oferece excelentes oportunidades para formação profissional na região. Com um amplo portfólio de cursos livres e técnicos em diversas áreas, é possível se capacitar gratuitamente através do Programa Senac de Gratuidade (PSG) e do Senac+.

Além disso, a unidade também é polo da rede Senac EAD e possui parcerias profissionais para acesso ao mercado de trabalho como o Programa Jovem Aprendiz e o Rede de Carreiras.

Ver todos os cursos

Programa de gratuidade Senac

Da formação inicial ao nível técnico, com custo zero, o Programa Senac de Gratuidade foi pensado como um instrumento de inclusão produtiva para brasileiros oriundos de família de baixa renda.

Saiba mais

A estrutura

A estrutura da unidade é outro diferencial, com ambientes de aprendizagem prontos para atender às necessidades dos alunos e alunas. Confira o que você encontra no Senac Três Corações:

  • 1 laboratório de estética
  • 1 laboratório de saúde
  • 3 laboratórios de informática
  • 9 salas de aula convencionais
  • Auditório
  • Biblioteca


A unidade atende à população das cidades de Cambuquira, Campanha, Carmo da Cachoeira, Conceição do Rio Verde, Cruzília, Jesuânia, Lambari, Luminárias, Monsenhor Paulo, Olímpio Noronha, São Bento Abade, São Gonçalo do Sapucaí, São Tomé das Letras e Três Corações.

Visite a unidade e conheça os cursos disponíveis para você!

Publicador de Conteúdos e Mídias

Como chegar até a unidade

Confira abaixo onde estamos localizados e como chegar até a unidade. Através do mapa interativo, você pode traçar rotas, visualizar os arredores e planejar sua visita com facilidade.

Publicador de Conteúdos e Mídias

Um erro ocorreu enquanto processava o modelo.
Denied access to method or field getAttribute of class org.apache.catalina.core.ApplicationHttpRequest

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign layoutDisplayPageObjectProvid...  [in template "70687763866433#20120#33250" at line 21, column 1]
----
1<#-- Extrai latitude e longitude dos dois formatos de URL do Google Maps --> 
2<#function getCoords geolocationUrl> 
3  <#if geolocationUrl?contains("!3d") && geolocationUrl?contains("!4d")> 
4    <#return { 
5      "lat": geolocationUrl?keep_after("!3d")?keep_before("!"), 
6      "lng": geolocationUrl?keep_after("!4d")?keep_before("!") 
7    } /> 
8  <#elseif geolocationUrl?contains("@")> 
9    <#local coordsPart = geolocationUrl?keep_after("@") /> 
10    <#return { 
11      "lat": coordsPart?keep_before(","), 
12      "lng": coordsPart?keep_after(",")?keep_before(",") 
13    } /> 
14  </#if> 
15  <#return {"lat": "", "lng": ""} /> 
16</#function> 
17 
18<#-- Conteúdo exibido pela página de exibição (/w/...), quando houver --> 
19<#assign currentUnit = {} /> 
20<#assign displayArticle = "" /> 
21<#assign layoutDisplayPageObjectProvider = (request.getAttribute("LAYOUT_DISPLAY_PAGE_OBJECT_PROVIDER"))! /> 
22 
23<#if layoutDisplayPageObjectProvider?has_content && layoutDisplayPageObjectProvider.getClassName() == "com.liferay.journal.model.JournalArticle"> 
24  <#assign displayArticle = layoutDisplayPageObjectProvider.getDisplayObject() /> 
25</#if> 
26 
27<#-- Alternativa: URL amigável do conteúdo, o trecho depois de /w/ --> 
28<#assign currentURL = themeDisplay.getURLCurrent()?keep_before("?") /> 
29<#if !displayArticle?has_content && currentURL?contains("/w/")> 
30  <#assign urlTitle = currentURL?keep_after_last("/w/")?keep_before("/") /> 
31  <#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
32  <#assign displayArticle = (JournalArticleLocalService.fetchArticleByUrlTitle(themeDisplay.getScopeGroupId(), urlTitle))!"" /> 
33</#if> 
34 
35<#assign displayGeolocationUrl = "" /> 
36<#assign displayCoords = {"lat": "", "lng": ""} /> 
37 
38<#if displayArticle?has_content> 
39  <#assign displayDocXml = saxReaderUtil.read(displayArticle.getContent()) /> 
40  <#assign displayGeolocationUrl = displayDocXml.valueOf("//dynamic-element[@field-reference='geolocation']/dynamic-content[@language-id='${locale}']")!"" /> 
41  <#if !displayGeolocationUrl?has_content> 
42    <#assign displayGeolocationUrl = displayDocXml.valueOf("(//dynamic-element[@field-reference='geolocation']/dynamic-content)[1]")!"" /> 
43  </#if> 
44  <#assign displayCoords = getCoords(displayGeolocationUrl?trim) /> 
45 
46  <#if displayCoords.lat?has_content && displayCoords.lng?has_content> 
47    <#assign currentUnit = { 
48      "id": displayArticle.getResourcePrimKey()?c, 
49      "title": displayArticle.getTitle(locale), 
50      "lat": displayCoords.lat, 
51      "lng": displayCoords.lng, 
52      "geolocationUrl": displayGeolocationUrl 
53    } /> 
54  </#if> 
55</#if> 
56 
57<#if entries?has_content || currentUnit?has_content> 
58  <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script> 
59 
60  <div id="map" style="height: 480px;"></div> 
61 
62  <script> 
63    const allUnitsData = []; 
64    const currentUnit = <#if currentUnit?has_content>{ 
65      id: "${currentUnit.id}", 
66      title: "${currentUnit.title?js_string}", 
67      lat: "${currentUnit.lat}", 
68      lng: "${currentUnit.lng}", 
69      viewURL: window.location.href.split('?')[0], 
70      geolocationUrl: "${currentUnit.geolocationUrl?js_string}" 
71    }<#else>null</#if>; 
72  </script> 
73 
74  <#-- Collect all units data --> 
75  <#list entries as curEntry> 
76    <#assign assetRenderer = curEntry.getAssetRenderer() /> 
77    <#assign journalArticle = assetRenderer.getArticle() /> 
78    <#assign docXml = saxReaderUtil.read(journalArticle.getContent()) /> 
79    <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, curEntry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) /> 
80    <#assign geolocationUrl = docXml.valueOf("//dynamic-element[@field-reference='geolocation']/dynamic-content[@language-id='${locale}']")!"" /> 
81 
82    <#-- Add unidadeId to viewURL --> 
83    <#assign unidadeId = journalArticle.getResourcePrimKey() /> 
84    <#assign viewURL = viewURL?keep_before_last("?") /> 
85    <#if viewURL?contains("?")> 
86      <#assign viewURL = viewURL + "&unidadeId=" + unidadeId /> 
87    <#else> 
88      <#assign viewURL = viewURL + "?unidadeId=" + unidadeId /> 
89    </#if> 
90 
91    <#assign coords = getCoords(geolocationUrl) /> 
92    <#assign lat = coords.lat /> 
93    <#assign lng = coords.lng /> 
94 
95    <#if lat?has_content && lng?has_content> 
96      <script> 
97        allUnitsData.push({ 
98          id: "${unidadeId}", 
99          title: "${curEntry.getTitle(locale)?js_string}", 
100          lat: "${lat}", 
101          lng: "${lng}", 
102          viewURL: "${viewURL?js_string}", 
103          geolocationUrl: "${geolocationUrl?js_string}" 
104        }); 
105      </script> 
106    </#if> 
107  </#list> 
108 
109  <script> 
110    // Function to initialize map with units 
111    async function initMap(unitsToShow) { 
112      if (unitsToShow.length === 0) return; 
113 
114      const map = L.map('map').setView([unitsToShow[0].lat, unitsToShow[0].lng], 13); 
115      const customIcon = L.icon({ 
116        iconUrl: '${themeDisplay.getPathThemeImages()}/marker-icon.png', 
117        iconSize: [42, 64], 
118        iconAnchor: [22, 94], 
119        popupAnchor: [0, -90] 
120      }); 
121 
122      L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 
123        attribution: '© OpenStreetMap contributors' 
124      }).addTo(map); 
125 
126      const group = L.featureGroup(); 
127 
128      unitsToShow.forEach(unit => { 
129        const showDetailsButton = unitsToShow.length > 1; 
130 
131        const popupContent = ` 
132          <div class="d-flex justify-content-between align-items-center"> 
133            <h4 class="font-weight-bold text-primary mb-0">` + unit.title + `</h4> 
134            <a 
135              class="btn btn-link text-primary-1-100 p-0" 
136              href="` + unit.geolocationUrl + `" 
137              target="_blank" 
138              rel="noopener noreferrer" 
139            > 
140              Ver no mapa 
141            </a> 
142          </div> 
143          ` + (showDetailsButton ? ` 
144          <a 
145            class="btn btn-primary text-white btn-block mt-3" 
146            href="` + unit.viewURL + `" 
147            target="_blank" 
148          > 
149            Ver detalhes da unidade 
150          </a> 
151          ` : '') + ` 
152        `; 
153        L.marker([unit.lat, unit.lng], { icon: customIcon }) 
154          .bindPopup(popupContent) 
155          .addTo(group); 
156      }); 
157 
158      group.addTo(map); 
159      map.fitBounds(group.getBounds()); 
160    } 
161 
162    // Get unidadeId from URL 
163    const urlParams = new URLSearchParams(window.location.search); 
164    const unidadeIdFromUrl = urlParams.get('unidadeId'); 
165 
166    // Main initialization 
167    async function init() { 
168      // Página de exibição: usa a geolocalização do próprio conteúdo exibido 
169      if (currentUnit) { 
170        initMap([currentUnit]); 
171      } else if (unidadeIdFromUrl) { 
172        // Try to fetch specific unit from Headless API 
173        try { 
174          const response = await fetch( 
175            window.location.origin + '/o/headless-delivery/v1.0/structured-contents/' + unidadeIdFromUrl, 
176            { 
177              method: 'GET', 
178              headers: { 
179                'Accept': 'application/json' 
180              } 
181            } 
182          ); 
183 
184          if (response.ok) { 
185            const unitData = await response.json(); 
186            // Extract geolocation from contentFields 
187            const geolocationField = unitData.contentFields?.find(f => f.name === 'geolocation'); 
188            const geolocationUrl = geolocationField?.contentFieldValue?.data || ''; 
189 
190            if (geolocationUrl) { 
191              // Parse lat/lng from Google Maps URL 
192              let lat = '', lng = ''; 
193              if (geolocationUrl.includes('!3d') && geolocationUrl.includes('!4d')) { 
194                lat = geolocationUrl.split('!3d')[1]?.split('!')[0] || ''; 
195                lng = geolocationUrl.split('!4d')[1]?.split('!')[0] || ''; 
196              } else if (geolocationUrl.includes('@')) { 
197                const coords = geolocationUrl.split('@')[1]?.split(',') || []; 
198                lat = coords[0] || ''; 
199                lng = coords[1] || ''; 
200              } 
201 
202              if (lat && lng) { 
203                const unit = { 
204                  id: unidadeIdFromUrl, 
205                  title: unitData.title || '', 
206                  lat: lat, 
207                  lng: lng, 
208                  viewURL: window.location.href.split('?')[0], 
209                  geolocationUrl: geolocationUrl 
210                }; 
211                initMap([unit]); 
212                return; 
213              } 
214            } 
215          } 
216        } catch (error) { 
217          console.warn('Error fetching unit from Headless API:', error); 
218        } 
219 
220        // Fallback: filter from local data 
221        const filteredUnits = allUnitsData.filter(unit => unit.id === unidadeIdFromUrl); 
222        initMap(filteredUnits); 
223      } else { 
224        // Show all units 
225        initMap(allUnitsData); 
226      } 
227    } 
228 
229    init(); 
230  </script> 
231</#if> 

Navegação de Categorias