Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing: ==> articleId [in template "20102#20129#28135110" at line 996, column 160] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${articleId} [in template "20102#20129#28135110" at line 996, column 158] ----
1<style>
2
3 body{
4 background-color:#e4e4e4;
5 }
6
7 .ssp:not(.liferay-instance) .ssp-card-detalhe-curso__description p {
8 max-width:830px;
9 }
10
11 .ssp:not(.liferay-instance) .ssp-card-detalhe-curso__title {
12 max-width:830px;
13 }
14
15 .ssp-card-unidade-curso{
16
17 width: 388px;
18 height: 514px;
19 background: #FFFFFF;
20 box-shadow: 0px 0px 12px #00000010;
21 opacity: 1;
22 border-radius: 12px;
23 padding: 29px 46px;
24
25 }
26
27 .section-slider-unidades{
28 padding: 40px 0 60px 0;
29 background: #2A2E43;
30 display: flex;
31 justify-content:center;
32 }
33
34 .ssp-card-unidade-curso>p{
35 margin: 28.56px 0!important;
36 color:#4f596f!important;
37 font-weight:600!important;
38 font-size:16px!important;
39 }
40
41 .ssp-card-unidade-curso a{
42 width: 295px;
43 height: 50px;
44 display: flex;
45 align-items: center;
46 justify-content: center;
47 margin-bottom: 28.56px;
48 }
49
50 .ssp-card-unidade-curso__nome-unidade{
51 display: flex;
52 color: #78849E;
53 }
54
55 .ssp-card-unidade-curso__nome-unidade p{
56 margin: 0!important;
57 font-size:22px!important;
58 font-weight: bold!important;
59 }
60
61 .ssp-card-unidade-curso__nome-unidade i{
62 font-size: 26px;
63 margin-right: 11px;
64 }
65
66 .ssp-card-unidade-curso__img-content{
67 width: 297px;
68 height: 235px;
69 background-color: #78849E;
70 border-radius: 12px;
71 margin-top: 24.5px;
72 background-size: cover;
73 background-position: center;
74
75 }
76
77 .ssp-slider-control-mobile {
78 display: none;
79 }
80
81 /*Card Mobile*/
82
83 @media only screen and (max-width: 1024px) {
84
85 .ssp-card-unidade-curso{
86
87 width: 334px;
88 height: 502px;
89 border-radius: 12px;
90 padding: 29px;
91 margin:12px;
92
93 }
94
95 .ssp-card-unidade-curso>p {
96 margin: 28.56px 0!important;
97 color: #4f596f!important;
98 font-weight: 600!important;
99 font-size: 15px!important;
100 }
101
102 .ssp-card-unidade-curso__img-content{
103
104 width: 100%;
105 height: 242px;
106 border-radius: 12px;
107 margin-top: 21.43px;
108
109 }
110
111 .ssp-card-unidade-curso__nome-unidade>p{
112 margin: 0!important;
113 font-size:18px!important;
114 font-weight: bold!important;
115 }
116
117 .ssp-card-unidade-curso__nome-unidade i{
118 font-size: 22px;
119 margin-right: 11px;
120 }
121
122
123 .ssp-slider-control-mobile {
124 display: flex;
125 justify-content: space-between;
126 color: white;
127 }
128
129 .ssp-slider-control-mobile__item-prev {
130 cursor: pointer;
131 }
132
133
134 .ssp:not(.liferay-instance) .oferta-slick-area--md-bleed .slick-arrow {
135 display: none !important;
136 color: white;
137 font-size: 14px;
138 font-weight: normal;
139 }
140
141 .ssp-slider-control-mobile__item-next {
142 cursor: pointer;
143 bottom: -30px!important;
144 right: 25px!important;
145 width: auto!important;
146 height: auto!important;
147 }
148
149 .ssp-slider-control-mobile__item-prev {
150 cursor: pointer;
151 bottom: -30px!important;
152 left: 25px!important;
153 width: auto!important;
154 height: auto!important;
155 }
156
157 }
158
159
160 /* Form de Aprendizagem */
161
162 [data-modal="modal"]{
163 background-color: rgba(0,0,0,0.7);
164 backdrop-filter: blur(10px);
165 display:none;
166 }
167
168 [data-modal="close-form-modal"]{
169
170 font-size: 22px;
171 background: unset!important;
172 color: white!important;
173 display: flex;
174 align-items: center;
175 margin: 0;
176 padding: 0;
177 position:absolute;
178 right:0;
179 border:0;
180 gap:5px;
181 right: 2%;
182 top: -2%;
183
184 }
185
186 [data-modal="close-form-modal"] i{
187
188 font-size:43px;
189 height:fit-content;
190
191 }
192
193 .open-modal-form{
194 position: fixed;
195 top: 0;
196 width: 100%;
197 height: 100%;
198 z-index: 100;
199 display: flex;
200 justify-content: center;
201 align-items: center;
202 overflow:auto;
203
204 }
205
206 .open-modal-form .ssp_ct_form_programe{
207 animation-name: animatetop;
208 animation-duration: .4s;
209 position:relative;
210 }
211
212 .ssp_ct_form_programe .lfr-ddm__default-page-header{
213 display:none;
214 }
215
216
217 label .reference-mark {
218 color:#78849e;
219 }
220 .lexicon-icon-asterisk {
221 color:#78849e;
222 }
223 .lexicon-icon-reload {
224 margin-left:10px;
225 }
226 .ssp_title_form_programe{
227 font-size: 42px!important;
228 color: #ffffff!important;
229 font-family: "Montserrat",sans-serif;
230 font-weight:600;
231 text-align:left;
232 }
233 .ssp_subtitle_form_programe {
234 margin-top:0px!important;
235
236 }
237 .ssp_subtitle_form_programe{
238 font-size: 20px!important;
239 color: #ffffff!important;
240 font-family: "Montserrat",sans-serif;
241 font-weight:600;
242 text-align:left;
243 }
244 .lfr-ddm-form-page {
245 background-color: #fff;
246 border-radius: 12px 12px 0px 0px;
247 padding: 35px 15px!important;
248 }
249 .ssp:not(.liferay-instance) .form-group label {
250 color: #78849E;
251 font: normal normal 600 16px/19px Montserrat;
252 padding-bottom: 10px;
253 }
254 .lfr-ddm-form-page-description {
255 display: none!important;
256 }
257 .lfr-ddm-form-page-title {
258 display: none!important;
259 }
260 .lfr-ddm-form-submit {
261 background-color: #0380F0;
262 text-align: center;
263 float: none!important;
264 border: 1px solid #0380F0;
265 border-radius: 6px;
266 font-size: 16px;
267 width: 245px;
268 height: 50px;
269 }
270 .lfr-ddm-form-pagination-controls {
271 background-color: #fff;
272 text-align: center;
273 border-radius: 0px 0px 12px 12px;
274 padding-bottom: 25px;
275 }
276 .ddm-form-name {
277 display: none!important;
278 }
279 .ddm-form-description {
280 display: none!important;
281 }
282 .ddm-form-builder-app {
283 margin-top:35px;
284 }
285 .taglib-captcha {
286 display: flex;
287 }
288 .input-text-wrapper {
289 left: 20px;
290 }
291 .lfr-ddm-form-pagination-controls {
292 padding-top:0px!important;
293 display:flex;
294 justify-content:center;
295 align-items: center;
296 flex-flow:column;
297}
298
299@media only screen and (max-width: 1024px) {
300
301 .open-modal-form{
302
303 align-items: flex-start;
304
305 }
306
307 .ddm-form-builder-app {
308 margin-top: 15px;
309 }
310
311 .ssp_title_form_programe{
312 font-size: 34px!important;
313 line-height: 1.2!important;
314 }
315 .ssp_subtitle_form_programe{
316 font-size:18px!important;
317 }
318 .taglib-captcha {
319 display:block;
320 }
321 .input-text-wrapper {
322 left:0;
323 }
324 .ssp_ct_form_programe {
325 padding:0px;
326 max-width:100%;
327 padding:40px 20px;
328 }
329
330 [data-modal="close-form-modal"]{
331
332 right: 20px;
333 top: 0;
334
335 }
336
337}
338
339.slick-area__item {
340 display: flex;
341 flex-basis: auto;
342 }
343
344 .slick-initialized .slick-track {
345 display: flex;
346 }
347
348 .slick-initialized .slick-slide {
349 height: inherit!important;
350 display: flex;
351 }
352
353 @media only screen and (max-width: 550px) {
354
355 .slick-initialized .slick-track {
356 display: flex;
357 }
358
359 .slick-initialized .slick-slide {
360 height: inherit!important;
361 display: flex;
362 min-height: 440px;
363 }
364
365 }
366
367 /* Prev and next Mobile button */
368
369
370.prev-mobile{
371 color: white;
372 display: flex;
373 align-items: center;
374 text-decoration: none;
375 text-decoration: none!important;
376}
377
378.prev-mobile:hover{
379 color: white;
380 font-weight: normal!important;
381}
382
383.prev-mobile::after{
384 font-family: "Montserrat", sans-serif;
385 content: "Anterior";
386 font-weight: 600;
387 font-size: 14px;
388 display: block;
389 margin-left: 9px;
390 color: white;
391}
392
393.prev-mobile.slick-arrow.slick-disabled{
394 opacity: 0.4;
395}
396
397.next-mobile{
398 color: white;
399 display: flex;
400 align-items: center;
401 text-decoration: none!important;
402}
403
404.next-mobile:hover{
405 color: white;
406 font-weight: normal!important;
407}
408
409.next-mobile::before{
410 font-family: "Montserrat", sans-serif;
411 content: "Próxima";
412 font-size: 14px;
413 font-weight: 600;
414 display: block;
415 margin-right: 9px;
416 color: white;
417}
418
419.next-mobile.slick-arrow.slick-disabled{
420 opacity: 0.4;
421}
422@media screen and (min-width: 767px){
423
424 .ssp-modal-local-realizacao{
425 width: 480px!important;
426 }
427
428 .ssp-modal-local-realizacao__title{
429 color:#01488C !important;
430 text-align: center!important;
431 margin-left: -23px!important;
432 }
433
434 .ssp:not(.liferay-instance) .ssp-modal-local-realizacao__title {
435 font-size: 14pt;
436 }
437
438}
439
440@media only screen and (max-width: 768px){
441
442 .ssp:not(.liferay-instance) .ssp-card-oferta-curso__dia-hora-item__dia {
443 font-size: 16px;
444 }
445
446 .ssp:not(.liferay-instance) .ssp-modal-local-realizacao__title {
447 font-size: 16pt;
448 }
449
450
451
452}
453
454.ssp:not(.liferay-instance) .ssp-card-oferta-curso__dia-hora-item {
455 border-radius: 0;
456 background-color: unset;
457 padding: 0;
458 max-width: 100%;
459 width: 100%;
460 margin: 0;
461 }
462
463.ssp:not(.liferay-instance) .ssp-card-oferta-curso__dia-hora-item__dia {
464 margin: 0;
465 font-size: 17px;
466 font-weight: bold;
467 font-stretch: normal;
468 font-style: normal;
469 line-height: 1.23;
470 letter-spacing: normal;
471 text-align: center;
472 }
473
474 .ssp:not(.liferay-instance) .ssp-card-oferta-curso__dia-hora_content{
475 margin:0;
476 opacity: 0;
477 transition: 0.3s;
478 }
479
480 .content-data-dias{
481
482 padding:20px;
483 border-bottom: 1px #E4E8F0 solid;
484 margin-bottom: 17px;
485
486 }
487
488 .container-local-realizacao {
489 padding:0;
490 border:0;
491 border-radius: unset;
492 width: 100%;
493 margin: 10px 0 0 0;
494 box-shadow: none;
495 display: flex;
496 justify-content:center;
497 align-items: flex-end;
498 }
499
500 .ssp:not(.liferay-instance) .ssp-card-oferta-curso__local-realizacao-content__title {
501 font-size: 13px;
502 color: #00488C;
503 font-weight: 600;
504 text-decoration: none!important;
505 border: 1px solid #00488C;
506 padding: 11px 14px;
507 transition:.3s;
508 border-radius: 4px;
509 }
510
511 .ssp:not(.liferay-instance) .ssp-card-oferta-curso__local-realizacao-content__title:hover {
512 color: #FC9F34;
513 font-weight: 600!important;
514 opacity: .7;
515 }
516
517 .ssp-modal-local-realizacao__title{
518 color:#01488C !important;
519 text-align: center!important;
520 }
521
522 h6.ssp-modal-local-realizacao__title::after {
523 content: "";
524 display: block;
525 width: 20%;
526 padding-top: 10px;
527 border-bottom: 1px solid #01488C;
528 transition: .5s;
529 margin:auto;
530 }
531
532 .ssp-modal__local-realizacao-content__icon-wifi{
533 display: flex;
534 margin-right: 2px
535 }
536
537 .ssp:not(.liferay-instance) .ssp-modal__local-realizacao-content__icon-wifi::after {
538 font-family: "Font Awesome 5 Free";
539 content: '\f1eb';
540 font-weight: 600;
541 color: #00488c;
542 font-size: 9pt;
543 font-style: normal;
544 margin-right: 10px;
545 }
546
547 .ssp:not(.liferay-instance) .ssp-modal__local-realizacao-content__icon-chalkboard-teacher::after {
548 font-family: "Font Awesome 5 Free";
549 content: '\f51c';
550 font-weight: 600;
551 color: #00488c;
552 font-size: 16pt;
553 font-style: normal;
554 margin-left: -16px;
555 }
556
557 .ssp-modal-local-realizacao__texto{
558 text-align:center!important;
559 }
560
561 /* Troca cor fonte (solicitação gcr) - ajuste 4 - Tarefa 9525**/
562 .ssp:not(.liferay-instance) .ssp-bolsa-formulario__card-aviso-texto > p {
563
564 color: #474F61 !important;
565}
566
567/* CSS filtro inscrições abertas e unidades por região - tarefa 10090**/
568.ssp-filters-px {
569 padding: 0 80px;
570}
571
572 /* Slider **/
573 .ssp-switch {
574 position: relative;
575 display: inline-block;
576 width: 63px;
577 height: 32px;
578 }
579
580 .ssp-switch input {
581 opacity: 0;
582 width: 0;
583 height: 0;
584 }
585
586 .ssp-switch-label {
587 margin: auto 15px;
588 font: normal normal 600 16px/19px Montserrat;
589 letter-spacing: 0px;
590 color: #FFFFFF;
591 white-space: nowrap;
592 }
593
594 .ssp-switch-label-section {
595 font: normal normal 600 18px/22px Montserrat;
596 margin-bottom: 11px;
597 }
598
599 .ssp-switch-label-message {
600 font: normal normal medium 16px/19px Montserrat !important;
601 letter-spacing: 0px;
602 color: #FFFFFF;
603 margin-top: 16px;
604 padding-left: 25px;
605 padding-right: 25px;
606 }
607
608 .ssp-switch-divider {
609 border-bottom: 1px solid #4a4d5f;
610 width: 100%;
611 }
612 .ssp-switch-slider {
613 position: absolute;
614 cursor: pointer;
615 top: 0;
616 left: 0;
617 right: 0;
618 bottom: 0;
619 background-color: #00000000;
620 border: 1px solid #FFFFFF;
621 -webkit-transition: .4s;
622 transition: .4s;
623 }
624
625 .ssp-switch-slider:before {
626 position: absolute;
627 content: "";
628 height: 21px;
629 width: 21px;
630 left: 4px;
631 bottom: 4px;
632 background-color: white;
633 -webkit-transition: .4s;
634 transition: .4s;
635 }
636
637 input:checked + .ssp-switch-slider {
638 background-color: #5ACC75;
639 border: 1px solid #5ACC75;
640 }
641 input:checked + .ssp-switch-slider-secondary {
642 background-color: #2967F4;
643 border: 1px solid #2967F4;
644 }
645
646 input:focus + .ssp-switch-slider {
647 box-shadow: 0 0 1px #5ACC75;
648 }
649 input:focus + .ssp-switch-slider-secondary {
650 box-shadow: 0 0 1px #2967F4;
651 }
652
653 input:checked + .ssp-switch-slider:before {
654 -webkit-transform: translateX(33px);
655 -ms-transform: translateX(33px);
656 transform: translateX(33px);
657 }
658
659 /* Rounded sliders */
660 .ssp-switch-slider.round {
661 border-radius: 34px;
662 }
663
664 .ssp-switch-slider.round:before {
665 border-radius: 50%;
666 }
667
668 .ssp-switch-label {
669 margin: auto 15px;
670 font: normal normal 600 16px/19px Montserrat;
671 letter-spacing: 0px;
672 color: #FFFFFF;
673 white-space: nowrap;
674 }
675
676 .ssp-switch-label-section {
677 font: normal normal 600 18px/22px Montserrat;
678 margin-bottom: 11px;
679 }
680
681 .ssp-switch-label-message {
682 font: normal normal medium 16px/19px Montserrat !important;
683 letter-spacing: 0px;
684 color: #FFFFFF;
685 margin-top: 16px;
686 padding-left: 25px;
687 padding-right: 25px;
688 }
689
690 @media screen and (max-width: 1199px){
691 .ssp-filters-px {
692 padding: 0 !important;
693 }
694 .ssp-switch-label {
695 margin: auto 0 !important;
696 }
697 .ssp-switch-label-message {
698 margin-top: 10px;
699 margin-bottom: 10px;
700 padding-right: 0 !important;
701 padding-left: 0 !important;
702 }
703 .ssp-container-selecione-unidade [name="unidades-ofertas"] {
704 max-width: 316px!important;
705 }
706 .ssp-detalhe-curso-titulo-filter {
707 font-size: 16px !important;
708 }
709 }
710
711 .ssp-option-group {
712 text-align: left;
713 font: normal normal 600 15px/19px Montserrat;
714 letter-spacing: 0px;
715 color: #004A8C;
716 }
717</style>
718
719
720<#assign prefix = "ssp" />
721<#-- Iterate the list with -->
722<#assign vocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
723<#assign normalizer = serviceLocator.findService("com.liferay.portal.kernel.util.FriendlyURLNormalizer") />
724
725<#assign defaultImage = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTuyJZ_Ky8o9kn0wiBy4mp5-3sb7xei_WudTL_3Jo6yvWmzQHuK&s" />
726
727<#function getStringValue dom name>
728 <#assign
729 seletorSTR = "dynamic-element[@field-reference='"+name+"']"
730 xPathSelector = saxReaderUtil.createXPath(seletorSTR)
731 />
732 <#if xPathSelector.selectSingleNode(dom)?? >
733 <#assign
734 valueSTR = xPathSelector.selectSingleNode(dom).getStringValue()?trim
735 />
736 <#return valueSTR>
737 </#if>
738 <#return ''>
739 </#function>
740
741 <#list entries![] as entry>
742
743 <#assign renderer = entry.getAssetRenderer() />
744 <#assign document = saxReaderUtil.read(renderer.getArticle().getContent()) />
745 <#assign rootElement = document.getRootElement() />
746 <#assign journalArticle = renderer.getArticle() />
747
748
749
750 <#-- Get fields -->
751
752 <#assign
753
754 <#-- Codigo FT -->
755 codigoFT = getStringValue(rootElement,'codigoFT')
756
757 <#-- Data Efetiva -->
758 xPathSelectorDataEfetiva = saxReaderUtil.createXPath("dynamic-element[@field-reference='dataEfetivaFT']")
759
760 dataEfetiva = xPathSelectorDataEfetiva.selectSingleNode(rootElement)
761
762 dataEfetivaSTR = dataEfetiva.elementText("dynamic-content")?string
763
764 <#-- Title -->
765 tituloCurso = journalArticle.getTitle()
766
767 <#-- Objetivo -->
768 xPathSelectorObjetivoCurso = saxReaderUtil.createXPath("dynamic-element[@field-reference='objetivoComercial']")
769
770 objetivo = xPathSelectorObjetivoCurso.selectSingleNode(rootElement).getStringValue()
771
772 <#-- Carga Horária -->
773
774 xPathSelectorCargaHoraria = saxReaderUtil.createXPath("dynamic-element[@field-reference='cargaHorariaTotalFT']")
775
776 cargaHoraria = xPathSelectorCargaHoraria.selectSingleNode(rootElement).getStringValue()?trim
777
778
779
780 />
781
782 <#if codigoFT?? && dataEfetivaSTR??>
783 <#assign searchImpl = serviceLocator.findService("br.senac.search.api.Search") />
784 <#assign articles = searchImpl.search("Curso", {"codigoFT_pt_BR":codigoFT,"dataEfetivaFT":dataEfetivaSTR}, themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(), themeDisplay.getUserId(), false) />
785
786 <#list articles![] as article>
787 <#assign articleId = article.getArticleId()>
788 </#list>
789
790 </#if>
791
792
793 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='imagemComercial']")>
794
795 <#assign imagemStr = xPathSelector.selectSingleNode(rootElement).getStringValue()>
796
797 <#if imagemStr?contains("{") >
798 <#assign
799 imagemJson = jsonFactoryUtil.createJSONObject(imagemStr)
800 imagemId = getterUtil.getInteger(imagemJson.get('fileEntryId'))
801 imagemDescricao = imagemJson.get('alt')
802 dl = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService")
803 dlURLHelper = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper")
804 fileEntry = dl.getFileEntry(imagemId)
805 <#-- imagemUrl = dlURLHelper.getImagePreviewURL(fileEntry, themeDisplay) -->
806 <#-- faz o get da imagem em alta qualidade -->
807 imagemUrl = dlURLHelper.getDownloadURL(fileEntry, fileEntry.getFileVersion(), themeDisplay,null)
808 />
809 <#else>
810 <#assign imagemUrl = "">
811 </#if>
812
813 <#-- Header Curso -->
814
815 <div class="${prefix}-header-curso__image" style="background-image:url(${imagemUrl})">
816
817
818 <#list entry.getCategories()![] as category>
819
820 <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim />
821
822 <#if normalizer.normalize(vocabularyName) == "tipo-de-curso">
823
824 <#assign normalizedCategoryName = normalizer.normalize(category.getName()) />
825
826 <div class="${prefix}-header-curso__tag-formato bg-nivel-${normalizedCategoryName}">
827
828 <#list entry.getCategories()![] as category>
829
830
831 <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim />
832
833 <#if normalizer.normalize(vocabularyName) == "tipo-de-curso">
834 <#assign normalizedCategoryName = normalizer.normalize(category.getName()) />
835 <span>${category.getName()}</span>
836 </#if>
837
838 </#list>
839
840 </div>
841
842 </#if>
843 </#list>
844
845
846 </div>
847
848 <#-- Detalhe de Curso -->
849
850 <section id="curso-info">
851
852 <div class="ssp-card-detalhe-curso__container">
853
854 <div class="ssp-card-detalhe-curso">
855
856 <#list entry.getCategories()![] as category>
857
858 <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim />
859
860 <#if normalizer.normalize(vocabularyName) == "tipo-de-curso">
861
862 <#assign normalizedCategoryName = normalizer.normalize(category.getName()) />
863
864 <div class="ssp-card-detalhe-curso__tag-color-tipo bg-nivel-${normalizedCategoryName}"></div>
865
866 </#if>
867
868 </#list>
869
870
871
872 <div class="container">
873
874 <div class="ssp-card-detalhe-curso__content">
875
876 <div>
877
878 <h1 class="ssp-card-detalhe-curso__title">${tituloCurso}</h1>
879 <span class="ssp-card-detalhe-curso__description">${objetivo}</span>
880
881 </div>
882
883 <div class="ssp-card-detalhe-curso__secunday-info-content">
884
885 <#list entry.getCategories()![] as category>
886
887
888 <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim />
889
890 <#if normalizer.normalize(vocabularyName) == "tipo-de-curso">
891 <#assign normalizedCategoryName = normalizer.normalize(category.getName()) />
892 <a class="ssp-card-detalhe-curso__secunday-info-back-link d-lg-none d-md-none" href="#">${category.getName()}</a>
893 </#if>
894
895 </#list>
896
897 <#if cargaHoraria?length != 0>
898 <p class="ssp-card-detalhe-curso__secundary-info-carga-horaria">${cargaHoraria}</p>
899 </#if>
900
901 </div>
902
903 </div>
904
905 <div class="ssp-saiba-mais-curso-accordion">
906
907 <#-- Get no campo repeatable -->
908 <#assign topicoItemRepeatableNode = document.getRootElement().selectNodes("//dynamic-element[@field-reference='topicoItemFieldSet']") />
909
910 <#-- Lista de cardsUnidades -->
911 <#list topicoItemRepeatableNode as itemTopico>
912
913 <#-- ìcone Slider -->
914 <#assign tituloTopico = itemTopico.selectSingleNode("dynamic-element[@field-reference='tituloTopico']").getStringValue()?trim>
915
916 <#-- Nome da Unidade -->
917 <#assign descTopico = itemTopico.selectSingleNode("dynamic-element[@field-reference='descTopico']").getStringValue()?trim>
918
919 <div class="ssp-saiba-mais-curso-accordion__body">
920 <div class="ssp-saiba-mais-curso-accordion__heading">${tituloTopico}</div>
921 <div class="ssp-saiba-mais-curso-accordion__contents">${descTopico}</div>
922 </div>
923
924 </#list>
925
926 </div>
927
928 </div>
929
930 </div>
931 </div>
932
933 <!-- Confira as novas turmas -->
934
935 <section class="ssp-section-novas-turmas" style="background: #2a2e43;">
936 <div class="container">
937
938 <h3 class="ssp-section-title ssp-card-oferta-curso__section-title" style="margin: 24px 0;">Confira as unidades com vagas disponíveis</h3>
939
940 <div class="row ssp-filters-px justify-content-center">
941 <div class="col-12 col-lg px-md-0 order-1">
942 <div class="ssp-container-selecione-unidade row no-gutters">
943 <div class="col-12">
944 <div class="ssp-container__form-select mx-auto">
945 <label for="unidades-ofertas" class="ssp-switch-label ssp-switch-label-section mx-0 d-none d-lg-block">Selecione uma unidade:</label>
946 <select id="unidades-ofertas" class="form-control" name="unidades-ofertas">
947 <option value="">Selecione uma unidade</option>
948 </select>
949 </div>
950 </div>
951 </div>
952 </div>
953
954 <div id="ssp-alternadores" class="col mt-5 mt-lg-0 px-md-0 order-3 order-lg-2" style="max-width: 480px;">
955 <div class="row no-gutters ssp-switch-label ssp-switch-label-section mx-0">Filtre por:</div>
956 <div class="row no-gutters mt-4">
957
958 <div class="col-12 col-lg">
959 <div class="d-flex justify-content-between justify-content-lg-start">
960 <label class="ssp-switch order-2 order-lg-1">
961 <input type="checkbox" id="chkInscricao">
962 <span class="ssp-switch-slider round"></span>
963 </label>
964 <label for="chkInscricao" class="ssp-switch-label order-1 order-lg-2">Inscrições abertas</label>
965 </div>
966 </div>
967
968 <div class="ssp-switch-divider d-md-none my-4"></div>
969
970 </div>
971 </div>
972
973 <div class="col-12 order-2 order-lg-3">
974 <div class="row text-center text-lg-left">
975 <div id="msgFiltroAplicado" class="col-12 ssp-switch-label-message" style="display: none;">
976 <div class="row no-gutters">
977 <span class="col-12 ssp-col-lg-without">Filtro aplicado com sucesso! Confira o resultado.</span>
978 </div>
979 </div>
980 </div>
981 </div>
982
983 </div>
984
985 <div class="ssp-ofertas__box-endereco-unidade d-none">
986 <i class="icon-map-adress"></i>
987 <a href="" target="_blank" class="ssp-ofertas__endereco-unidade"></a>
988 </div>
989
990 </div>
991
992 </section>
993
994 <input type="hidden" name="codigoFT" value="${codigoFT}" />
995 <input type="hidden" name="dataEfetivaSTR" value="${dataEfetivaSTR}" />
996 <input type="hidden" name="articleId" value="${articleId}" />
997
998
999 <#-- Section para listar as ofertas - 9525 -28/02/2022-->
1000 <section id="ssp-section-response" class="ssp-section" style="background: #2a2e43; position: relative;">
1001
1002 <div id="turmas-container" class="container">
1003
1004 <div id="informe-novas-turmas">
1005 <div style="display: flex; flex-wrap: nowrap;">
1006
1007 <a class="prev-mobile d-lg-none d-xl-none nextPrevOpacity" href="#" >
1008 <i class="fas fa-chevron-left"></i>
1009 </a>
1010
1011 <h2 id="ssp-h3-turmas" class="ssp-section-title ssp-card-oferta-curso__section-title text-capitalize" style="font-weight: bold;text-transform: uppercase; display: none;">Turmas</h2>
1012
1013 <a href="#" class="next-mobile d-lg-none d-xl-none" >
1014 <i class="fas fa-chevron-right"></i>
1015 </a>
1016
1017 </div>
1018
1019
1020 <div class="oferta-slick-area oferta-slick-area--md-bleed slider-container">
1021
1022 </div>
1023 </div>
1024
1025 <div class="ssp-card-oferta-curso__sem-vaga d-none" style="margin: auto;">
1026
1027 <h3 class="ssp-card-oferta-curso__sem-vaga-title">
1028 Poxa... Estamos sem turmas agendadas no momento.
1029 </h3>
1030
1031 <p class="ssp-card-oferta-curso__sem-vaga-description">
1032 Mas, registre seu interesse aqui embaixo e avisamos você quando surgirem novas turmas.
1033 </p>
1034 </div>
1035
1036 <p class="ssp-card-oferta-curso__mensagem-legal" style="margin: 0px 0 0 0;">A turma pode ser cancelada ou ter alterações do número de vagas, datas e horários.<p>
1037
1038 <div class="oferta-slick-area_modal">
1039 </div>
1040 </div>
1041
1042 <div id="ssp-abrir-pagina-bolsa" class="ssp-card-duvida__bolsa-estudo d-none" style="margin-top: 44px;">
1043
1044 <p>Tem dúvidas sobre bolsas de estudo?</p>
1045 <a href="/bolsas-de-estudo/como-funciona">Saiba como funciona</a>
1046
1047 </div>
1048
1049 </section>
1050
1051 <!-- Aviso para curso de aprendizagem -->
1052 <div id="aviso-curso-aprendizagem" class="ssp-bolsa-formulario__card-aviso-atencao d-none" style="width: 100%;">
1053
1054 <i class="fas fa-exclamation-circle ssp-bolsa-formulario__card-aviso-atencao-icon" aria-hidden="true"></i>
1055
1056 <div class="ssp-bolsa-formulario__card-aviso-texto">
1057 <p>O programa é gratuito para empresas contribuintes do Senac.</p>
1058 <p>Para contratar aprendiz, preencha o formulário e entraremos em contato.</p>
1059 </div>
1060
1061 </div>
1062
1063
1064 <!-- modal form de aprendizagem -->
1065
1066 <#assign formId = 48097883 />
1067 <!-- formInstanceId é variável de acordo com o ID do formulário -->
1068 <#assign formPreferences = {"displayDepth": "1", "portletSetupPortletDecoratorId": "barebone", "formInstanceId": "formId"}/>
1069 <section class="ssp-section ssp-section-lg-bottom" data-modal="modal">
1070
1071 <div class="container ssp_ct_form_programe">
1072
1073 <button type="button" data-modal="close-form-modal">
1074 fechar
1075 <i class="fas fa-times"></i>
1076 </button>
1077
1078 <@liferay_portlet["runtime"]
1079 portletName="com_liferay_dynamic_data_mapping_form_web_portlet_DDMFormPortlet"
1080 defaultPreferences=freeMarkerPortletPreferences.getPreferences(formPreferences)
1081 />
1082
1083 </div>
1084
1085 </section>
1086
1087 </#list>
1088
1089
1090 <script>
1091
1092 const codigoFT = $('[name="codigoFT"]').val();
1093 const dataEfetiva = $('[name="dataEfetivaSTR"]').val();
1094 const articleId = $('[name="articleId"]').val();
1095 var ofertasMap = new Map();
1096 var groupId = themeDisplay.getScopeGroupId();
1097 var startOfertaParam = 0;
1098 var endOfertaParam = 16;
1099 var regIndex = new RegExp('\{index\}', 'g');
1100
1101 var objsTela = {
1102 unidades: [],
1103 categoriesIds:[]
1104 };
1105
1106 var urlSearchCursoInfo = '/o/senac-content-services/cursosInfoDetalhe/{groupId}/{cursosInfo}?inscricaoAberta={inscricaoAberta}&bolsaAberta={bolsaAberta}';
1107 var urlUnidadeInfoDetalhe = '/o/senac-content-services/unidadeInfoDetalhe/{companyId}/{codigoUnidade}';
1108 var urlSearchOferta = '/o/senac-oferta-services/ofertasPorCategoryIds/' + groupId
1109
1110 $(document).ready(function(){
1111
1112
1113 const urlParams = new URLSearchParams(window.location.search);
1114 $('#chkInscricao').prop("checked", urlParams.get('inscricao') == 'true');
1115 $('#chkInscricao').change(ev => selectFilter('inscricao', $('#chkInscricao')) );
1116
1117 loadUnidades(true,"")
1118
1119 $(".next-mobile").on("click",function(e){
1120 e.preventDefault();
1121
1122 acoesMobileSliderOfertas("left");
1123 });
1124
1125 $(".prev-mobile").on("click",function(e){
1126 e.preventDefault();
1127
1128 acoesMobileSliderOfertas("right");
1129 });
1130
1131 //ação de drag do card de ofertas no mobile
1132 $('.oferta-slick-area').on('swipe', function(event, slick, direction){
1133 acoesMobileSliderOfertas(direction);
1134 });
1135
1136 // Modal Aprendizagem
1137 let modalFormAprendizagem = document.querySelector('[data-modal="modal"]')
1138 if(modalFormAprendizagem){
1139 // Create dinamic close buttom form
1140 let btnCloseModalForm = document.querySelector('[data-modal="close-form-modal"]')
1141
1142 btnCloseModalForm.addEventListener('click',closeModalFormAprendizagem)
1143
1144 }
1145
1146 $(".oferta-slick-area").on("click", ".btnModalAprendizagem", function (){
1147 openModalFormAprendizagem();
1148 })
1149
1150 });
1151
1152 $(".ssp-saiba-mais-curso-accordion").on("click", ".ssp-saiba-mais-curso-accordion__heading", function() {
1153
1154 $(this).toggleClass("active").next().slideToggle();
1155
1156 $(".sp-saiba-mais-curso-accordion__contents").not($(this).next()).slideUp(300);
1157
1158 $(this).siblings().removeClass("active");
1159 });
1160
1161 function acoesMobileSliderOfertas(direcao){
1162
1163 if(direcao == "right"){
1164 $("a.slick-prev").click();
1165
1166 if($('.slick-current').attr('data-slick-index') == "0")
1167 $('.prev-mobile').addClass('nextPrevOpacity');
1168
1169 if($(".next-mobile").hasClass('nextPrevOpacity'))
1170 $('.next-mobile').removeClass('nextPrevOpacity');
1171 }
1172
1173
1174 if(direcao == "left"){
1175 $("a.slick-next").click();
1176
1177 if($(".prev-mobile").hasClass('nextPrevOpacity'))
1178 $('.prev-mobile').removeClass('nextPrevOpacity');
1179
1180 if(carregouUltimaOferta){
1181 var totalCardOfertas = $('#turmas-container .slick-area__item').length;
1182 var currentSliderIndex = parseInt($('.slick-current').attr('data-slick-index'));
1183
1184 //o card do meio é o último
1185 if(totalCardOfertas == (currentSliderIndex + 1))
1186 $('.next-mobile').addClass('nextPrevOpacity');
1187 }
1188 }
1189 }
1190
1191 function loadUnidades(showOptions, unidadeValue){
1192
1193 //Busca as unidades do curso
1194 const urlCursoInfo = urlSearchCursoInfo
1195 .replace('\{groupId\}', groupId)
1196 .replace('\{cursosInfo\}', $('[name="articleId"]').val())
1197 .replace('\{inscricaoAberta\}', $('#chkInscricao').prop('checked'))
1198 .replace('\{bolsaAberta\}', false);
1199
1200 $.ajax({
1201 url:urlCursoInfo,
1202 method:'get',
1203 async: false,
1204 beforeSend: function () {
1205 loading('.oferta-slick-area');
1206 }
1207 }).done(
1208 function(data){
1209
1210 if(data.length > 0){
1211
1212 const cursoInfo = JSON.parse(data);
1213
1214
1215 //GCR pediu para voltarmos no combo as unidades vinculadas e não somente as que possuem ofertas
1216 //const unidades = cursoInfo.unidadesComOferta;
1217 const unidades = cursoInfo.unidadesOfertantes;
1218
1219 objsTela.unidades = []
1220 mapUnidadesIds = new Map();
1221
1222 $.each(unidades, function(k,item){
1223
1224 var unidade = cloneObj(item);
1225 unidade['categoryId'] = item['categoryId'];
1226 unidade['codigoUnidade'] = item['codigoUnidade'];
1227 unidade['nome'] = item['nomeUnidade'];
1228 unidade['enderecoUnidade'] =item['enderecoUnidade'];
1229 unidade['numero'] =item['numEnderecoUnidade'];
1230 unidade['complemento'] = item['complementoEnderecoUnidade'];
1231 unidade['bairro'] = item['bairroUnidade'];
1232 unidade['googlemapsUnidade'] = item['googlemapsUnidade'];
1233 unidade['ofertas'] = [];
1234 unidade['friendlyURL'] = item['friendlyURL'];
1235
1236 objsTela.unidades.push(unidade);
1237
1238 mapUnidadesIds.set(unidade['categoryId'], unidade['codigoUnidade']);
1239 console.log("items ", item)
1240 });
1241
1242 populaSelectUnidades(undefined, showOptions, unidadeValue);
1243
1244 }
1245 });
1246
1247 }
1248
1249 function selectFilter(paramkey, el) {
1250 setUrlParam(paramkey, el.prop("checked"))
1251 var unidades = objsTela.unidades;
1252 //const currentUnidadeFriendlyURLSelected = $('#unidades-ofertas').find('option').filter(':selected').attr('data-unidade-friendly-url')
1253
1254 splitted = $('#unidades-ofertas').val().split("@");
1255 var categoryIdUnidade = splitted[0];
1256 var codUnidade = splitted[1];
1257 console.log("splitted ", splitted)
1258 for(var i = 0; unidades.length > i ; i++){
1259
1260 if(unidades[i].categoryId == categoryIdUnidade){
1261
1262 getOfertas(codigoFT, dataEfetiva, unidades[i].categoryId, $('#chkInscricao').prop("checked"));
1263
1264 }
1265 }
1266 loadUnidades(true, "")
1267
1268 if($('#chkInscricao').prop("checked")) $('#msgFiltroAplicado').show()
1269 else $('#msgFiltroAplicado').hide()
1270 }
1271
1272 function setUrlParam(key, value) {
1273 const url = new URL(window.location.href);
1274
1275 if(value)
1276 url.searchParams.set(key, value);
1277 else
1278 url.searchParams.delete(key);
1279
1280 window.history.pushState({}, '', url.toString())
1281 }
1282
1283 function defineCurrentUrl(ev) {
1284 const currentUnidadeFriendlyURLSelected = $(ev.target).find('option').filter(':selected').attr('data-unidade-friendly-url')
1285
1286 const hasPathWeb = window.location.pathname.includes('/web')
1287 const hasPathGuest = window.location.pathname.includes('/guest')
1288
1289 let currentPath = window.location.pathname
1290 currentPath = hasPathWeb ? currentPath.substring(4) : currentPath
1291 currentPath = hasPathGuest ? currentPath.substring(6) : currentPath
1292
1293 objsTela.unidadesRegistroInteresse.forEach(unidade => currentPath = currentPath.replace('/' + unidade.friendlyURL, ''))
1294
1295 currentPath = (currentUnidadeFriendlyURLSelected ? '/' + currentUnidadeFriendlyURLSelected : '') + currentPath
1296 currentPath = hasPathGuest ? '/guest' + currentPath : currentPath
1297 currentPath = hasPathWeb ? '/web' + currentPath : currentPath
1298
1299 if(keepURL())
1300 window.history.replaceState(window.history.state, '', currentPath + window.location.search)
1301 }
1302
1303
1304
1305 function populaSelectUnidades(unidades, showOptions, unidadeValue){
1306
1307 //Oredenacao
1308 objsTela.unidades.sort(function (a, b) {
1309 return ordenar(a, b, 'nome');
1310 });
1311
1312 $('#informe-novas-turmas, .ssp-ofertas__box-endereco-unidade').addClass('d-none');
1313 hideCardSemTurmas(true)
1314
1315 //console.log('Unidade Pre '+unidadePreSelecionada);
1316
1317 if(objsTela.unidades.length == 0){
1318 if(!showOptions)
1319 $('.ssp-container-selecione-unidade').addClass('d-none');
1320 $('.oferta-slick-area').empty();
1321 $('.prev-mobile').addClass('d-none');
1322 $('.next-mobile').addClass('d-none');
1323
1324 }
1325
1326 let unidadeFounded;
1327
1328 $('#unidades-ofertas').empty()
1329
1330 if(objsTela.unidades && objsTela.unidades.length)
1331 $('#unidades-ofertas').append($('<option value="">Clique na unidade de interesse</option>'))
1332 else
1333 $('#unidades-ofertas').append($('<option value="">Nenhum resultado encontrado</option>'))
1334
1335 unidadeFounded = criarOptionUnidadesPorRegiao(objsTela.unidades)
1336
1337 /* $.each(objsTela.unidades, function(k,unidade){
1338
1339 if($('#unidades-ofertas').find('[value="'+unidade['categoryId']+'"]').length == 0){
1340
1341 var option = $('<option>');
1342 option.val(unidade['categoryId']+"@"+unidade['codigoUnidade']);
1343 option.text(unidade['nome']);
1344 option.attr('data-unidade-friendly-url', unidade.friendlyURL)
1345
1346 $('#unidades-ofertas').append(option);
1347
1348
1349 }
1350 });
1351
1352 **/
1353
1354 if(unidadeFounded){
1355 $('#unidades-ofertas').val(unidadeFounded['categoryId']+"@"+unidadeFounded['codigoUnidade']);
1356 $('#unidades-ofertas').change();
1357 }
1358
1359 loadAlternadores();
1360
1361 $('.prev-mobile').addClass('d-none');
1362 $('.next-mobile').addClass('d-none');
1363 $('.oferta-slick-area').empty();
1364
1365
1366 }
1367
1368 function ordenar(objA, objB, nomeAtributo){
1369 let a = (nomeAtributo) ? objA[nomeAtributo] : objA;
1370 let b = (nomeAtributo) ? objB[nomeAtributo] : objB;
1371
1372 if (a > b) return 1;
1373 if (a < b) return -1;
1374 return 0;
1375 }
1376
1377 $('#unidades-ofertas').change(ev => {
1378 mudarUnidade(ev)
1379 });
1380
1381
1382 function mudarUnidade(ev){
1383
1384 var elem = $(ev.target);
1385 var unidades = objsTela.unidades;
1386
1387 //Unidade sem value tratamento
1388 if(!elem.val()){
1389 $('#informe-novas-turmas, .ssp-ofertas__box-endereco-unidade').addClass('d-none');
1390
1391 if($('#unidades-ofertas option').length <= 1)
1392 hideCardSemTurmas(false)
1393 else
1394 hideCardSemTurmas(true)
1395
1396
1397 elem.val('')
1398 return;
1399 } else {
1400 $('#informe-novas-turmas, .ssp-ofertas__box-endereco-unidade').removeClass('d-none');
1401
1402 if($('#unidades-ofertas option').length <= 1)
1403 hideCardSemTurmas(false)
1404 else
1405 hideCardSemTurmas(true)
1406 }
1407
1408 //colocamos dentro do option categoryId@codUnidade
1409 splitted = elem.val().split("@");
1410 var categoryIdUnidade = splitted[0];
1411 var codUnidade = splitted[1];
1412 console.log("splitted ", splitted)
1413 for(var i = 0; unidades.length > i ; i++){
1414
1415 if(unidades[i].categoryId == categoryIdUnidade){
1416
1417 var unidade = unidades[i];
1418
1419 //Exibe o endereco da unidade
1420 const urlBuscaUnidade = urlUnidadeInfoDetalhe
1421 .replace('\{companyId\}',themeDisplay.getCompanyId())
1422 .replace('\{codigoUnidade\}', unidade.codigoUnidade);
1423
1424 $.ajax({
1425 url : urlBuscaUnidade,
1426 type : 'get',
1427 dataType: 'json',
1428 success: function( unidadeInfo ) {
1429 if(unidadeInfo != null && typeof unidadeInfo !== 'undefined'){
1430
1431 var endereco = concatSTR(unidadeInfo.enderecoUnidade,unidadeInfo.numEnderecoUnidade,', ');
1432 endereco = concatSTR(endereco,unidadeInfo.complementoEnderecoUnidade, ' - ');
1433 endereco = concatSTR(endereco,unidadeInfo.bairroUnidade, ' - ');
1434
1435 $('.ssp-ofertas__endereco-unidade').text(endereco);
1436 $('.ssp-ofertas__endereco-unidade').attr('href',unidadeInfo.googlemapsUnidade);
1437 $('.ssp-ofertas__box-endereco-unidade').removeClass("d-none")
1438 }
1439 },
1440 error: function(data){
1441 $('.ssp-ofertas__box-endereco-unidade').addClass("d-none")
1442 $('.ssp-ofertas__endereco-unidade').text('');
1443 $('.ssp-ofertas__endereco-unidade').attr('href','#a');
1444 console.log('Unidade não encontrada');
1445 }
1446 })
1447
1448 getOfertas(codigoFT, dataEfetiva, unidades[i].categoryId, $('#chkInscricao').prop("checked"));
1449
1450 }
1451 }
1452
1453 }
1454
1455 function criarOptionUnidadesPorRegiao(unidades) {
1456 let regioes = {}
1457 let unidadeFounded
1458
1459 unidades.forEach(unidade => {
1460 if(!regioes[unidade.codRegiaoUnidade || 'N'])
1461 regioes[unidade.codRegiaoUnidade || 'N'] = []
1462
1463 regioes[unidade.codRegiaoUnidade || 'N'].push(unidade)
1464 })
1465
1466 Array.from(['C', 'I', 'GS', 'N'])
1467 .filter(key => Object.keys(regioes).includes(key))
1468 .forEach(key => {
1469 const unidadesDaRegiao = regioes[key]
1470
1471 const optionDisabled = $('<option>')
1472 optionDisabled.attr('label', getRegiaoName(key))
1473 optionDisabled.text(getRegiaoName(key));
1474 optionDisabled.attr('disabled', true)
1475 optionDisabled.addClass('ssp-option-group')
1476 $('#unidades-ofertas').append(optionDisabled)
1477
1478 $.each(unidadesDaRegiao, function(k,unidade){
1479 if($('#unidades-ofertas').find('[value="'+unidade['categoryId']+'"]').length == 0){
1480 var option = $('<option>');
1481 option.val(unidade['categoryId']+"@"+unidade['codigoUnidade']);
1482 option.text(unidade['nome']);
1483 option.attr('data-unidade-friendly-url', unidade.friendlyURL)
1484 option.addClass('ssp-option')
1485
1486 $('#unidades-ofertas').append(option);
1487
1488 unidadeFounded = !unidadeFounded
1489 }
1490 })
1491 })
1492
1493 return unidadeFounded
1494 }
1495
1496 function getRegiaoName(key) {
1497 switch (key) {
1498 case "C":
1499 return "Capital";
1500 case "I":
1501 return "Interior";
1502 case "GS":
1503 return "Grande São Paulo e Litoral";
1504 default:
1505 return "Sem Região";
1506 }
1507 }
1508
1509 function loadAlternadores() {
1510
1511 let $alternadores = $('#ssp-alternadores');
1512 if($('#unidades-ofertas').is(":hidden") || $('#unidades-ofertas option').length <= 1) {
1513
1514 if(!$('#chkInscricao').prop('checked')) $alternadores.hide();
1515 else $alternadores.show();
1516
1517 }else $alternadores.show();
1518
1519 }
1520
1521 function hideCardSemTurmas(hide){
1522 if(hide){
1523 $('.ssp-card-oferta-curso__sem-vaga').addClass('d-none');
1524 $('.ssp-card-oferta-curso__mensagem-legal').css('margin', '0px 0 0 0;')
1525 }else{
1526 $('.ssp-card-oferta-curso__sem-vaga').removeClass('d-none');
1527 $('.ssp-card-oferta-curso__mensagem-legal').css('margin', '')
1528 }
1529 }
1530
1531 function getOfertas(codigoFT, dataEfetivaOferta, categoryId, filtrarInscricoes){
1532
1533 var indiceUnidade = -1;
1534
1535 for(var i = 0; i < objsTela.unidades.length; i++)
1536 if(objsTela.unidades[i].categoryId == categoryId)
1537 indiceUnidade = i;
1538
1539 if(!objsTela.categoriesIds.includes(categoryId) ||
1540 objsTela.unidades[indiceUnidade].ofertasFiltradas != filtrarInscricoes){
1541
1542 objsTela.unidades[indiceUnidade]['ofertas'] = []
1543
1544 var params = new URLSearchParams();
1545 params.set('codigoFTOferta',codigoFT)
1546 params.set('dataEfetivaOferta',dataEfetivaOferta)
1547 params.set('categoryIds',categoryId)
1548 params.set('start',startOfertaParam)
1549 params.set('end',endOfertaParam)
1550 params.set('inscricaoAberta', filtrarInscricoes)
1551 params.set('bolsaAberta', false)
1552 params.set('cursoArticleId', $('[name="articleId"]').val() || '');
1553
1554 const url = urlSearchOferta + '?' + params.toString()
1555
1556 $.ajax({
1557 url:url,
1558 method:'get',
1559 dataType:'json',
1560 async: false
1561 }).done(
1562 function(data){
1563
1564 if(data.length > 0){
1565 $('.ssp-container-selecione-unidade').show();
1566
1567 data.forEach(function(ofertaJSON,index){
1568
1569 var oferta = getOfertaObjectFromJson(ofertaJSON,index);
1570
1571 //Preenche as ofertas da unidade
1572 objsTela.unidades[indiceUnidade]['ofertas'].push(oferta);
1573
1574
1575 });
1576 }
1577 objsTela.categoriesIds.push(categoryId);
1578 populaOfertas(objsTela.unidades[indiceUnidade]['ofertas']);
1579 objsTela.unidades[indiceUnidade].ofertasFiltradas = filtrarInscricoes;
1580 }
1581 )
1582
1583 //Se estiver na cache, valida as ofertas
1584 }else{
1585
1586 populaOfertas(objsTela.unidades[indiceUnidade]['ofertas']);
1587
1588 }
1589 }
1590
1591 function getOfertaObjectFromJson(ofertaJSON,index){
1592
1593
1594 var oferta = {};
1595 var xml = $($.parseXML(ofertaJSON.content));
1596 oferta['ordenar'] = paramOrdem(xml);
1597 oferta['vagasTotal'] = xml.find('[name="vagasTotal"]').text().trim();
1598 var dataInicio = xml.find('[name="dataInicioOferta"]').text().split('-');
1599 var dataFim =xml.find('[name="dataFimOferta"]').text().split('-');
1600 oferta['dataInicio'] = dataInicio[2].trim()+'/'+dataInicio[1].trim()+'/'+dataInicio[0].trim();
1601 oferta['dataFim'] = dataFim[2].trim()+'/'+dataFim[1].trim()+'/'+dataFim[0].trim();
1602 oferta['horaInicio'] = xml.find('[name="horaInicioOferta"]').text();
1603 oferta['codigoOferta'] = xml.find('[name="codigoOferta"]').text().trim();
1604 var dias = [];
1605 oferta['horaFimOferta'] = xml.find('[name="horaFimOferta"]').text().trim();
1606 xml.find('[name="diasDaSemanaOferta"]').find('option').each(function(index,dia){
1607 dias.push($(dia).text());
1608 });
1609 oferta['diasDaSemanaOferta'] = dias;
1610 oferta['periodoDiaOferta'] = xml.find('[name="periodoDiaOferta"]').text().trim();
1611 oferta['precoCheioOferta'] = xml.find('[name="precoCheioOferta"]').text().trim();
1612 oferta['precoVendaOferta'] = xml.find('[name="precoVendaOferta"]').text().trim();
1613 oferta['numeroMaxParcelasOferta'] = xml.find('[name="numeroMaxParcelasOferta"]').text().trim();
1614
1615 oferta['textoCartoesAceitos'] = pegarTextoCartoesAceitos(xml.find('[name="formaDePagamentoCartaoOferta"]').text().trim());
1616 oferta['numParcelaCartoes'] = pegaNumParcela(xml.find('[name="formaDePagamentoCartaoOferta"]').text().trim());
1617 oferta['precoParcelaCartoes'] = pegaValorParcela(xml.find('[name="formaDePagamentoCartaoOferta"]').text().trim());
1618 oferta['numParcelaBoleto'] = pegaNumParcela(xml.find('[name="formaDePagamentoBoletoOferta"]').text().trim());
1619 oferta['precoParcelaBoleto'] = pegaValorParcela(xml.find('[name="formaDePagamentoBoletoOferta"]').text().trim());
1620
1621 oferta['precoVendaMaxParcelaOferta'] = xml.find('[name="precoVendaMaxParcelaOferta"]').text().trim();
1622 oferta['formaDePagamentoOferta'] = xml.find('[name="formaDePagamentoOferta"]').text().trim();
1623 oferta['botaoCompraOferta'] = xml.find('[name="botaoCompraOferta"]').text().trim();
1624 oferta['vagasParaCompraOferta'] = xml.find('[name="vagasParaCompraOferta"]').text().trim();
1625 oferta['botaoBolsaOferta'] = xml.find('[name="botaoBolsaOferta"]').text().trim();
1626 oferta['vagasBolsaOferta'] = xml.find('[name="vagasBolsaOferta"]').text().trim();
1627 oferta['dataAberturaBolsaOferta'] = xml.find('[name="dataAberturaBolsaOferta"]').text().trim();
1628 oferta['horaAberturaBolsaOferta'] = xml.find('[name="horaAberturaBolsaOferta"]').text().trim();
1629 oferta['espacoExterno'] = xml.find('[name="espacoExterno"]').text().trim();
1630 oferta['localEspacoExterno'] = xml.find('[name="localEspacoExterno"]').text().trim();
1631 oferta['ruaEspacoExterno'] = xml.find('[name="ruaEspacoExterno"]').text().trim();
1632 oferta['numeroEspacoExterno'] = xml.find('[name="numeroEspacoExterno"]').text().trim();
1633 oferta['complementoEspacoExterno'] = xml.find('[name="complementoEspacoExterno"]').text().trim();
1634 oferta['bairroEspacoExterno'] = xml.find('[name="bairroEspacoExterno"]').text().trim();
1635 oferta['cidadeEspacoExterno'] = xml.find('[name="cidadeEspacoExterno"]').text().trim();
1636 oferta['ufEspacoExterno'] = xml.find('[name="ufEspacoExterno"]').text().trim();
1637 oferta['cepEspacoExterno'] = xml.find('[name="cepEspacoExterno"]').text().trim();
1638 oferta['qtdeTotalVagas'] = xml.find('[name="qtdeTotalVagas"]').text().trim();
1639 oferta['qtdeTotalVagasPSG'] = xml.find('[name="qtdeTotalVagasPSG"]').text().trim();
1640 oferta['horariosAllOferta'] = xml.find('[name="horariosAllOferta"]').text().trim();
1641 oferta['formaDePagamentoCartaoOferta'] = xml.find('[name="formaDePagamentoCartaoOferta"]').text().trim();
1642 oferta['formaDePagamentoBoletoOferta'] = xml.find('[name="formaDePagamentoBoletoOferta"]').text().trim();
1643 oferta['dtLimiteMatricula'] = xml.find('[name="dtLimiteMatricula"]').text().trim();
1644 oferta['dataAberturaMatricula'] = xml.find('[name="dataAberturaMatricula"]').text().trim();
1645 oferta['etapa'] = xml.find('[name="etapa"]').text().trim();
1646
1647 return oferta;
1648 }
1649
1650 function populaOfertas(ofertas){
1651
1652 objsTela.ofertas = ofertas;
1653
1654 if(ofertas && ofertas.length)
1655 $('#ssp-h3-turmas').show()
1656 else
1657 $('#ssp-h3-turmas').hide()
1658
1659
1660 if(ofertas.length == 0){
1661
1662 if($('#unidades-ofertas').val() || $('#chkInscricao').prop('checked') || $('#chkBolsa').prop('checked'))
1663 hideCardSemTurmas(false)
1664
1665 $('.oferta-slick-area').empty();
1666 $('.prev-mobile').addClass('d-none');
1667 $('.next-mobile').addClass('d-none');
1668
1669
1670 return;
1671 }else{
1672 hideCardSemTurmas(true)
1673 $('.prev-mobile, .next-mobile').removeClass('d-none');
1674 }
1675
1676
1677 $('.oferta-slick-area').empty();
1678 ofertas = ofertas.sort(function(a, b){
1679 return ordenar(a, b, 'ordenar');
1680 });
1681 // executa a class do slick slider
1682 $('.oferta-slick-area').removeClass('slick-initialized slick-slider slick-dotted');
1683
1684 //busca o codigoUnidade para o link do ecommerce
1685
1686 var selectedUnidade = $('#unidades-ofertas').val().split('@')[0];
1687 for(var i=0;objsTela.unidades.length > i ;i++){
1688 if(selectedUnidade == objsTela.unidades[i].categoryId)
1689 codigoUnidade = objsTela.unidades[i].codigoUnidade;
1690 }
1691
1692
1693 for(var i=0;ofertas.length > i ;i++){
1694
1695 var oferta = ofertas[i];
1696
1697 //guardando a oferta no map para chamar ajax com infos de bolsa em tempo real
1698 oferta['indice'] = i;
1699 ofertasMap.set(oferta.codigoOferta, oferta);
1700 montaHTMLOferta(oferta, i, codigoUnidade, false);
1701 montaHTMLModalLocalRealizacao(oferta, i);
1702 verificaCursoAprendizagem(i);
1703 associaEventoBtnLocalRealizacao(i);
1704 associaEventosFecharModal(i);
1705
1706 }
1707
1708 sliderOfertas();
1709 }
1710
1711 function montaHTMLOferta(oferta, index, codigoUnidade, posLoad){
1712
1713 var retornoDiasHorarios = processaDiasHorariosOferta(oferta.horariosAllOferta);
1714 diasSemanaHTML = "";
1715
1716 for(var diaDaOferta of retornoDiasHorarios){
1717 diasSemanaHTML += htmlSlickAreaDiasSemana.replace('\{diasSemana\}',diaDaOferta.dias);
1718 diasSemanaHTML = diasSemanaHTML.replace('\{horasSemana\}',diaDaOferta.horario)
1719 }
1720
1721 var ofertaHTML = "";
1722 ofertaHTML = htmlSlickArea(index, oferta, diasSemanaHTML, codigoUnidade)
1723
1724 if(!posLoad)
1725 $('.oferta-slick-area').append(ofertaHTML);
1726 else{
1727 $('.oferta-slick-area').slick('slickAdd', ofertaHTML);
1728 }
1729
1730 ajustaTextoDiasHorarioOferta(oferta.codigoOferta);
1731
1732 if(turmasIniciadas(oferta.dataInicio))
1733 $("#aviso-turma-iniciada-"+index).show();
1734
1735 //remove os botões/itens de compra/bolsa caso seja preciso
1736 $('.oferta-slick-area').find('.d-none-btn').remove();
1737 }
1738
1739 function processaDiasHorariosOferta(horariosAllOferta){
1740
1741 var dias = horariosAllOferta.trim().split(',');
1742 let arrayDiasSemana = [{"Seg":"Segunda"},{"Ter":"Terça"},{"Qua":"Quarta"},{"Qui":"Quinta"},{"Sex":"Sexta"},{"Sab":"Sábado"},{"Dom":"Domingo"}]
1743
1744 var arrayDia = [];
1745 if(dias.length >= 1){
1746 for(var k=0; dias.length > k; k++){
1747
1748 var diasSplit = dias[k].trim().split(' ');
1749 var diasSemana = diasSplit.shift()
1750 var ultimaPos = diasSplit.length-1;
1751 var horasStr = diasSplit[0] + ' às ' + diasSplit[ultimaPos]
1752 arrayDia.push({horasStr,diasSemana});
1753 }
1754 }
1755
1756 arrayDia = groupByArray(arrayDia, 'horasStr','diasSemana');
1757 arrayDia = orderByArray(arrayDia,arrayDiasSemana);
1758
1759 var ret = diaHorarioOfertaFormatado(arrayDia,arrayDiasSemana);
1760 return ret;
1761 }
1762
1763 //cria um array de objetos Agrupando de acordo ao campo informado como chave.
1764 //@arr = Array multidimensional que tenha os campos key e valueAdd
1765 //@key = campo que será chave nesse array
1766 //@valueAdd = campo que será agrupado caso tenha a mesma informação passada no campo key
1767 const groupByArray = (arr, key,valueAdd) => {
1768 const initialValue = [];
1769 const retornoValue = [];
1770 arr.forEach((acc, cval) => {
1771 const myAttribute = cval[key];
1772 acc[key] in retornoValue ? retornoValue[acc[key]].push(acc[valueAdd]):retornoValue[acc[key]]=[acc[valueAdd]];
1773 return acc;
1774 }, initialValue);
1775 return retornoValue;
1776 };
1777
1778
1779 //Cria um array de objetos a partir do primeiro array inserido e ordenados de acordo a ordem do segundo array informado.
1780 //@arrayOrdena = Array de objetos que tenha os campos que precisa ser ordenados
1781 //@ordem = array com a sequencia que queira ordenar - ex: seg, ter, qua, qua
1782 const orderByArray = (arrayOrdena, ordem) => {
1783
1784 let diasSem = [];
1785 const arrayOrdenado = [];
1786 let controle;
1787
1788 //percorre cada campo existente no ordem e busca o mesmo no arrayOrdena, encontrando insere no arrayOrdenado
1789 for(let campo of ordem){
1790 Object.entries(arrayOrdena).forEach(([key, value]) => {
1791 for(let diaOferta of value){
1792 if(diaOferta===Object.keys(campo)[0]){
1793 arrayOrdenado[key]=arrayOrdena[key];
1794 }
1795 }
1796 })
1797 }
1798 return arrayOrdenado;
1799 };
1800
1801 function diaHorarioOfertaFormatado(arrayAgrupadoEOrdenado, arrayDiasDaSemana){
1802
1803 var stringAux = "";
1804 var listRetorno = [];
1805
1806 Object.entries(arrayAgrupadoEOrdenado).forEach(([key, value]) => {
1807
1808 var sequencial = diasSequenciaisOuAlternados(value, arrayDiasDaSemana);
1809 var stringAux = "";
1810 var diaOferta = {};
1811
1812 if(sequencial){
1813 switch (value.length) {
1814 case 1:
1815 stringAux = stringAux+findValueInObject(arrayDiasDaSemana,value[0])+": ";
1816 diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula
1817 diaOferta.horario = key;
1818 break;
1819 case 2:
1820 stringAux = stringAux+findValueInObject(arrayDiasDaSemana,value[0])+" e "+findValueInObject(arrayDiasDaSemana,value[value.length-1])+": ";
1821 diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula
1822 diaOferta.horario = key;
1823 break;
1824 default:
1825 stringAux = stringAux+findValueInObject(arrayDiasDaSemana,value[0])+" a "+findValueInObject(arrayDiasDaSemana,value[value.length-1])+": ";
1826
1827 diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula
1828 diaOferta.horario = key;
1829 break;
1830 }
1831 }else{
1832 switch (value.length) {
1833 case 2:
1834 stringAux = stringAux+findValueInObject(arrayDiasDaSemana,value[0])+" e "+findValueInObject(arrayDiasDaSemana,value[value.length-1])+": ";
1835 diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula
1836 diaOferta.horario = key;
1837 break;
1838 default:
1839 var ct = 0;
1840 var stringDias="";
1841 for(let v of value){
1842 ct++;
1843 ct==value.length ? stringDias=stringDias.substring(0,stringDias.length - 2)+" e "+findValueInObject(arrayDiasDaSemana,v) : stringDias+=findValueInObject(arrayDiasDaSemana,v)+", ";
1844 }
1845 stringAux = stringAux+stringDias+": ";
1846 diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula
1847 diaOferta.horario = key;
1848 break;
1849 }
1850 }
1851
1852 listRetorno.push(diaOferta);
1853 })
1854 return listRetorno;
1855 };
1856
1857 //retorna o valor de um objeto dentro de um array
1858 //@objetoBusca = array de objetos que sera buscado o valor
1859 //@keyBusca = nome do campo a ser buscada no objeto para pegar o seu valor
1860 function findValueInObject(objetoBusca, keyBusca){
1861 var retorno = "";
1862 Object.entries(objetoBusca).forEach(([horario, dias]) => {
1863 Object.entries(dias).forEach(([key,val]) => {
1864 if(key.trim()==keyBusca.trim()){
1865 retorno = val;
1866 }
1867 });
1868 });
1869 return retorno;
1870 }
1871
1872 //Recebe um objeto com valores dos dias da semana e define se sao dias seguidos ou alternados.
1873 //@arrayComDiasDaSemana = array com os dias da semana a serem validados - exemplo ['Qua','Qui','Sex']
1874 //@keyBusca = nome do campo a ser buscada no objeto para pegar o seu valor
1875 function diasSequenciaisOuAlternados(arrayComDiasDaSemana, arrayDiasDaSemana){
1876
1877 let arrayValidador = [];
1878
1879 //cria um array com o index dos dias das semanas encontrados [0 = seg, 1 = ter ... 6 = dom]
1880 for(let diaOferta of arrayComDiasDaSemana){
1881 for(let i = 0; i < arrayDiasDaSemana.length; i++){
1882 if(diaOferta === Object.keys(arrayDiasDaSemana[i])[0]){
1883 arrayValidador[i] = true;
1884 }
1885 }
1886 }
1887
1888 let keyCompair = 99;
1889 var sequencial = true;
1890
1891 //verifica quais posições foram criadas no array, e se os valores delas estão em sequencia.
1892 for(let keyValidator of Object.keys(arrayValidador)){
1893 keyValidator = parseInt(keyValidator);
1894 if(keyCompair!==99){
1895 if(keyValidator===keyCompair){
1896 sequencial = true;
1897 }else{
1898 sequencial = false;
1899 break;
1900 }
1901 }
1902 keyCompair = keyValidator+1;
1903 }
1904 return sequencial;
1905 }
1906
1907 function concatSTR(str1, str2, separador){
1908
1909 if(str2){
1910
1911 return str1+separador+str2;
1912 }
1913 return str1;
1914 }
1915
1916 //Distribui dia e horario com quebra de linha entre eles ou nao dependendo da resolução de tela e tamanho da string
1917 function ajustaTextoDiasHorarioOferta(codOferta){
1918
1919 var classOferta = ".codigoOferta_"+codOferta;
1920 let oferta = $(classOferta);
1921
1922 let ofertaDiasSemana = $(oferta).find('*[data-dia-hora="dias-semana"]');
1923
1924 let widthDevice = window.screen.width;
1925 let tamLimDesktop = 185;
1926
1927 if(widthDevice <= 1024){
1928 tamLimDesktop = 180;
1929 }
1930
1931 ofertaDiasSemana.each(function(index){
1932
1933
1934 let widthDiaSemana = $(this).width();
1935
1936 let contentDiaHora = $(this).parent().parent().parent();
1937
1938 if(!(widthDiaSemana <= tamLimDesktop)){
1939 $(this).css("display","block");
1940 }
1941
1942 if(ofertaDiasSemana.length == parseInt(index+1)){
1943 contentDiaHora.css("opacity","1");
1944 }
1945
1946 })
1947 }
1948
1949 function turmasIniciadas(dataInicioCurso){
1950
1951 var hoje = new Date();
1952 var dataInicioPartes = dataInicioCurso.split('/');
1953 var dataInicioCursoOferta = new Date(dataInicioPartes[2], dataInicioPartes[1] - 1, dataInicioPartes[0] , hoje.getHours(),hoje.getMinutes(),hoje.getSeconds(),hoje.getMilliseconds());
1954
1955 return dataInicioCursoOferta.getTime() <= hoje.getTime();
1956 }
1957
1958 function paramOrdem(xml){
1959 return xml.find('[name="dataInicioOferta"]').text();
1960 }
1961
1962 function pegarTextoCartoesAceitos(campo){
1963 indice = campo.indexOf(' em até ');
1964 inicio = 0;
1965 fim = indice;
1966
1967 return campo.substring(inicio, fim);
1968 }
1969
1970 function pegaNumParcela(campo){
1971
1972 indice = campo.indexOf('até ');
1973 inicio = indice + 4;
1974 fim = indice + 6;
1975
1976 return campo.substring(inicio, fim);
1977
1978 }
1979
1980 function pegaValorParcela(campo){
1981
1982 indice = campo.indexOf('R$');
1983 inicio = indice+2;
1984 valorAmericano = campo.substring(inicio)
1985
1986 return formataValor(valorAmericano);
1987
1988 }
1989
1990 function formataValor(valor){
1991
1992 if(!valor.toString().includes(".")){
1993 valor = parseFloat(valor).toLocaleString('pt-BR')+",00";
1994 }else{
1995 valor = parseFloat(valor).toLocaleString('pt-BR');
1996
1997 if(valor.split(",").length == 2){
1998
1999 if(valor.split(",")[1].length == 1)
2000 valor += "0";
2001
2002 }else
2003 valor += ",00";
2004 }
2005
2006 return valor;
2007 }
2008
2009 function verificaCursoAprendizagem(i){
2010 //Esconde elementsos quando o curso é aprendizagem
2011 if($('[name="codigoFT"]').val() == codigoFT){
2012 $('#btnComprar_'+i).remove();
2013 $('#container_investimento_'+i).remove();
2014 $('#container_forma_pgto_'+i).remove();
2015
2016 var avisoAprendizagem = $('#aviso-curso-aprendizagem').clone();
2017 let btnFormAprendizagem = '<button class="btn btn-lg btn-success w-100 mt-3 btnModalAprendizagem" data-modal="open-modal" style="font-size:16px;background:#1FC923;font-weight: 600;">Preencher formulário</button>'
2018 avisoAprendizagem.removeAttr('id');
2019 avisoAprendizagem.removeClass('d-none');
2020 $('.card_oferta_'+i+ ' .ssp-card-oferta-curso').append(avisoAprendizagem);
2021 $('.card_oferta_'+i+ ' .ssp-card-oferta-curso').append(btnFormAprendizagem);
2022 }
2023 }
2024
2025 function associaEventoBtnLocalRealizacao(i){
2026 var btnLocalRealizacao = document.getElementById("btnLocalRealizacao_"+i);
2027
2028 if(btnLocalRealizacao!=null){
2029 btnLocalRealizacao.onclick = function(ev) {
2030 event.preventDefault();
2031 var elem = $(ev.target);
2032 var _modal = document.getElementById(
2033 'modalLocalRealizacao_'+elem.data('index'));
2034 _modal.style.display = "flex";
2035 }
2036 }
2037 }
2038
2039 var htmlModalLocalRealizacao = '<div id="modalLocalRealizacao_{index}" class="ssp-modal">'
2040 htmlModalLocalRealizacao += '<div class="ssp-modal-local-realizacao">'
2041 htmlModalLocalRealizacao += '<div class="ssp-modal-local-realizacao__title-content">'
2042
2043 htmlModalLocalRealizacao += '{tituloLocalRealizacao}'
2044
2045 htmlModalLocalRealizacao += '<i class="ssp-card-modal-local-realizacao__btn-close_{index} ssp-card-modal-forma-pagamento__btn-close"></i>'
2046 htmlModalLocalRealizacao += '</div>'
2047 htmlModalLocalRealizacao += '<div class="ssp-modal-local-realizacao__texto">'
2048 htmlModalLocalRealizacao += '<p class="{classeTextoInfoLocalRealizacao}">A unidade {nomeUnidade} realizará as aulas em outro endereço, conforme informações abaixo:</p>'
2049 htmlModalLocalRealizacao += '<p><span class="ssp-modal-local-realizacao__subtitle localEspacoExternoTexto_{index}">{localEspacoExterno}</span></p>'
2050 htmlModalLocalRealizacao += '<address>'
2051 htmlModalLocalRealizacao += '<span id="endereco_realizacao_{index}" class="{classeEnderecoRealizacao}">{ruaEspacoExterno}, {numeroEspacoExterno} {complementoEspacoExterno}<br></span>'
2052 htmlModalLocalRealizacao += '<span id="bairro_realizacao_{index}" class="{classeBairroRealizacao}">Bairro: {bairroEspacoExterno}<br></span>'
2053 htmlModalLocalRealizacao += '<span id="cidade_realizacao_{index}" class="{classeCidadeRealizacao}">Cidade: {cidadeEspacoExterno} - SP<br></span>'
2054 htmlModalLocalRealizacao += '<span id="cep_realizacao_{index}" class="{classeCepRealizacao}">CEP: {cepEspacoExterno}</span>'
2055 htmlModalLocalRealizacao += '</address>'
2056 htmlModalLocalRealizacao += '<div class="btn ssp-modal-local-realizacao__btn-content">'
2057 htmlModalLocalRealizacao += '<a class="btn ssp-modal-local-realizacao__btn {classeEntendi} ssp-modal-local-realizacao__btn_{index}" href="#a">Entendi</a>'
2058 htmlModalLocalRealizacao +='</div>'
2059 htmlModalLocalRealizacao +='</div>'
2060 htmlModalLocalRealizacao +='</div>'
2061 htmlModalLocalRealizacao +='</div>';
2062
2063 var htmlSlickAreaDiasSemana = '<div class="ssp-card-oferta-curso__dia-hora-item">'
2064 htmlSlickAreaDiasSemana +='<p class="ssp-card-oferta-curso__dia-hora-item__dia">'
2065 htmlSlickAreaDiasSemana += '<span data-dia-hora="dias-semana">{diasSemana}</span>'
2066 htmlSlickAreaDiasSemana += '<span data-dia-hora="horário">{horasSemana}</span>'
2067 htmlSlickAreaDiasSemana += '</p>'
2068 htmlSlickAreaDiasSemana += '</div>';
2069
2070 function htmlSlickArea(index, oferta, diasSemanaHTML, codigoUnidade) {
2071 const btnLocalReal = function(oferta){
2072
2073 var btn = `<div class="container-local-realizacao ` + (oferta.espacoExterno == 'true' ? '' : 'd-none-btn') + `">`;
2074
2075 btn += `<a id="btnLocalRealizacao_` + index + `" data-index="` + index + `" class="ssp-card-oferta-curso__local-realizacao-content__title" href="#"><i class="fas fa-user"></i>Onde as aulas vão acontecer?</a>`;
2076
2077 btn += `</div>`;
2078
2079 return btn;
2080
2081 }
2082
2083 // Card Oferta
2084
2085 let result = `
2086 <div class="slick-area__item card_oferta_` + index + ` codigoOferta_` + oferta.codigoOferta + ` ` + `">
2087
2088 <div class="ssp-card-oferta-curso">
2089
2090 <div class="content-data-dias">
2091
2092 <div class="ssp-card-oferta__info-turma-iniciada" id="aviso-turma-iniciada-` + index + `" style="display:none">
2093 <h6 style="color:white;background-color:#ff7157;border-radius: 5px;padding: 8px 0px;width: 60%;font-size: 12px;margin-top: 0;"><strong>Turma iniciada, comece já!</strong></h6>
2094 </div>
2095
2096 <div class="ssp-card-oferta__info-turma-content">
2097 <h6 class="ssp-card-oferta__info-turma">Informações da turma</h6>
2098 </div>
2099
2100 <div>
2101 <small class="ssp-card-oferta-curso__title-item">Período:</small>
2102 <h6 class="ssp-card-oferta-curso__item-data-periodo item-data-periodo_` + index + `">` + formataPeriodo(oferta.dataInicio, oferta.dataFim) + `</h6>
2103 </div>
2104
2105 <div class="content-horario-dias-semana">
2106
2107 <div class="horario">
2108 <small class="ssp-card-oferta-curso__title-item">Horário e dias das aulas:</small>
2109 </div> ` +
2110
2111 `<div class="ssp-card-oferta-curso__dia-hora_content">
2112 ` + diasSemanaHTML + `
2113 </div>
2114
2115 </div>
2116
2117 ` + btnLocalReal(oferta)
2118
2119
2120 return result
2121 }
2122
2123 function montaHTMLModalLocalRealizacao(oferta, index){
2124
2125 var tituloLocalRealizacao = '<i class="ssp-modal__local-realizacao-content__icon-wifi"></i> <i class="ssp-modal__local-realizacao-content__icon-chalkboard-teacher"></i> <h6 class="ssp-modal-local-realizacao__title"> ONDE AS AULAS VÃO ACONTECER?</h6>';
2126
2127 var localRealizacaoHTMLModal = htmlModalLocalRealizacao
2128 .replace('\{nomeUnidade\}',$('#unidades-ofertas option:selected').text())
2129 .replace('\{localEspacoExterno\}', oferta.localEspacoExterno )
2130 .replace('\{classeTextoInfoLocalRealizacao\}', oferta.ruaEspacoExterno != "" ? "" : "d-none")
2131 .replace('\{classeEnderecoRealizacao\}', oferta.ruaEspacoExterno != "" ? "" : "d-none")
2132 .replace('\{ruaEspacoExterno\}',oferta.ruaEspacoExterno)
2133 .replace('\{numeroEspacoExterno\}',oferta.numeroEspacoExterno)
2134 .replace('\{complementoEspacoExterno\}',oferta.complementoEspacoExterno)
2135 .replace('\{classeBairroRealizacao\}', oferta.bairroEspacoExterno != "" && oferta.ruaEspacoExterno != "" ? "" : "d-none")
2136 .replace('\{bairroEspacoExterno\}',oferta.bairroEspacoExterno)
2137 .replace('\{classeCidadeRealizacao\}', oferta.cidadeEspacoExterno != "" && oferta.ruaEspacoExterno != "" ? "" : "d-none")
2138 .replace('\{cidadeEspacoExterno\}',oferta.cidadeEspacoExterno)
2139 .replace('\{classeCepRealizacao\}', oferta.cepEspacoExterno != "" && oferta.ruaEspacoExterno != "" ? "" : "d-none")
2140 .replace('\{cepEspacoExterno\}',oferta.cepEspacoExterno)
2141 .replace(regIndex, index)
2142 .replace('\{tituloLocalRealizacao\}', tituloLocalRealizacao)
2143 .replace('\{classeEntendi\}', "");
2144
2145 $('.oferta-slick-area_modal').append(localRealizacaoHTMLModal);
2146 $('.oferta-slick-area_modal').find('.d-none-btn').remove();
2147
2148 if(oferta.ruaEspacoExterno == "")
2149 $('.localEspacoExternoTexto_'+index).removeClass('ssp-modal-local-realizacao__subtitle');
2150 }
2151
2152 //Formata exibicao de datas conforme especificacao GCR
2153 function formataPeriodo(dataInicio, dataFim){
2154
2155 var dtInicioPartes = dataInicio.split('/');
2156 var dtFimPartes = dataFim.split('/');
2157
2158 //Não exibir o número zero antes dos números e o dia 1 como 1º
2159 var dInicioFormatada = (parseInt(dtInicioPartes[0].trim()) == 1 ? '1º' : parseInt(dtInicioPartes[0].trim())) +'/'+parseInt(dtInicioPartes[1].trim())+'/'+dtInicioPartes[2].trim();
2160 var dFimFormatada = (parseInt(dtFimPartes[0].trim()) == 1 ? '1º' : parseInt(dtFimPartes[0].trim())) +'/'+parseInt(dtFimPartes[1].trim())+'/'+dtFimPartes[2].trim();
2161
2162 //Quando um curso inicia e finaliza dentro do mesmo ano: 17/2 a 25/4/2020
2163 if(dtInicioPartes[2].trim() == dtFimPartes[2].trim()){
2164
2165 dInicioFormatada = (parseInt(dtInicioPartes[0].trim()) == 1 ? '1º' : parseInt(dtInicioPartes[0].trim()))+'/'+parseInt(dtInicioPartes[1].trim());
2166
2167 //Quando um curso inicia e finaliza dentro do mesmo mês: 5 a 30/4/2020
2168 if(dtInicioPartes[1].trim() == dtFimPartes[1].trim())
2169 dInicioFormatada = (parseInt(dtInicioPartes[0].trim()) == 1 ? '1º' : parseInt(dtInicioPartes[0].trim()));
2170 }
2171
2172 return dInicioFormatada + ' a ' + dFimFormatada;
2173 }
2174
2175 function strToFloat(str) {
2176 const separator = str.includes(',') ? ',' : '.'
2177
2178 const numArr = str.split(separator)
2179 const inteiro = numArr[0].replaceAll('.', '').replaceAll(',', '.')
2180 const decimal = numArr[1] ? numArr[1].replaceAll('.', '').replaceAll(',', '.') : ''
2181 return parseFloat(inteiro.concat('.').concat(decimal ? decimal : '0'))
2182 }
2183
2184 function associaEventosFecharModal(i){
2185
2186 var closeModalLocalRealizacao = document.getElementsByClassName("ssp-card-modal-local-realizacao__btn-close_"+i)[0];
2187 var btnEntendiLocalRealizacao = document.getElementsByClassName("ssp-modal-local-realizacao__btn_"+i)[0];
2188
2189 //event close modal
2190 closeModalLocalRealizacao.onclick = function() {
2191
2192 $('[id^="modalLocalRealizacao_"]').each(function(index,modal){
2193 modal.style.display = "none";
2194
2195 });
2196 }
2197
2198 btnEntendiLocalRealizacao.onclick = function() {
2199
2200 $('[id^="modalLocalRealizacao_"]').each(function(index,modal){
2201 modal.style.display = "none";
2202 });
2203 }
2204
2205 // When the user clicks anywhere outside of the modal, close it
2206 window.onclick = function(event) {
2207
2208 $('[id^="modalLocalRealizacao_"]').each(function(index,_modal){
2209 if (event.target == _modal)
2210 _modal.style.display = "none";
2211 });
2212
2213
2214 }
2215 }
2216
2217 //Abrir e fechar modal
2218
2219 function closeModalFormAprendizagem(){
2220 let modal = document.querySelector('[data-modal="modal"]')
2221
2222 modal.classList.remove('open-modal-form')
2223
2224 }
2225
2226
2227 function openModalFormAprendizagem(){
2228 let modal = document.querySelector('[data-modal="modal"]')
2229
2230 modal.classList.add('open-modal-form')
2231
2232 }
2233
2234 function cloneObj(original) {
2235 return JSON.parse(JSON.stringify(original));
2236 }
2237
2238
2239 </script>