diff --git a/src/lib/model/entities/service.dart b/src/lib/model/entities/service.dart new file mode 100644 index 0000000..5b019eb --- /dev/null +++ b/src/lib/model/entities/service.dart @@ -0,0 +1,27 @@ + +class Service{ + final int id; + final String name; + final String description; + final String startTime; + final String endTime; + + + Service(this.id, this.name, this.description,this.startTime,this.endTime){} + + Map toMap() { + return { + 'id': id, + 'begin': startTime, + 'end': endTime, + 'rooms': '', + 'subject': name + }; + } + + @override + String toString() { + return '''$id - $name - $description - $startTime - $endTime'''; + } + +} \ No newline at end of file diff --git a/src/lib/utils/serviceMock.dart b/src/lib/utils/serviceMock.dart new file mode 100644 index 0000000..7ed9364 --- /dev/null +++ b/src/lib/utils/serviceMock.dart @@ -0,0 +1,34 @@ +import 'package:uni/model/entities/service.dart'; + +class ServiceMock{ + + static List getServices(){ + return [ + Service(1,'SERAC' , + 'Garantir as atividades no âmbito da administração, gestão e apoio na área de gestão de curso; a área do acesso, ingresso e certificação; a área de gestão de estudante, de acordo com as instruções tutelares e as diretivas dos Órgãos de Gestão, constituindo a relação com o estudante o vetor essencial da sua atuação.', + '11:00', '16:00'), + + Service(2, 'SDInf', + 'Aos Serviços de Documentação e Informação compete gerir os recursos de informação cientifico-técnica e de cariz pedagógico, a documentação administrativa e os recursos patrimoniais de componente cultural, científica ou tecnológica, numa abordagem teórica e funcional que integram a Biblioteconomia, Arquivologia e Museologia, dando centralidade ao documento, à informação e ao seu uso e gestão em contexto organizacional. Os SDI integram as unidades de Arquivo, Biblioteca, Museu e Serviços Eletrónicos, com missões, recursos e pessoal específicos mas numa prática integradora onde as novas tecnologias de criação, armazenamento, difusão e comunicação da informação ganham um papel relevante.' + , '08:30', '19:30'), + + Service(3, 'SICC', + ' Os Serviços de Imagem, Comunicação e Cooperação têm por missão construir relações de confiança e uma reputação institucional excelente, e valorizar o conhecimento e cultivar o talento da comunidade intercultural e global da FEUP.', + '9:30-13:00', '14:00-17:00'), + + Service(4, 'SRH', + 'Os Serviços de Recursos Humanos tem como missão o recrutamento, a selecção e a integração, a gestão e o desenvolvimento dos recursos humanos da FEUP.', + '10:00-12:00', '14:30-16:30'), + + Service(5, 'SEF', + 'Os SEF têm como Missão assegurar a atividade económica e financeira da FEUP, de acordo com as instruções tutelares e as diretivas dos Órgãos de Gestão.', + '9:00', '16:00'), + + Service(6, 'STMA', + 'Gestão e manutenção dos espaços e dos equipamentos da Escola, de modo a garantir as melhores condições para o ensino de excelência na área das engenharias.', + '09:00-12:30', '14:00-17:30') + + ]; + } + +} \ No newline at end of file diff --git a/src/lib/view/Pages/services_page_view.dart b/src/lib/view/Pages/services_page_view.dart index 342224d..050c695 100644 --- a/src/lib/view/Pages/services_page_view.dart +++ b/src/lib/view/Pages/services_page_view.dart @@ -3,45 +3,43 @@ import 'package:uni/model/app_state.dart'; import 'package:uni/model/entities/exam.dart'; import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; +import 'package:uni/model/entities/service.dart'; +import 'package:uni/utils/serviceMock.dart'; import 'package:uni/view/Pages/secondary_page_view.dart'; -import 'package:uni/view/Widgets/exam_page_title_filter.dart'; +import 'package:uni/view/Widgets/Service_page_filter.dart'; import 'package:uni/view/Widgets/row_container.dart'; import 'package:uni/view/Widgets/schedule_row.dart'; import 'package:uni/view/Widgets/title_card.dart'; + class ServicePageView extends StatefulWidget { @override - State createState() => ExamsPageViewState(); + State createState() => SericesPageViewState(); } -/// Tracks the state of `ExamsLists`. -class ExamsPageViewState extends SecondaryPageViewState { +/// Tracks the state of `ServicesLists`. +class SericesPageViewState extends SecondaryPageViewState { final double borderRadius = 10.0; @override Widget getBody(BuildContext context) { return StoreConnector>( converter: (store) { - final List exams = store.state.content['exams']; - final Map filteredExams = - store.state.content['filteredExams']; - return exams - .where((exam) => - filteredExams[Exam.getExamTypeLong(exam.examType)] ?? true) - .toList(); + + }, - builder: (context, exams) { - return ExamsList(exams: exams); + builder: (context, services) { + return ServiceList( services: ServiceMock.getServices()); }, ); } } -/// Manages the 'Exams' section in the user's personal area and 'Exams Map'. -class ExamsList extends StatelessWidget { - final List exams; +/// Manages the 'Service' section in the user's personal area and 'Exams Map'. +class ServiceList extends StatelessWidget { + final List services; - ExamsList({Key key, @required this.exams}) : super(key: key); + ServiceList({Key key, @required this.services}) : super(key: key); @override Widget build(BuildContext context) { return ListView( @@ -49,89 +47,59 @@ class ExamsList extends StatelessWidget { Container( child: Column( mainAxisSize: MainAxisSize.max, - children: this.createExamsColumn(context, exams), + children: this.createServiceColumn(context, services) ), ) ], ); } - /// Creates a column with all the user's exams. - List createExamsColumn(context, exams) { + List createServiceColumn(context, services) { final List columns = []; - columns.add(ExamPageTitleFilter( + columns.add(ServicePageTitleFilter( name: 'Serviços', )); - if (exams.length == 1) { - columns.add(this.createExamCard(context, [exams[0]])); - return columns; - } - final List currentDayExams = []; - - for (int i = 0; i < exams.length; i++) { - if (i + 1 >= exams.length) { - if (exams[i].day == exams[i - 1].day && - exams[i].month == exams[i - 1].month) { - currentDayExams.add(exams[i]); - } else { - if (currentDayExams.isNotEmpty) { - columns.add(this.createExamCard(context, currentDayExams)); - } - currentDayExams.clear(); - currentDayExams.add(exams[i]); - } - columns.add(this.createExamCard(context, currentDayExams)); - break; - } - if (exams[i].day == exams[i + 1].day && - exams[i].month == exams[i + 1].month) { - currentDayExams.add(exams[i]); - } else { - currentDayExams.add(exams[i]); - columns.add(this.createExamCard(context, currentDayExams)); - currentDayExams.clear(); - } - } + columns.add(this.createServiceCard(context, services)); return columns; } - Widget createExamCard(context, exams) { - final keyValue = exams.map((exam) => exam.toString()).join(); + Widget createServiceCard(context, services) { + final keyValue = services.map((service) => service.toString()).join(); return Container( key: Key(keyValue), margin: EdgeInsets.only(bottom: 8), padding: EdgeInsets.all(8), - child: this.createExamsCards(context, exams), + child: this.createServicesCards(context, services), ); } - Widget createExamsCards(context, exams) { - final List examCards = []; - examCards.add(TitleCard( - day: exams[0].day, weekDay: exams[0].weekDay, month: exams[0].month)); - for (int i = 0; i < exams.length; i++) { - examCards.add(this.createExamContext(context, exams[i])); + Widget createServicesCards(context, services) { + final List serviceCards = []; + for (int i = 0; i < services.length; i++) { + serviceCards.add(this.createServiceContext(context, services[i])); } - return Column(children: examCards); + return Column(children: serviceCards); } - Widget createExamContext(context, exam) { - final keyValue = '${exam.toString()}-exam'; + Widget createServiceContext(context, service) { + final keyValue = '${service.toString()}-service'; return Container( key: Key(keyValue), margin: EdgeInsets.fromLTRB(12, 4, 12, 0), child: RowContainer( - color: isHighlighted(exam) - ? Theme.of(context).hintColor - : Theme.of(context).backgroundColor, + color: Theme.of(context).backgroundColor, child: ScheduleRow( - subject: exam.subject, - rooms: exam.rooms, - begin: exam.begin, - end: exam.end, - type: exam.examType, - date: exam.date))); + subject: service.name, + rooms: [''], + begin: service.startTime, + end: service.endTime))); } -} \ No newline at end of file + + +} + +//////////////////////////////////////////////////////////////////////////////////////// + + diff --git a/src/lib/view/Widgets/Service_page_filter.dart b/src/lib/view/Widgets/Service_page_filter.dart new file mode 100644 index 0000000..bb39afd --- /dev/null +++ b/src/lib/view/Widgets/Service_page_filter.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:uni/view/Widgets/exam_filter_menu.dart'; + +class ServicePageTitleFilter extends StatelessWidget { + final String name; + + const ServicePageTitleFilter({Key key, @required this.name}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.fromLTRB(20, 20, 20, 10), + alignment: Alignment.center, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + name, + style: + Theme.of(context).textTheme.headline6.apply(fontSizeDelta: 7), + ), + ], + ), + ); + } +} diff --git a/src/test_driver/features/login.feature b/src/test_driver/features/login.feature index 52053f7..607477a 100644 --- a/src/test_driver/features/login.feature +++ b/src/test_driver/features/login.feature @@ -34,7 +34,7 @@ Feature: Open pages Scenario: login and access the "Serviços" page When I fill the "usernameinput" field with "up123456789" - And I fill the "passwordinput" field with "123456789" + And I fill the "passwordinput" field with "12345679" And I tap the "entrar" button And I open the drawer And I tap the "key_Serviços" button @@ -71,3 +71,18 @@ Feature: Open pages And I pause for 1 seconds Then I expect the text "Texto 1" to be absent + Scenario: login and access the "Serviços" page and see the "SERAC" panel + When I fill the "usernameinput" field with "up123456789" + And I fill the "passwordinput" field with "12345679" + And I tap the "entrar" button + And I open the drawer + And I tap the "key_Serviços" button + Then I expect the text "SERAC" to be present + + Scenario: login and access the "Serviços" page and see the "SDInf" panel + When I fill the "usernameinput" field with "up123456789" + And I fill the "passwordinput" field with "12345679" + And I tap the "entrar" button + And I open the drawer + And I tap the "key_Serviços" button + Then I expect the text "SDInf" to be present