Skip to content

Commit

Permalink
Merge pull request #154 from Nesteo/inspection-sender
Browse files Browse the repository at this point in the history
Inspection sender
  • Loading branch information
SimonOyen authored Nov 23, 2019
2 parents 80e23d3 + e67b98f commit 7e56927
Show file tree
Hide file tree
Showing 13 changed files with 554 additions and 245 deletions.
17 changes: 17 additions & 0 deletions lib/backend/repositories/inspections_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,21 @@ class InspectionsRepository {
return null;
}
}

Future<Inspection> addNewInspection(Inspection inspection) async {
InspectionsApiService _inspectionsApi =
InspectionsApiService.create(_authBloc.domain);
var inspectionString = json.encode(inspection);
print(inspectionString);
final response = await _inspectionsApi.postNewInspection(
inspectionString, _authBloc.auth);
print(response.statusCode);
print(response.body);
if (response.statusCode == 201) {
final Map result = json.decode(response.body);
return Inspection.fromJson(result);
} else {
return null;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions lib/backend/services/inspections/inspections_api_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ abstract class InspectionsApiService extends ChopperService {
@Header('Authorization') String authHeader,
]);

@Post(headers: {'Content-Type': 'application/json'})
Future<Response> postNewInspection(
@Body() String inspection,
@Header('Authorization') String authHeader,
);

static InspectionsApiService create(String url) {
final client = ChopperClient(
baseUrl: 'https://$url/api/v1',
Expand Down
3 changes: 3 additions & 0 deletions lib/blocs/inspectionsender_bloc/inspectionsender.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export 'inspectionsender_bloc.dart';
export 'inspectionsender_event.dart';
export 'inspectionsender_state.dart';
69 changes: 69 additions & 0 deletions lib/blocs/inspectionsender_bloc/inspectionsender_bloc.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:nesteo_app/backend/repositories/auth_repository.dart';
import 'package:nesteo_app/backend/repositories/nestingboxes_repository.dart';
import 'package:nesteo_app/backend/repositories/inspections_repository.dart';
import 'package:nesteo_app/blocs/boxdata_bloc/boxdata.dart';
import 'package:nesteo_app/model/inspection.dart';
import 'package:nesteo_app/model/nestingbox.dart';
import 'package:nesteo_app/model/owner.dart';
import 'package:nesteo_app/model/region.dart';
import 'package:nesteo_app/model/species.dart';
import 'package:nesteo_app/model/user.dart';
import './inspectionsender.dart';

class InspectionSenderBloc
extends Bloc<InspectionSenderEvent, InspectionSenderState> {
@override
InspectionSenderState get initialState => WaitingForSend();

@override
Stream<InspectionSenderState> mapEventToState(
InspectionSenderEvent event,
) async* {
if (event is SendInspectionEvent && state is WaitingForSend) {
yield SendingInspectionState();
var inspRepo = InspectionsRepository(event.authBloc);
var authRepo = AuthRepository(event.authBloc);

User user = await authRepo.getAuth();

Inspection response = await inspRepo.addNewInspection(
Inspection(
ageInDays: event.ageInDays,
chickCount: event.chickCount,
comment: event.comment,
condition: event.condition,
containsEggs: event.containsEggs,
eggCount: event.eggCount,
femaleParentBirdDiscovery: event.femaleParent,
maleParentBirdDiscovery: event.maleParent,
hasBeenCleaned: event.cleaned,
inspectedByUser: user,
id: null,
inspectionDate: event.inspectionDate,
justRepaired: event.repaired,
nestingBox: event.nestingBox,
nestingBoxId: event.nestingBox.id,
occupied: event.occupied,
ringedChickCount: event.ringedChickCount,
species: (event.speciesString != null)
? Species(id: null, name: event.speciesString)
: event.species,
hasImage: null,
lastUpdated: null,
),
);

if (response != null) {
yield InspectionSentState();
} else {
yield SendErrorState();
}
}
if (event is NewInspectionDoneEvent) {
yield WaitingForSend();
}
}
}
61 changes: 61 additions & 0 deletions lib/blocs/inspectionsender_bloc/inspectionsender_event.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import 'package:equatable/equatable.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:nesteo_app/blocs/authentication_bloc/authentication_bloc.dart';
import 'package:nesteo_app/model/nestingbox.dart';
import 'package:nesteo_app/model/owner.dart';
import 'package:nesteo_app/model/region.dart';
import 'package:nesteo_app/model/species.dart';

abstract class InspectionSenderEvent extends Equatable {
const InspectionSenderEvent();
}

class NewInspectionDoneEvent extends InspectionSenderEvent {
@override
List<Object> get props => null;
}

class SendInspectionEvent extends InspectionSenderEvent {
final AuthenticationBloc authBloc;
final NestingBox nestingBox;
final String id;
final DateTime inspectionDate;
final String comment;
final bool cleaned;
final bool repaired;
final String condition;
final bool containsEggs;
final int eggCount;
final bool occupied;
final int chickCount;
final int ringedChickCount;
final int ageInDays;
final String femaleParent;
final String maleParent;
final Species species;
final String speciesString;

SendInspectionEvent(
{this.id,
this.nestingBox,
this.authBloc,
this.inspectionDate,
this.comment,
this.cleaned,
this.repaired,
this.condition,
this.containsEggs,
this.eggCount,
this.occupied,
this.chickCount,
this.ringedChickCount,
this.ageInDays,
this.femaleParent,
this.maleParent,
this.species,
this.speciesString})
: super();

@override
List<Object> get props => null;
}
28 changes: 28 additions & 0 deletions lib/blocs/inspectionsender_bloc/inspectionsender_state.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import 'package:equatable/equatable.dart';

abstract class InspectionSenderState extends Equatable {
const InspectionSenderState();
}

class WaitingForSend extends InspectionSenderState {
@override
List<Object> get props => [];
}

class SendingInspectionState extends InspectionSenderState {
@override
// TODO: implement props
List<Object> get props => null;
}

class InspectionSentState extends InspectionSenderState {
@override
// TODO: implement props
List<Object> get props => null;
}

class SendErrorState extends InspectionSenderState {
@override
// TODO: implement props
List<Object> get props => null;
}
4 changes: 4 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:nesteo_app/blocs/authentication_bloc/authentication_bloc.dart';
import 'package:nesteo_app/blocs/authentication_bloc/authentication_event.dart';
import 'package:nesteo_app/blocs/boxsender_bloc/boxsender.dart';
import 'package:nesteo_app/blocs/dropdown_bloc/dropdown_bloc.dart';
import 'package:nesteo_app/blocs/inspectionsender_bloc/inspectionsender_bloc.dart';
import 'package:nesteo_app/blocs/mapcontrol_bloc/mapcontrol.dart';
import 'package:nesteo_app/blocs/pagecontrol_bloc/pagecontrol.dart';
import 'package:nesteo_app/blocs/snackbar_bloc/snackbar.dart';
Expand Down Expand Up @@ -55,6 +56,9 @@ class MyApp extends StatelessWidget {
BlocProvider<BoxSenderBloc>(
builder: (BuildContext context) => BoxSenderBloc(),
),
BlocProvider<InspectionSenderBloc>(
builder: (BuildContext context) => InspectionSenderBloc(),
),
BlocProvider<DropdownBloc>(
builder: (BuildContext context) => DropdownBloc(),
),
Expand Down
6 changes: 6 additions & 0 deletions lib/screens/boxinfo_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import 'package:nesteo_app/blocs/inspectiondata_bloc/inspectiondata.dart';
import 'package:nesteo_app/model/nestingbox.dart';
import 'package:nesteo_app/screens/nesteo_screen.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:nesteo_app/blocs/dropdown_bloc/dropdown.dart';
import 'package:nesteo_app/blocs/authentication_bloc/authentication.dart';
import 'package:nesteo_app/blocs/pagecontrol_bloc/pagecontrol.dart';
import 'package:nesteo_app/generated/locale_base.dart';
import 'package:nesteo_app/blocs/snackbar_bloc/snackbar.dart';
Expand Down Expand Up @@ -55,6 +57,10 @@ class BoxInfoScreen extends NesteoFullScreen {
label: Text(loc.boxInfo.newInspection,
style: TextStyle(fontSize: 16)),
onPressed: () {
BlocProvider.of<DropdownBloc>(context).add(
UpdateSpeciesEvent(
authBloc:
BlocProvider.of<AuthenticationBloc>(context)));
pageControlBloc.add(GoToNewInspectionEvent());
},
),
Expand Down
7 changes: 5 additions & 2 deletions lib/screens/boxlist_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:nesteo_app/blocs/boxdata_bloc/boxdata.dart';
import 'package:nesteo_app/blocs/mapcontrol_bloc/mapcontrol.dart';
import 'package:nesteo_app/blocs/pagecontrol_bloc/pagecontrol.dart';
import 'package:nesteo_app/blocs/snackbar_bloc/snackbar.dart';
import 'package:nesteo_app/blocs/dropdown_bloc/dropdown.dart';
import 'package:nesteo_app/blocs/authentication_bloc/authentication.dart';
import 'package:nesteo_app/screens/nesteo_screen.dart';
import 'package:nesteo_app/generated/locale_base.dart';

Expand All @@ -18,6 +19,8 @@ class BoxListScreen extends NesteoFramedScreen {
appBarLeading: null,
floatingActionButton: FloatingActionButton(
onPressed: () {
BlocProvider.of<DropdownBloc>(context).add(UpdateAllEvent(
authBloc: BlocProvider.of<AuthenticationBloc>(context)));
BlocProvider.of<PageControlBloc>(context).add(GoToNewBoxEvent());
},
child: Icon(Icons.add),
Expand Down Expand Up @@ -73,7 +76,7 @@ class BoxListScreen extends NesteoFramedScreen {
color: Color.lerp(
Colors.white,
Colors.red,
log(daysSinceLastInspection / 330),
log((daysSinceLastInspection + 1) / 330),
),
child: ListTile(
leading: (daysSinceLastInspection > 300)
Expand Down
8 changes: 5 additions & 3 deletions lib/screens/login_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,11 @@ class _LoginScreenDataState extends State<LoginScreenData> {
: state is NotAuthenticatedState
? Colors.red
: Colors.green,
onPressed: () {
authBloc.add(CheckNewAuthenticationEvent());
},
onPressed: (state is AuthenticatingState)
? null
: () {
authBloc.add(CheckNewAuthenticationEvent());
},
child: Text(
loc.login.logInButton,
style: TextStyle(
Expand Down
Loading

0 comments on commit 7e56927

Please sign in to comment.