visitor password api

This commit is contained in:
mohammad
2024-08-20 10:44:15 +03:00
parent 5b9a6197e6
commit 0cf5053f8b
8 changed files with 170 additions and 17 deletions

View File

@ -59,8 +59,8 @@ class MyApp extends StatelessWidget {
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), // Set up color scheme colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), // Set up color scheme
useMaterial3: true, // Enable Material 3 useMaterial3: true, // Enable Material 3
), ),
home: VisitorPasswordDialog() // home: VisitorPasswordDialog()
// home:isLoggedIn == 'Success' ? const HomePage() : const LoginPage(), home:isLoggedIn == 'Success' ? const HomePage() : const LoginPage(),
)); ));
} }
} }

View File

@ -234,7 +234,7 @@ class AccessManagementPage extends StatelessWidget {
), ),
Expanded( Expanded(
child: state is TableLoaded child: state is TableLoaded
? DynamicTable( ? DynamicTable(
withCheckBox: false, withCheckBox: false,
size: size, size: size,
// cellDecoration: containerDecoration, // cellDecoration: containerDecoration,

View File

@ -10,6 +10,7 @@ import 'package:syncrow_web/pages/visitor_password/model/schedule_model.dart';
import 'package:syncrow_web/services/access_mang_api.dart'; import 'package:syncrow_web/services/access_mang_api.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/snack_bar.dart'; import 'package:syncrow_web/utils/snack_bar.dart';
List<String> selectedDevices = [];
// Define the BLoC // Define the BLoC
class VisitorPasswordBloc class VisitorPasswordBloc
@ -17,14 +18,18 @@ class VisitorPasswordBloc
VisitorPasswordBloc() : super(VisitorPasswordInitial()) { VisitorPasswordBloc() : super(VisitorPasswordInitial()) {
on<SelectUsageFrequency>(selectUsageFrequency); on<SelectUsageFrequency>(selectUsageFrequency);
on<FetchDevice>(_onFetchDevice); on<FetchDevice>(_onFetchDevice);
on<SelectPasswordType>(selectAccessType); on<SelectPasswordType>(selectAccessType);
on<SelectTimeVisitorPassword>(selectTimeVisitorPassword); on<SelectTimeVisitorPassword>(selectTimeVisitorPassword);
on<ToggleRepeatEvent>(toggleRepeat); on<ToggleRepeatEvent>(toggleRepeat);
on<ToggleDaySelectionEvent>(toggleDaySelection); on<ToggleDaySelectionEvent>(toggleDaySelection);
on<SelectDeviceEvent>(selectDevice); on<SelectDeviceEvent>(selectDevice);
on<OnlineOneTimePasswordEvent>(postOnlineOneTimePassword); on<OnlineOneTimePasswordEvent>(postOnlineOneTimePassword);
on<OnlineMultipleTimePasswordEvent>(postOnlineMultipleTimePassword); on<OnlineMultipleTimePasswordEvent>(postOnlineMultipleTimePassword);
on<OfflineMultipleTimePasswordEvent>(postOfflineMultipleTimePassword);
on<OfflineOneTimePasswordEvent>(postOfflineOneTimePassword);
} }
final TextEditingController userNameController = TextEditingController(); final TextEditingController userNameController = TextEditingController();
final TextEditingController emailController = TextEditingController(); final TextEditingController emailController = TextEditingController();
@ -35,7 +40,10 @@ class VisitorPasswordBloc
final TextEditingController virtualAddressController = TextEditingController(); final TextEditingController virtualAddressController = TextEditingController();
List<DeviceModel> data = []; List<DeviceModel> data = [];
List<String> selectedDeviceIds = ['909e052c-6934-48f3-b22d-67ee04ad7265']; List<String> selectedDeviceIds = [];
final forgetFormKey = GlobalKey<FormState>(); final forgetFormKey = GlobalKey<FormState>();
String accessTypeSelected = 'Online Password'; String accessTypeSelected = 'Online Password';
@ -191,20 +199,24 @@ class VisitorPasswordBloc
} }
} }
//online password
Future<void> postOnlineOneTimePassword( Future<void> postOnlineOneTimePassword(
OnlineOneTimePasswordEvent event, OnlineOneTimePasswordEvent event,
Emitter<VisitorPasswordState> emit) async { Emitter<VisitorPasswordState> emit) async {
try { try {
print('selectedDevices$selectedDevices');
// emit(DeviceLoaded()); // emit(DeviceLoaded());
await AccessMangApi().postOnlineOneTime( await AccessMangApi().postOnlineOneTime(
email: event.email, email: event.email,
devicesUuid: selectedDeviceIds, devicesUuid: selectedDevices,
passwordName: event.passwordName); passwordName: event.passwordName);
// emit(TableLoaded(data)); // emit(TableLoaded(data));
} catch (e) { } catch (e) {
emit(FailedState(e.toString())); emit(FailedState(e.toString()));
} }
} }
Future<void> postOnlineMultipleTimePassword( Future<void> postOnlineMultipleTimePassword(
OnlineMultipleTimePasswordEvent event, OnlineMultipleTimePasswordEvent event,
Emitter<VisitorPasswordState> emit) async { Emitter<VisitorPasswordState> emit) async {
@ -224,7 +236,7 @@ class VisitorPasswordBloc
invalidTime:event.invalidTime , invalidTime:event.invalidTime ,
effectiveTime:event.effectiveTime , effectiveTime:event.effectiveTime ,
email: event.email, email: event.email,
devicesUuid: selectedDeviceIds, devicesUuid: selectedDevices,
passwordName: event.passwordName passwordName: event.passwordName
); );
// emit(TableLoaded(data)); // emit(TableLoaded(data));
@ -233,6 +245,45 @@ class VisitorPasswordBloc
} }
} }
//offline password
Future<void> postOfflineOneTimePassword(
OfflineOneTimePasswordEvent event,
Emitter<VisitorPasswordState> emit) async {
try {
generate7DigitNumber();
// emit(DeviceLoaded());
await AccessMangApi().postOffLineOneTime(
email: event.email,
devicesUuid: selectedDevices,
passwordName: event.passwordName
);
// emit(TableLoaded(data));
} catch (e) {
emit(FailedState(e.toString()));
}
}
Future<void> postOfflineMultipleTimePassword(
OfflineMultipleTimePasswordEvent event,
Emitter<VisitorPasswordState> emit) async {
try {
generate7DigitNumber();
// emit(DeviceLoaded());
await AccessMangApi().postOffLineMultipleTime(
email: event.email,
devicesUuid: selectedDevices,
passwordName: event.passwordName,
invalidTime:event.invalidTime ,
effectiveTime:event.effectiveTime
);
// emit(TableLoaded(data));
} catch (e) {
emit(FailedState(e.toString()));
}
}
void selectDevice( void selectDevice(
SelectDeviceEvent event, Emitter<VisitorPasswordState> emit) { SelectDeviceEvent event, Emitter<VisitorPasswordState> emit) {
if (selectedDeviceIds.contains(event.deviceId)) { if (selectedDeviceIds.contains(event.deviceId)) {
@ -240,7 +291,8 @@ class VisitorPasswordBloc
} else { } else {
selectedDeviceIds.add(event.deviceId); selectedDeviceIds.add(event.deviceId);
} }
print(selectedDeviceIds); selectedDevices=selectedDeviceIds;
print(selectedDevices);
} }
String? validate(String? value) { String? validate(String? value) {

View File

@ -51,6 +51,7 @@ class GeneratePasswordEvent extends VisitorPasswordEvent {}
class FetchDevice extends VisitorPasswordEvent {} class FetchDevice extends VisitorPasswordEvent {}
//online password
class OnlineOneTimePasswordEvent extends VisitorPasswordEvent { class OnlineOneTimePasswordEvent extends VisitorPasswordEvent {
final String? email; final String? email;
final String? passwordName; final String? passwordName;
@ -65,13 +66,33 @@ class OnlineMultipleTimePasswordEvent extends VisitorPasswordEvent {
final String? passwordName; final String? passwordName;
final String? invalidTime; final String? invalidTime;
final String? effectiveTime; final String? effectiveTime;
const OnlineMultipleTimePasswordEvent({this.email,this.passwordName,this.invalidTime,this.effectiveTime}); const OnlineMultipleTimePasswordEvent({this.email,this.passwordName,this.invalidTime,this.effectiveTime});
@override
List<Object> get props => [email!,passwordName!,invalidTime!,effectiveTime!];
}
//offline password
class OfflineOneTimePasswordEvent extends VisitorPasswordEvent {
final String? email;
final String? passwordName;
const OfflineOneTimePasswordEvent({this.email,this.passwordName});
@override
List<Object> get props => [email!,passwordName!,];
}
class OfflineMultipleTimePasswordEvent extends VisitorPasswordEvent {
final String? email;
final String? passwordName;
final String? invalidTime;
final String? effectiveTime;
const OfflineMultipleTimePasswordEvent({this.email,this.passwordName,this.invalidTime,this.effectiveTime});
@override @override
List<Object> get props => [email!,passwordName!,invalidTime!,effectiveTime!]; List<Object> get props => [email!,passwordName!,invalidTime!,effectiveTime!];
} }
class SelectDeviceEvent extends VisitorPasswordEvent { class SelectDeviceEvent extends VisitorPasswordEvent {
final String deviceId; final String deviceId;
const SelectDeviceEvent(this.deviceId); const SelectDeviceEvent(this.deviceId);

View File

@ -2,6 +2,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_web/pages/common/custom_table.dart';
import 'package:syncrow_web/pages/common/custom_web_textfield.dart'; import 'package:syncrow_web/pages/common/custom_web_textfield.dart';
import 'package:syncrow_web/pages/common/default_button.dart'; import 'package:syncrow_web/pages/common/default_button.dart';
import 'package:syncrow_web/pages/visitor_password/bloc/visitor_password_bloc.dart'; import 'package:syncrow_web/pages/visitor_password/bloc/visitor_password_bloc.dart';
@ -10,7 +11,6 @@ import 'package:syncrow_web/pages/visitor_password/bloc/visitor_password_state.d
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/style.dart'; import 'package:syncrow_web/utils/style.dart';
import '../../common/custom_table.dart';
class AddDeviceDialog extends StatelessWidget { class AddDeviceDialog extends StatelessWidget {
@ -155,7 +155,7 @@ class AddDeviceDialog extends StatelessWidget {
} }
}, },
onRowCheckboxChanged: (index, isSelected) { onRowCheckboxChanged: (index, isSelected) {
final deviceId = state.data[index].uuid; // Adjust as per your actual data structure final deviceId = state.data[index].uuid;
visitorBloc.add(SelectDeviceEvent(deviceId)); visitorBloc.add(SelectDeviceEvent(deviceId));
}, },
withCheckBox: true, withCheckBox: true,

View File

@ -308,8 +308,15 @@ class VisitorPasswordDialog extends StatelessWidget {
) )
); );
} }
else if(visitorBloc.usageFrequencySelected=='Periodic'&&visitorBloc.accessTypeSelected=='Online Password') { else if(visitorBloc.usageFrequencySelected=='One-Time'&&visitorBloc.accessTypeSelected=='Offline Password') {
visitorBloc.add(OnlineMultipleTimePasswordEvent( visitorBloc.add(OfflineOneTimePasswordEvent(
passwordName:visitorBloc.userNameController.text ,
email: visitorBloc.emailController.text,
)
);
}
else if(visitorBloc.usageFrequencySelected=='Periodic'&&visitorBloc.accessTypeSelected=='Offline Password') {
visitorBloc.add(OfflineMultipleTimePasswordEvent(
passwordName:visitorBloc.userNameController.text , passwordName:visitorBloc.userNameController.text ,
email: visitorBloc.emailController.text, email: visitorBloc.emailController.text,
effectiveTime:visitorBloc.effectiveTimeTimeStamp.toString() , effectiveTime:visitorBloc.effectiveTimeTimeStamp.toString() ,

View File

@ -63,7 +63,7 @@ class AccessMangApi{
}'); }');
final response = await HTTPService().post( final response = await HTTPService().post(
path: ApiEndpoints.sendOfflineOneTime, path: ApiEndpoints.sendOnlineOneTime,
body: jsonEncode({ body: jsonEncode({
"email": email, "email": email,
"passwordName": passwordName, "passwordName": passwordName,
@ -106,7 +106,7 @@ class AccessMangApi{
print('createPassword =$body'); print('createPassword =$body');
final response = await HTTPService().post( final response = await HTTPService().post(
path: ApiEndpoints.sendOfflineMultipleTime, path: ApiEndpoints.sendOnlineMultipleTime,
body: jsonEncode(body), body: jsonEncode(body),
showServerMessage: true, showServerMessage: true,
expectedResponseModel: (json) { expectedResponseModel: (json) {
@ -121,7 +121,76 @@ class AccessMangApi{
} }
} }
// OffLine One Time Password
Future postOffLineOneTime({String? email,String? passwordName,List<String>? devicesUuid}) async {
try {
print('postOfflineOneTime List: ${
{
"email": email,
"passwordName": passwordName,
"devicesUuid": devicesUuid
}
}');
final response = await HTTPService().post(
path: ApiEndpoints.sendOffLineOneTime,
body: jsonEncode({
"email": email,
"passwordName": passwordName,
"devicesUuid": devicesUuid
}),
showServerMessage: true,
expectedResponseModel: (json) {
List<dynamic> jsonData = json;
print('postOfflineOneTime List: $json');
},
);
return response;
} catch (e) {
debugPrint('Error fetching $e');
return [];
}
}
Future postOffLineMultipleTime({
String? email,
String? passwordName,
String? effectiveTime,
String? invalidTime,
List<String>? devicesUuid
}) async {
try {
print('postOfflineOneTime List: ${
{
"email": email,
"passwordName": passwordName,
"devicesUuid": devicesUuid
}
}');
final response = await HTTPService().post(
path: ApiEndpoints.sendOffLineOneTime,
body: jsonEncode({
"email": email,
"devicesUuid":devicesUuid,
"passwordName": passwordName,
"effectiveTime": effectiveTime,
"invalidTime": invalidTime
}),
showServerMessage: true,
expectedResponseModel: (json) {
List<dynamic> jsonData = json;
print('postOfflineOneTime List: $json');
},
);
return response;
} catch (e) {
debugPrint('Error fetching $e');
return [];
}
}
} }

View File

@ -13,8 +13,12 @@ abstract class ApiEndpoints {
static const String getDevices = '$baseUrl/visitor-password/devices'; static const String getDevices = '$baseUrl/visitor-password/devices';
static const String sendOfflineOneTime = '$baseUrl/visitor-password/temporary-password/online/one-time'; static const String sendOnlineOneTime = '$baseUrl/visitor-password/temporary-password/online/one-time';
static const String sendOfflineMultipleTime = '$baseUrl/visitor-password/temporary-password/online/multiple-time'; static const String sendOnlineMultipleTime = '$baseUrl/visitor-password/temporary-password/online/multiple-time';
//offline Password
static const String sendOffLineOneTime = '$baseUrl/visitor-password/temporary-password/offline/one-time';
static const String sendOffLineMultipleTime = '$baseUrl/visitor-password/temporary-password/offline/multiple-time';
static const String getUser = '$baseUrl/user/{userUuid}'; static const String getUser = '$baseUrl/user/{userUuid}';