build_app
This commit is contained in:
parent
a520fdf4bb
commit
272d0b5609
6
testflutterbug01-dbtdt-d/authsec_mysql/mysql/wf_table/wf_table.sql
Executable file
6
testflutterbug01-dbtdt-d/authsec_mysql/mysql/wf_table/wf_table.sql
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
CREATE TABLE dbtdt.Testbug(id BIGINT NOT NULL AUTO_INCREMENT, select_dynamic_mul VARCHAR(400), onetoone VARCHAR(400), select_autocomp int, select_autcomp_mul VARCHAR(400), fileupload_fields VARCHAR(400), bar_code VARCHAR(400), qr_code VARCHAR(400), value_list_fieldcc VARCHAR(400), datagrid_fieldv VARCHAR(400), select_dyanamic int, name VARCHAR(400), PRIMARY KEY (id));
|
||||||
|
|
||||||
|
CREATE TABLE dbtdt.Child(id BIGINT NOT NULL AUTO_INCREMENT, namek VARCHAR(400), PRIMARY KEY (id));
|
||||||
|
|
||||||
|
CREATE TABLE dbtdt.Testlist(id BIGINT NOT NULL AUTO_INCREMENT, active VARCHAR(400), description VARCHAR(400), name VARCHAR(400), PRIMARY KEY (id));
|
||||||
|
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
import 'dart:typed_data';
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:http_parser/http_parser.dart';
|
||||||
|
import '../../../../resources/api_constants.dart';
|
||||||
|
import '../../../../data/network/base_network_service.dart';
|
||||||
|
import '../../../../data/network/network_api_service.dart';
|
||||||
|
|
||||||
|
class ChildApiService {
|
||||||
|
final String baseUrl = ApiConstants.baseUrl;
|
||||||
|
|
||||||
|
final BaseNetworkService _helper = NetworkApiService();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future<List<Map<String, dynamic>>> getEntities() async {
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await _helper.getGetApiResponse('$baseUrl/Child/Child');
|
||||||
|
final entities = (response as List).cast<Map<String, dynamic>>();
|
||||||
|
return entities;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all entities: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Future<List<Map<String, dynamic>>> getAllWithPagination(
|
||||||
|
int page, int size) async {
|
||||||
|
try {
|
||||||
|
final response =
|
||||||
|
await _helper.getGetApiResponse('$baseUrl/Child/Child/getall/page?page=$page&size=$size');
|
||||||
|
final entities =
|
||||||
|
(response['content'] as List).cast<Map<String, dynamic>>();
|
||||||
|
return entities;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all without pagination: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Future<Map<String, dynamic>> createEntity(
|
||||||
|
Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
print("in post api$entity");
|
||||||
|
final response =
|
||||||
|
await _helper.getPostApiResponse('$baseUrl/Child/Child', entity);
|
||||||
|
|
||||||
|
print(entity);
|
||||||
|
|
||||||
|
// Assuming the response is a Map<String, dynamic>
|
||||||
|
Map<String, dynamic> responseData = response;
|
||||||
|
|
||||||
|
return responseData;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to create entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future<void> updateEntity( int entityId, Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
await _helper.getPutApiResponse('$baseUrl/Child/Child/$entityId',
|
||||||
|
entity); print(entity);
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to update entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> deleteEntity( int entityId) async {
|
||||||
|
try {
|
||||||
|
await _helper.getDeleteApiResponse('$baseUrl/Child/Child/$entityId');
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to delete entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,78 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../Child_viewModel/Child_view_model_screen.dart';
|
||||||
|
import 'Child_fields.dart';import 'package:base_project/BuilderField/shared/ui/entity_screens.dart';
|
||||||
|
import '../../../../utils/image_constant.dart';
|
||||||
|
import '../../../../utils/size_utils.dart';
|
||||||
|
import '../../../../theme/app_style.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_image.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_title.dart';
|
||||||
|
import '../../../../widgets/app_bar/custom_app_bar.dart';
|
||||||
|
import '../../../../widgets/custom_button.dart';
|
||||||
|
import '../../../../widgets/custom_text_form_field.dart';
|
||||||
|
import '../../../../widgets/custom_dropdown_field.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
import 'package:barcode_widget/barcode_widget.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
import 'package:autocomplete_textfield/autocomplete_textfield.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_picker_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_time_picker_field.dart'
|
||||||
|
;import 'package:multi_select_flutter/multi_select_flutter.dart';
|
||||||
|
import 'package:just_audio/just_audio.dart';
|
||||||
|
import 'package:video_player/video_player.dart';
|
||||||
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
|
import 'package:lottie/lottie.dart';
|
||||||
|
import '../../../../utils/toast_messages/toast_message_util.dart';
|
||||||
|
import 'dart:io';
|
||||||
|
import '../../../../Reuseable/reusable_text_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_dropdown_field.dart';
|
||||||
|
|
||||||
|
|
||||||
|
class ChildCreateEntityScreen extends StatefulWidget {
|
||||||
|
const ChildCreateEntityScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ChildCreateEntityScreenState createState() => _ChildCreateEntityScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ChildCreateEntityScreenState extends State<ChildCreateEntityScreen> {
|
||||||
|
|
||||||
|
final Map<String, dynamic> formData = {};
|
||||||
|
final _formKey = GlobalKey<FormState>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<ChildViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
return EntityCreateScreen(
|
||||||
|
fields: ChildFields.getFields(context),
|
||||||
|
onSubmit: (data) => _handleSubmit(data),
|
||||||
|
title: 'Child',
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
errorMessage:
|
||||||
|
viewModel.errorMessage.isNotEmpty ? viewModel.errorMessage : null,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _handleSubmit(Map<String, dynamic> formData) async {
|
||||||
|
final provider =
|
||||||
|
Provider.of<ChildViewModelScreen>(context, listen: false);
|
||||||
|
final success = await provider.createEntity(formData);
|
||||||
|
|
||||||
|
if (success && mounted) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,86 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../../../../BuilderField/shared/ui/entity_details.dart';
|
||||||
|
import '../Child_viewModel/Child_view_model_screen.dart';
|
||||||
|
import 'Child_update_entity_screen.dart';
|
||||||
|
|
||||||
|
class ChildDetailsScreen extends StatefulWidget {
|
||||||
|
final Map<String, dynamic> entity;
|
||||||
|
|
||||||
|
const ChildDetailsScreen({
|
||||||
|
super.key,
|
||||||
|
required this.entity,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ChildDetailsScreen> createState() => _ChildDetailsScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ChildDetailsScreenState extends State<ChildDetailsScreen> {
|
||||||
|
void _navigateToUpdateScreen(Map<String, dynamic> entity) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => ChildViewModelScreen(),
|
||||||
|
child: ChildUpdateEntityScreen(entity: entity),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).then((_) {
|
||||||
|
// Refresh the details screen with updated data
|
||||||
|
setState(() {});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showDeleteDialog(Map<String, dynamic> entity) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: const Text('Confirm Deletion'),
|
||||||
|
content: const Text('Are you sure you want to delete this Child?'),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Cancel'),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Delete'),
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
final vm =
|
||||||
|
Provider.of<ChildViewModelScreen>(context, listen: false);
|
||||||
|
final success = await vm.deleteEntity(entity['id']);
|
||||||
|
if (success && mounted) {
|
||||||
|
Navigator.pop(context); // Go back to list
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<ChildViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
return EntityDetails(
|
||||||
|
entity: widget.entity,
|
||||||
|
onEdit: (entity) => _navigateToUpdateScreen(entity),
|
||||||
|
onDelete: (entity) => _showDeleteDialog(entity),
|
||||||
|
title: 'Child',
|
||||||
|
displayFields: [
|
||||||
|
{'key': 'namek', 'label': 'Namek', 'type': 'text'},
|
||||||
|
|
||||||
|
],
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,146 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/ui/entity_list.dart';
|
||||||
|
import 'Child_create_entity_screen.dart';
|
||||||
|
import 'Child_update_entity_screen.dart';
|
||||||
|
import '../Child_viewModel/Child_view_model_screen.dart';
|
||||||
|
import 'Child_details_screen.dart';import 'package:flutter/services.dart';
|
||||||
|
import 'package:speech_to_text/speech_to_text.dart' as stt;
|
||||||
|
import '../../../../theme/app_style.dart';
|
||||||
|
import '../../../../utils/size_utils.dart';
|
||||||
|
import '../../../../widgets/custom_icon_button.dart';
|
||||||
|
import '../../../../utils/image_constant.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_image.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_title.dart';
|
||||||
|
import '../../../../widgets/app_bar/custom_app_bar.dart';
|
||||||
|
import '../../../../theme/app_decoration.dart';
|
||||||
|
import 'package:multi_select_flutter/multi_select_flutter.dart';
|
||||||
|
import '../../../../Reuseable/reusable_text_field.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../../../../utils/toast_messages/toast_message_util.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
|
||||||
|
class Child_entity_list_screen extends StatefulWidget {
|
||||||
|
static const String routeName = '/entity-list';
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Child_entity_list_screenState createState() => _Child_entity_list_screenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _Child_entity_list_screenState extends State<Child_entity_list_screen> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_loadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _loadData() {
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
|
if (mounted) {
|
||||||
|
final vm = Provider.of<ChildViewModelScreen>(context, listen: false);
|
||||||
|
vm.getAllWithPagination(refresh: true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _navigateToCreateScreen() {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => ChildViewModelScreen(),
|
||||||
|
child: const ChildCreateEntityScreen(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).then((_) {
|
||||||
|
final vm = Provider.of<ChildViewModelScreen>(context, listen: false);
|
||||||
|
vm.refreshData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _navigateToUpdateScreen(Map<String, dynamic> entity) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => ChildViewModelScreen(),
|
||||||
|
child: ChildUpdateEntityScreen(entity: entity),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).then((_) {
|
||||||
|
final vm = Provider.of<ChildViewModelScreen>(context, listen: false);
|
||||||
|
vm.refreshData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _navigateToDetailsScreen(Map<String, dynamic> entity) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => ChildViewModelScreen(),
|
||||||
|
child: ChildDetailsScreen(entity: entity),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showDeleteDialog(Map<String, dynamic> entity) {
|
||||||
|
final parentContext = context;
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: const Text('Confirm Deletion'),
|
||||||
|
content: const Text('Are you sure you want to delete this Child?'),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Cancel'),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Delete'),
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
final vm =
|
||||||
|
Provider.of<ChildViewModelScreen>(parentContext, listen: false);
|
||||||
|
await vm.deleteEntity(entity['id']);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<ChildViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
return EntityList(
|
||||||
|
entities: viewModel.filteredList,
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
errorMessage:
|
||||||
|
viewModel.errorMessage.isNotEmpty ? viewModel.errorMessage : null,
|
||||||
|
hasMoreData: viewModel.hasMoreData,
|
||||||
|
searchQuery: viewModel.searchQuery,
|
||||||
|
onSearchChanged: (query) => viewModel.searchchild(query),
|
||||||
|
onEdit: (entity) => _navigateToUpdateScreen(entity),
|
||||||
|
onDelete: (entity) => _showDeleteDialog(entity),
|
||||||
|
onTap: (entity) => _navigateToDetailsScreen(entity),
|
||||||
|
onRefresh: () => viewModel.refreshData(),
|
||||||
|
onLoadMore: () => viewModel.getAllWithPagination(),
|
||||||
|
title: 'Child',
|
||||||
|
onAddNew: _navigateToCreateScreen,
|
||||||
|
displayFields: [
|
||||||
|
{'key': 'namek', 'label': 'Namek', 'type': 'text'},
|
||||||
|
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
import 'package:base_project/BuilderField/shared/fields/number_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/password_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/phone_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/custom_text_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/base_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/date_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/datetime_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/email_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/url_field.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/custom_text_field.dart' as shared_text;
|
||||||
|
import '../../../../BuilderField/shared/fields/one_to_one_relation_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/calculated_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/one_to_many_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/value_list_picker_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/captcha_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/switch_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/url_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/audio_upload_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/checkbox_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/file_upload_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/image_upload_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/radio_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/video_upload_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/autocomplete_dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/autocomplete_multiselect_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/one_to_one_relation_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/data_grid_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dynamic_dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dynamic_multiselect_dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/static_multiselect_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/currency_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/field_group_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/qr_code_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/barcode_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dependent_dropdown_field.dart';
|
||||||
|
import '../Child_viewModel/Child_view_model_screen.dart';/// Field definitions for Child entity
|
||||||
|
/// This defines the structure and validation for Child forms
|
||||||
|
class ChildFields {
|
||||||
|
/// Get field definitions for Child entity
|
||||||
|
static List<BaseField> getFields(BuildContext context) {
|
||||||
|
final viewModel =
|
||||||
|
Provider.of<ChildViewModelScreen>(context, listen: false);
|
||||||
|
return [
|
||||||
|
// Basic Information
|
||||||
|
CustomTextField(
|
||||||
|
fieldKey: 'namek',
|
||||||
|
label: 'Namek',
|
||||||
|
hint: 'Enter Namek',
|
||||||
|
isRequired: true,
|
||||||
|
maxLength: 50,
|
||||||
|
),
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../Child_viewModel/Child_view_model_screen.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/ui/entity_screens.dart';
|
||||||
|
import 'Child_fields.dart';import '../../../../utils/image_constant.dart';
|
||||||
|
import '../../../../utils/size_utils.dart';
|
||||||
|
import '../../../../theme/app_style.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_image.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_title.dart';
|
||||||
|
import '../../../../widgets/app_bar/custom_app_bar.dart';
|
||||||
|
import 'package:barcode_widget/barcode_widget.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import '../../../../widgets/custom_button.dart';
|
||||||
|
import '../../../../widgets/custom_text_form_field.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:autocomplete_textfield/autocomplete_textfield.dart';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
import 'dart:math';
|
||||||
|
import '../../../../Reuseable/reusable_text_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_picker_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_time_picker_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_dropdown_field.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
class ChildUpdateEntityScreen extends StatefulWidget {
|
||||||
|
final Map<String, dynamic> entity;
|
||||||
|
|
||||||
|
|
||||||
|
ChildUpdateEntityScreen({required this.entity});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ChildUpdateEntityScreenState createState() => _ChildUpdateEntityScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ChildUpdateEntityScreenState extends State<ChildUpdateEntityScreen> {
|
||||||
|
final _formKey = GlobalKey<FormState>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<ChildViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
// Start with all fields, then remove upload fields (generic filter by keys)
|
||||||
|
final Set<String> hiddenKeys = {
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
final fields = ChildFields.getFields(context)
|
||||||
|
.where((f) => !hiddenKeys.contains(f.fieldKey))
|
||||||
|
.toList(); return EntityUpdateScreen(
|
||||||
|
fields: fields,
|
||||||
|
initialData: widget.entity,
|
||||||
|
onSubmit: (data) => _handleSubmit(data),
|
||||||
|
title: 'Child',
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
errorMessage:
|
||||||
|
viewModel.errorMessage.isNotEmpty ? viewModel.errorMessage : null,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _handleSubmit(Map<String, dynamic> formData) async {
|
||||||
|
final provider =
|
||||||
|
Provider.of<ChildViewModelScreen>(context, listen: false);
|
||||||
|
final success = await provider.updateEntity(widget.entity['id'], formData);
|
||||||
|
|
||||||
|
if (success && mounted) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,91 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import '../../../../data/network/base_network_service.dart';
|
||||||
|
import '../../../../data/network/network_api_service.dart';
|
||||||
|
import '../../../../resources/api_constants.dart';
|
||||||
|
import 'package:base_project/data/response/api_response.dart';
|
||||||
|
|
||||||
|
class ChildRepoScreen {
|
||||||
|
|
||||||
|
final String baseUrl = ApiConstants.baseUrl;
|
||||||
|
final BaseNetworkService _helper = NetworkApiService();
|
||||||
|
final String _endpointPath = '/Child/Child';
|
||||||
|
|
||||||
|
Future<ApiResponse<List<Map<String, dynamic>>>> getEntities() async {
|
||||||
|
try {
|
||||||
|
final response =
|
||||||
|
await _helper.getGetApiResponse('$baseUrl$_endpointPath');
|
||||||
|
print('Response received: $response');
|
||||||
|
List<Map<String, dynamic>> entities = const [];
|
||||||
|
if (response is List) {
|
||||||
|
entities = response
|
||||||
|
.whereType<Map>()
|
||||||
|
.map((e) => Map<String, dynamic>.from(e as Map))
|
||||||
|
.toList();
|
||||||
|
} else if (response is Map<String, dynamic>) {
|
||||||
|
final dynamic content = response['content'];
|
||||||
|
if (content is List) {
|
||||||
|
entities = content
|
||||||
|
.whereType<Map>()
|
||||||
|
.map((e) => Map<String, dynamic>.from(e as Map))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ApiResponse.success(entities);
|
||||||
|
} catch (e) {
|
||||||
|
print(' error got $e');
|
||||||
|
return ApiResponse.error('Failed to get all entities: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<List<Map<String, dynamic>>>> getAllWithPagination(
|
||||||
|
int page, int size) async {
|
||||||
|
try {
|
||||||
|
final response = await _helper.getGetApiResponse(
|
||||||
|
'$baseUrl$_endpointPath/getall/page?page=$page&size=$size');
|
||||||
|
|
||||||
|
if (response is Map<String, dynamic> && response['content'] is List) {
|
||||||
|
final List<Map<String, dynamic>> entities =
|
||||||
|
(response['content'] as List).cast<Map<String, dynamic>>().toList();
|
||||||
|
return ApiResponse.success(entities);
|
||||||
|
} else {
|
||||||
|
return ApiResponse.error('Invalid response format');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to get all without pagination: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<Map<String, dynamic>>> createEntity(
|
||||||
|
Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
print("in post api$entity");
|
||||||
|
final response =
|
||||||
|
await _helper.getPostApiResponse('$baseUrl$_endpointPath', entity);
|
||||||
|
return ApiResponse.success(response as Map<String, dynamic>);
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to create entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<Map<String, dynamic>>> updateEntity(
|
||||||
|
int entityId, Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
final response = await _helper.getPutApiResponse(
|
||||||
|
'$baseUrl$_endpointPath/$entityId', entity);
|
||||||
|
return ApiResponse.success(response as Map<String, dynamic>);
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to update entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<void>> deleteEntity(int entityId) async {
|
||||||
|
try {
|
||||||
|
await _helper.getDeleteApiResponse('$baseUrl$_endpointPath/$entityId');
|
||||||
|
return ApiResponse.success(null);
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to delete entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,276 @@
|
|||||||
|
import 'package:base_project/data/response/status.dart';
|
||||||
|
import 'dart:typed_data';
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:http_parser/http_parser.dart';
|
||||||
|
import '../../../../utils/toast_messages/toast_message_util.dart';
|
||||||
|
import '../../../../BuilderField/shared/utils/entity_field_store.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import '../Child_Repo/Child_repo_screen.dart';
|
||||||
|
|
||||||
|
class ChildViewModelScreen extends ChangeNotifier{
|
||||||
|
final ChildRepoScreen repo = ChildRepoScreen();
|
||||||
|
|
||||||
|
|
||||||
|
// State variables
|
||||||
|
List<Map<String, dynamic>> _childList = [];
|
||||||
|
List<Map<String, dynamic>> _filteredList = [];
|
||||||
|
bool _isLoading = false;
|
||||||
|
String _errorMessage = '';
|
||||||
|
int _currentPage = 0;
|
||||||
|
int _pageSize = 10;
|
||||||
|
bool _hasMoreData = true;
|
||||||
|
String _searchQuery = '';
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
List<Map<String, dynamic>> get childList => _childList;
|
||||||
|
List<Map<String, dynamic>> get filteredList => _filteredList;
|
||||||
|
bool get isLoading => _isLoading;
|
||||||
|
String get errorMessage => _errorMessage;
|
||||||
|
bool get hasMoreData => _hasMoreData;
|
||||||
|
String get searchQuery => _searchQuery;
|
||||||
|
|
||||||
|
// Set loading state
|
||||||
|
void _setLoading(bool loading) {
|
||||||
|
_isLoading = loading;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set error message
|
||||||
|
void _setError(String error) {
|
||||||
|
_errorMessage = error;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear error
|
||||||
|
void clearError() {
|
||||||
|
_errorMessage = '';
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get child list
|
||||||
|
Future<void> getEntities() async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.getEntities();
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
_childList = response.data ?? [];
|
||||||
|
_filteredList = List.from(_childList);
|
||||||
|
_currentPage = 0;
|
||||||
|
_hasMoreData = true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to fetch child list');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to fetch child list: $e');
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get child list with pagination
|
||||||
|
Future<void> getAllWithPagination({bool refresh = false}) async {
|
||||||
|
if (refresh) {
|
||||||
|
_currentPage = 0;
|
||||||
|
_childList.clear();
|
||||||
|
_filteredList.clear();
|
||||||
|
_hasMoreData = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_hasMoreData || _isLoading) return;
|
||||||
|
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.getAllWithPagination(_currentPage, _pageSize);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
final newItems = response.data ?? [];
|
||||||
|
|
||||||
|
if (refresh) {
|
||||||
|
_childList = newItems;
|
||||||
|
} else {
|
||||||
|
_childList.addAll(newItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
_filteredList = List.from(_childList);
|
||||||
|
_currentPage++;
|
||||||
|
|
||||||
|
// Check if we have more data
|
||||||
|
_hasMoreData = newItems.length == _pageSize;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to fetch Child list');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to fetch child list: $e');
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Create Child
|
||||||
|
Future<bool> createEntity(Map<String, dynamic> entity) async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
|
||||||
|
final response = await repo.createEntity(entity);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
// Get the response ID for image upload
|
||||||
|
|
||||||
|
final responseId = response.data!['id'].toString();
|
||||||
|
|
||||||
|
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'child created successfully',
|
||||||
|
toastType: ToastType.success,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Refresh the list
|
||||||
|
await getEntities();
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to create Child');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: response.message ?? 'Failed to create Child',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to create child: $e');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Failed to create Child: $e',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update child
|
||||||
|
Future<bool> updateEntity(int id, Map<String, dynamic> entity) async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.updateEntity(id, entity);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Child updated successfully',
|
||||||
|
toastType: ToastType.success,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Update the item in the list
|
||||||
|
final index = _childList.indexWhere((item) => item['id'] == id);
|
||||||
|
if (index != -1) {
|
||||||
|
_childList[index] = response.data!;
|
||||||
|
_filteredList = List.from(_childList);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to update Child');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: response.message ?? 'Failed to update Child',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to update child: $e');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Failed to update Child: $e',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete child
|
||||||
|
Future<bool> deleteEntity(int id) async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.deleteEntity(id);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Child deleted successfully',
|
||||||
|
toastType: ToastType.success,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Remove the item from the list
|
||||||
|
_childList.removeWhere((item) => item['id'] == id);
|
||||||
|
_filteredList = List.from(_childList);
|
||||||
|
notifyListeners();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to delete Child');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: response.message ?? 'Failed to delete Child',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to delete child: $e');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Failed to delete Child: $e',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search child
|
||||||
|
void searchchild(String query) {
|
||||||
|
_searchQuery = query;
|
||||||
|
|
||||||
|
if (query.isEmpty) {
|
||||||
|
_filteredList = List.from(_childList);
|
||||||
|
} else {
|
||||||
|
_filteredList = _childList.where((item) {
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
(item['namek']?.toString().toLowerCase().contains(query.toLowerCase()) ??false)
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear search
|
||||||
|
void clearSearch() {
|
||||||
|
_searchQuery = '';
|
||||||
|
_filteredList = List.from(_childList);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh data
|
||||||
|
Future<void> refreshData() async {
|
||||||
|
await getAllWithPagination(refresh: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,112 @@
|
|||||||
|
import 'dart:typed_data';
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:http_parser/http_parser.dart';
|
||||||
|
import '../../../../resources/api_constants.dart';
|
||||||
|
import '../../../../data/network/base_network_service.dart';
|
||||||
|
import '../../../../data/network/network_api_service.dart';
|
||||||
|
|
||||||
|
class TestbugApiService {
|
||||||
|
final String baseUrl = ApiConstants.baseUrl;
|
||||||
|
|
||||||
|
final BaseNetworkService _helper = NetworkApiService();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future<List<Map<String, dynamic>>> getEntities() async {
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await _helper.getGetApiResponse('$baseUrl/Testbug/Testbug');
|
||||||
|
final entities = (response as List).cast<Map<String, dynamic>>();
|
||||||
|
return entities;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all entities: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Future<List<Map<String, dynamic>>> getAllWithPagination(
|
||||||
|
int page, int size) async {
|
||||||
|
try {
|
||||||
|
final response =
|
||||||
|
await _helper.getGetApiResponse('$baseUrl/Testbug/Testbug/getall/page?page=$page&size=$size');
|
||||||
|
final entities =
|
||||||
|
(response['content'] as List).cast<Map<String, dynamic>>();
|
||||||
|
return entities;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all without pagination: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Future<Map<String, dynamic>> createEntity(
|
||||||
|
Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
print("in post api$entity");
|
||||||
|
final response =
|
||||||
|
await _helper.getPostApiResponse('$baseUrl/Testbug/Testbug', entity);
|
||||||
|
|
||||||
|
print(entity);
|
||||||
|
|
||||||
|
// Assuming the response is a Map<String, dynamic>
|
||||||
|
Map<String, dynamic> responseData = response;
|
||||||
|
|
||||||
|
return responseData;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to create entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future<void> updateEntity( int entityId, Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
await _helper.getPutApiResponse('$baseUrl/Testbug/Testbug/$entityId',
|
||||||
|
entity); print(entity);
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to update entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> deleteEntity( int entityId) async {
|
||||||
|
try {
|
||||||
|
await _helper.getDeleteApiResponse('$baseUrl/Testbug/Testbug/$entityId');
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to delete entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,96 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../Testbug_viewModel/Testbug_view_model_screen.dart';
|
||||||
|
import 'Testbug_fields.dart';import 'package:base_project/BuilderField/shared/ui/entity_screens.dart';
|
||||||
|
import '../../../../utils/image_constant.dart';
|
||||||
|
import '../../../../utils/size_utils.dart';
|
||||||
|
import '../../../../theme/app_style.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_image.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_title.dart';
|
||||||
|
import '../../../../widgets/app_bar/custom_app_bar.dart';
|
||||||
|
import '../../../../widgets/custom_button.dart';
|
||||||
|
import '../../../../widgets/custom_text_form_field.dart';
|
||||||
|
import '../../../../widgets/custom_dropdown_field.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
import 'package:barcode_widget/barcode_widget.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
import 'package:autocomplete_textfield/autocomplete_textfield.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_picker_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_time_picker_field.dart'
|
||||||
|
;import 'package:multi_select_flutter/multi_select_flutter.dart';
|
||||||
|
import 'package:just_audio/just_audio.dart';
|
||||||
|
import 'package:video_player/video_player.dart';
|
||||||
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
|
import 'package:lottie/lottie.dart';
|
||||||
|
import '../../../../utils/toast_messages/toast_message_util.dart';
|
||||||
|
import 'dart:io';
|
||||||
|
import '../../../../Reuseable/reusable_text_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_dropdown_field.dart';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TestbugCreateEntityScreen extends StatefulWidget {
|
||||||
|
const TestbugCreateEntityScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_TestbugCreateEntityScreenState createState() => _TestbugCreateEntityScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TestbugCreateEntityScreenState extends State<TestbugCreateEntityScreen> {
|
||||||
|
|
||||||
|
final Map<String, dynamic> formData = {};
|
||||||
|
final _formKey = GlobalKey<FormState>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<TestbugViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
return EntityCreateScreen(
|
||||||
|
fields: TestbugFields.getFields(context),
|
||||||
|
onSubmit: (data) => _handleSubmit(data),
|
||||||
|
title: 'Testbug',
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
errorMessage:
|
||||||
|
viewModel.errorMessage.isNotEmpty ? viewModel.errorMessage : null,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _handleSubmit(Map<String, dynamic> formData) async {
|
||||||
|
final provider =
|
||||||
|
Provider.of<TestbugViewModelScreen>(context, listen: false);
|
||||||
|
final success = await provider.createEntity(formData);
|
||||||
|
|
||||||
|
if (success && mounted) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,112 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../../../../BuilderField/shared/ui/entity_details.dart';
|
||||||
|
import '../Testbug_viewModel/Testbug_view_model_screen.dart';
|
||||||
|
import 'Testbug_update_entity_screen.dart';
|
||||||
|
|
||||||
|
class TestbugDetailsScreen extends StatefulWidget {
|
||||||
|
final Map<String, dynamic> entity;
|
||||||
|
|
||||||
|
const TestbugDetailsScreen({
|
||||||
|
super.key,
|
||||||
|
required this.entity,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<TestbugDetailsScreen> createState() => _TestbugDetailsScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TestbugDetailsScreenState extends State<TestbugDetailsScreen> {
|
||||||
|
void _navigateToUpdateScreen(Map<String, dynamic> entity) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => TestbugViewModelScreen(),
|
||||||
|
child: TestbugUpdateEntityScreen(entity: entity),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).then((_) {
|
||||||
|
// Refresh the details screen with updated data
|
||||||
|
setState(() {});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showDeleteDialog(Map<String, dynamic> entity) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: const Text('Confirm Deletion'),
|
||||||
|
content: const Text('Are you sure you want to delete this Testbug?'),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Cancel'),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Delete'),
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
final vm =
|
||||||
|
Provider.of<TestbugViewModelScreen>(context, listen: false);
|
||||||
|
final success = await vm.deleteEntity(entity['id']);
|
||||||
|
if (success && mounted) {
|
||||||
|
Navigator.pop(context); // Go back to list
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<TestbugViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
return EntityDetails(
|
||||||
|
entity: widget.entity,
|
||||||
|
onEdit: (entity) => _navigateToUpdateScreen(entity),
|
||||||
|
onDelete: (entity) => _showDeleteDialog(entity),
|
||||||
|
title: 'Testbug',
|
||||||
|
displayFields: [
|
||||||
|
{'key': 'name', 'label': 'Name', 'type': 'text'},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{'key': 'bar_code', 'label': 'bar_code', 'type': 'field_group'},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{'key': 'qr_code', 'label': 'qr_code', 'type': 'field_group'},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{'key': 'value_list_fieldcc', 'label': 'Value List Fieldcc', 'type': 'value_list'},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{'key': 'select_dyanamic', 'label': 'select dyanamic', 'type': 'select'},
|
||||||
|
|
||||||
|
{'key': 'select_dynamic_mul', 'label': 'select dynamic mul', 'type': 'select'},
|
||||||
|
|
||||||
|
{'key': 'select_autocompidentifier', 'label': 'select autocompidentifier', 'type': 'select'},
|
||||||
|
|
||||||
|
{'key': 'select_autcomp_mul', 'label': 'select autcomp mul', 'type': 'select'},
|
||||||
|
|
||||||
|
],
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,172 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/ui/entity_list.dart';
|
||||||
|
import 'Testbug_create_entity_screen.dart';
|
||||||
|
import 'Testbug_update_entity_screen.dart';
|
||||||
|
import '../Testbug_viewModel/Testbug_view_model_screen.dart';
|
||||||
|
import 'Testbug_details_screen.dart';import 'package:flutter/services.dart';
|
||||||
|
import 'package:speech_to_text/speech_to_text.dart' as stt;
|
||||||
|
import '../../../../theme/app_style.dart';
|
||||||
|
import '../../../../utils/size_utils.dart';
|
||||||
|
import '../../../../widgets/custom_icon_button.dart';
|
||||||
|
import '../../../../utils/image_constant.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_image.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_title.dart';
|
||||||
|
import '../../../../widgets/app_bar/custom_app_bar.dart';
|
||||||
|
import '../../../../theme/app_decoration.dart';
|
||||||
|
import 'package:multi_select_flutter/multi_select_flutter.dart';
|
||||||
|
import '../../../../Reuseable/reusable_text_field.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../../../../utils/toast_messages/toast_message_util.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
|
||||||
|
class Testbug_entity_list_screen extends StatefulWidget {
|
||||||
|
static const String routeName = '/entity-list';
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Testbug_entity_list_screenState createState() => _Testbug_entity_list_screenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _Testbug_entity_list_screenState extends State<Testbug_entity_list_screen> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_loadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _loadData() {
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
|
if (mounted) {
|
||||||
|
final vm = Provider.of<TestbugViewModelScreen>(context, listen: false);
|
||||||
|
vm.getAllWithPagination(refresh: true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _navigateToCreateScreen() {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => TestbugViewModelScreen(),
|
||||||
|
child: const TestbugCreateEntityScreen(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).then((_) {
|
||||||
|
final vm = Provider.of<TestbugViewModelScreen>(context, listen: false);
|
||||||
|
vm.refreshData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _navigateToUpdateScreen(Map<String, dynamic> entity) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => TestbugViewModelScreen(),
|
||||||
|
child: TestbugUpdateEntityScreen(entity: entity),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).then((_) {
|
||||||
|
final vm = Provider.of<TestbugViewModelScreen>(context, listen: false);
|
||||||
|
vm.refreshData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _navigateToDetailsScreen(Map<String, dynamic> entity) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => TestbugViewModelScreen(),
|
||||||
|
child: TestbugDetailsScreen(entity: entity),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showDeleteDialog(Map<String, dynamic> entity) {
|
||||||
|
final parentContext = context;
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: const Text('Confirm Deletion'),
|
||||||
|
content: const Text('Are you sure you want to delete this Testbug?'),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Cancel'),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Delete'),
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
final vm =
|
||||||
|
Provider.of<TestbugViewModelScreen>(parentContext, listen: false);
|
||||||
|
await vm.deleteEntity(entity['id']);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<TestbugViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
return EntityList(
|
||||||
|
entities: viewModel.filteredList,
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
errorMessage:
|
||||||
|
viewModel.errorMessage.isNotEmpty ? viewModel.errorMessage : null,
|
||||||
|
hasMoreData: viewModel.hasMoreData,
|
||||||
|
searchQuery: viewModel.searchQuery,
|
||||||
|
onSearchChanged: (query) => viewModel.searchtestbug(query),
|
||||||
|
onEdit: (entity) => _navigateToUpdateScreen(entity),
|
||||||
|
onDelete: (entity) => _showDeleteDialog(entity),
|
||||||
|
onTap: (entity) => _navigateToDetailsScreen(entity),
|
||||||
|
onRefresh: () => viewModel.refreshData(),
|
||||||
|
onLoadMore: () => viewModel.getAllWithPagination(),
|
||||||
|
title: 'Testbug',
|
||||||
|
onAddNew: _navigateToCreateScreen,
|
||||||
|
displayFields: [
|
||||||
|
{'key': 'name', 'label': 'Name', 'type': 'text'},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{'key': 'bar_code', 'label': 'bar_code', 'type': 'field_group'},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{'key': 'qr_code', 'label': 'qr_code', 'type': 'field_group'},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{'key': 'value_list_fieldcc', 'label': 'Value List Fieldcc', 'type': 'value_list'},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{'key': 'select_dyanamic', 'label': 'select dyanamic', 'type': 'select'},
|
||||||
|
|
||||||
|
{'key': 'select_dynamic_mul', 'label': 'select dynamic mul', 'type': 'select'},
|
||||||
|
|
||||||
|
{'key': 'select_autocompidentifier', 'label': 'select autocompidentifier', 'type': 'select'},
|
||||||
|
|
||||||
|
{'key': 'select_autcomp_mul', 'label': 'select autcomp mul', 'type': 'select'},
|
||||||
|
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,210 @@
|
|||||||
|
import 'package:base_project/BuilderField/shared/fields/number_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/password_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/phone_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/custom_text_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/base_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/date_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/datetime_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/email_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/url_field.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/custom_text_field.dart' as shared_text;
|
||||||
|
import '../../../../BuilderField/shared/fields/one_to_one_relation_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/calculated_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/one_to_many_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/value_list_picker_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/captcha_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/switch_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/url_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/audio_upload_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/checkbox_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/file_upload_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/image_upload_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/radio_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/video_upload_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/autocomplete_dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/autocomplete_multiselect_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/one_to_one_relation_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/data_grid_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dynamic_dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dynamic_multiselect_dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/static_multiselect_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/currency_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/field_group_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/qr_code_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/barcode_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dependent_dropdown_field.dart';
|
||||||
|
import '../Testbug_viewModel/Testbug_view_model_screen.dart';/// Field definitions for Testbug entity
|
||||||
|
/// This defines the structure and validation for Testbug forms
|
||||||
|
class TestbugFields {
|
||||||
|
/// Get field definitions for Testbug entity
|
||||||
|
static List<BaseField> getFields(BuildContext context) {
|
||||||
|
final viewModel =
|
||||||
|
Provider.of<TestbugViewModelScreen>(context, listen: false);
|
||||||
|
return [
|
||||||
|
// Basic Information
|
||||||
|
CustomTextField(
|
||||||
|
fieldKey: 'name',
|
||||||
|
label: 'Name',
|
||||||
|
hint: 'Enter Name',
|
||||||
|
isRequired: true,
|
||||||
|
maxLength: 50,
|
||||||
|
),
|
||||||
|
|
||||||
|
FileUploadField(
|
||||||
|
fieldKey: 'fileupload_fields',
|
||||||
|
label: 'Fileupload Fields',
|
||||||
|
isRequired: false,
|
||||||
|
),
|
||||||
|
|
||||||
|
FieldGroupField(
|
||||||
|
fieldKey: 'field_groupnn',
|
||||||
|
label: 'Field Groupnn',
|
||||||
|
hint: 'Enter Field Groupnn',
|
||||||
|
subFields: [
|
||||||
|
|
||||||
|
|
||||||
|
GroupSubField(path: 'bar_code', label: 'bar_code', isRequired: true),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GroupSubField(path: 'qr_code', label: 'qr_code', isRequired: true),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
],
|
||||||
|
),
|
||||||
|
|
||||||
|
OneToOneRelationField(
|
||||||
|
fieldKey: 'child',
|
||||||
|
label: 'child',
|
||||||
|
hint: 'child details',
|
||||||
|
relationSchema: {
|
||||||
|
'title': 'child',
|
||||||
|
'box': true,
|
||||||
|
'fields': [
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
'type': 'text',
|
||||||
|
'label': 'Namek',
|
||||||
|
'hint': 'Enter Namek',
|
||||||
|
'path': 'child.namek',
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
],
|
||||||
|
},
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
// 3) Value list picker â fill fields from selection (provide your loader)
|
||||||
|
ValueListPickerField(
|
||||||
|
fieldKey: 'value_list_fieldcc',
|
||||||
|
label: 'Value List Fieldcc',
|
||||||
|
optionsLoader: () async {
|
||||||
|
try {
|
||||||
|
await viewModel.getEntities();
|
||||||
|
final response = viewModel.testbugList;
|
||||||
|
return response;
|
||||||
|
} catch (e) {
|
||||||
|
// Return empty list if API fails
|
||||||
|
return <Map<String, dynamic>>[];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fillMappings: const {
|
||||||
|
|
||||||
|
|
||||||
|
'name': 'name',
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
),
|
||||||
|
|
||||||
|
DataGridField(
|
||||||
|
fieldKey: 'datagrid_fieldv',
|
||||||
|
label: 'datagrid Fieldv',
|
||||||
|
dataLoader: () => viewModel.getdatagrid_fieldvGrid(),
|
||||||
|
),
|
||||||
|
|
||||||
|
DynamicDropdownField(
|
||||||
|
fieldKey: 'select_dyanamic',
|
||||||
|
label: 'Select select dyanamic',
|
||||||
|
hint: 'Search and select',
|
||||||
|
optionsLoader: () => viewModel.getselect_dyanamic(),
|
||||||
|
|
||||||
|
|
||||||
|
valueKey: 'id',
|
||||||
|
displayKey: 'name',
|
||||||
|
|
||||||
|
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
DynamicMultiSelectDropdownField(
|
||||||
|
fieldKey: 'select_dynamic_mul',
|
||||||
|
label: 'select dynamic mul',
|
||||||
|
hint: 'Type to search and press enter',
|
||||||
|
optionsLoader: () async {
|
||||||
|
final list = await viewModel.getselect_dynamic_mul();
|
||||||
|
return list
|
||||||
|
|
||||||
|
|
||||||
|
.map((e) => e['name']?.toString() ?? '')
|
||||||
|
.where((e) => e.isNotEmpty)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AutocompleteDropdownField(
|
||||||
|
fieldKey: 'select_autocomp',
|
||||||
|
label: 'select autocomp',
|
||||||
|
hint: 'Select select autocomp',
|
||||||
|
optionsLoader: () async => await viewModel.getselect_autocomp(),
|
||||||
|
|
||||||
|
|
||||||
|
valueKey: 'id',
|
||||||
|
displayKey: 'name',
|
||||||
|
|
||||||
|
|
||||||
|
isRequired: false,
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AutocompleteMultiSelectField(
|
||||||
|
fieldKey: 'select_autcomp_mul',
|
||||||
|
label: 'select autcomp mul',
|
||||||
|
hint: 'Select select autcomp mul',
|
||||||
|
isRequired: false,
|
||||||
|
optionsLoader: () async {
|
||||||
|
final data = await viewModel.getselect_autcomp_mul();
|
||||||
|
|
||||||
|
|
||||||
|
return data
|
||||||
|
.map((e) => e['id'])
|
||||||
|
.where((e) => e != null)
|
||||||
|
.map<String>((e) => e.toString())
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
),
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,91 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../Testbug_viewModel/Testbug_view_model_screen.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/ui/entity_screens.dart';
|
||||||
|
import 'Testbug_fields.dart';import '../../../../utils/image_constant.dart';
|
||||||
|
import '../../../../utils/size_utils.dart';
|
||||||
|
import '../../../../theme/app_style.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_image.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_title.dart';
|
||||||
|
import '../../../../widgets/app_bar/custom_app_bar.dart';
|
||||||
|
import 'package:barcode_widget/barcode_widget.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import '../../../../widgets/custom_button.dart';
|
||||||
|
import '../../../../widgets/custom_text_form_field.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:autocomplete_textfield/autocomplete_textfield.dart';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
import 'dart:math';
|
||||||
|
import '../../../../Reuseable/reusable_text_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_picker_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_time_picker_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_dropdown_field.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
class TestbugUpdateEntityScreen extends StatefulWidget {
|
||||||
|
final Map<String, dynamic> entity;
|
||||||
|
|
||||||
|
|
||||||
|
TestbugUpdateEntityScreen({required this.entity});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_TestbugUpdateEntityScreenState createState() => _TestbugUpdateEntityScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TestbugUpdateEntityScreenState extends State<TestbugUpdateEntityScreen> {
|
||||||
|
final _formKey = GlobalKey<FormState>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<TestbugViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
// Start with all fields, then remove upload fields (generic filter by keys)
|
||||||
|
final Set<String> hiddenKeys = {
|
||||||
|
|
||||||
|
|
||||||
|
'fileupload_fields',
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
final fields = TestbugFields.getFields(context)
|
||||||
|
.where((f) => !hiddenKeys.contains(f.fieldKey))
|
||||||
|
.toList(); return EntityUpdateScreen(
|
||||||
|
fields: fields,
|
||||||
|
initialData: widget.entity,
|
||||||
|
onSubmit: (data) => _handleSubmit(data),
|
||||||
|
title: 'Testbug',
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
errorMessage:
|
||||||
|
viewModel.errorMessage.isNotEmpty ? viewModel.errorMessage : null,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _handleSubmit(Map<String, dynamic> formData) async {
|
||||||
|
final provider =
|
||||||
|
Provider.of<TestbugViewModelScreen>(context, listen: false);
|
||||||
|
final success = await provider.updateEntity(widget.entity['id'], formData);
|
||||||
|
|
||||||
|
if (success && mounted) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,158 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import '../../../../data/network/base_network_service.dart';
|
||||||
|
import '../../../../data/network/network_api_service.dart';
|
||||||
|
import '../../../../resources/api_constants.dart';
|
||||||
|
import 'package:base_project/data/response/api_response.dart';
|
||||||
|
|
||||||
|
class TestbugRepoScreen {
|
||||||
|
|
||||||
|
final String baseUrl = ApiConstants.baseUrl;
|
||||||
|
final BaseNetworkService _helper = NetworkApiService();
|
||||||
|
final String _endpointPath = '/Testbug/Testbug';
|
||||||
|
|
||||||
|
Future<ApiResponse<List<Map<String, dynamic>>>> getEntities() async {
|
||||||
|
try {
|
||||||
|
final response =
|
||||||
|
await _helper.getGetApiResponse('$baseUrl$_endpointPath');
|
||||||
|
print('Response received: $response');
|
||||||
|
List<Map<String, dynamic>> entities = const [];
|
||||||
|
if (response is List) {
|
||||||
|
entities = response
|
||||||
|
.whereType<Map>()
|
||||||
|
.map((e) => Map<String, dynamic>.from(e as Map))
|
||||||
|
.toList();
|
||||||
|
} else if (response is Map<String, dynamic>) {
|
||||||
|
final dynamic content = response['content'];
|
||||||
|
if (content is List) {
|
||||||
|
entities = content
|
||||||
|
.whereType<Map>()
|
||||||
|
.map((e) => Map<String, dynamic>.from(e as Map))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ApiResponse.success(entities);
|
||||||
|
} catch (e) {
|
||||||
|
print(' error got $e');
|
||||||
|
return ApiResponse.error('Failed to get all entities: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<List<Map<String, dynamic>>>> getAllWithPagination(
|
||||||
|
int page, int size) async {
|
||||||
|
try {
|
||||||
|
final response = await _helper.getGetApiResponse(
|
||||||
|
'$baseUrl$_endpointPath/getall/page?page=$page&size=$size');
|
||||||
|
|
||||||
|
if (response is Map<String, dynamic> && response['content'] is List) {
|
||||||
|
final List<Map<String, dynamic>> entities =
|
||||||
|
(response['content'] as List).cast<Map<String, dynamic>>().toList();
|
||||||
|
return ApiResponse.success(entities);
|
||||||
|
} else {
|
||||||
|
return ApiResponse.error('Invalid response format');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to get all without pagination: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<Map<String, dynamic>>> createEntity(
|
||||||
|
Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
print("in post api$entity");
|
||||||
|
final response =
|
||||||
|
await _helper.getPostApiResponse('$baseUrl$_endpointPath', entity);
|
||||||
|
return ApiResponse.success(response as Map<String, dynamic>);
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to create entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<Map<String, dynamic>>> updateEntity(
|
||||||
|
int entityId, Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
final response = await _helper.getPutApiResponse(
|
||||||
|
'$baseUrl$_endpointPath/$entityId', entity);
|
||||||
|
return ApiResponse.success(response as Map<String, dynamic>);
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to update entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<void>> deleteEntity(int entityId) async {
|
||||||
|
try {
|
||||||
|
await _helper.getDeleteApiResponse('$baseUrl$_endpointPath/$entityId');
|
||||||
|
return ApiResponse.success(null);
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to delete entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Future<dynamic> fileupload_fieldsUpload(
|
||||||
|
String ref, String refTableNmae, FormData entity) async {
|
||||||
|
try {
|
||||||
|
String apiUrl = "$baseUrl/FileUpload/Uploadeddocs/$ref/$refTableNmae";
|
||||||
|
final response = await _helper.getPostApiResponse(apiUrl, entity);
|
||||||
|
return response;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to Upload File: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future<dynamic> getdatagrid_fieldvGrid() async {
|
||||||
|
try {
|
||||||
|
String apiUrl = "$baseUrl/Testlist_ListFilter1/Testlist_ListFilter1";
|
||||||
|
final response = await _helper.getGetApiResponse(apiUrl);
|
||||||
|
return response;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to Upload datagrid Fieldv: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<dynamic> getselect_dyanamic() async {
|
||||||
|
try {
|
||||||
|
String apiUrl = "$baseUrl/Testlist_ListFilter1/Testlist_ListFilter1";
|
||||||
|
final response = await _helper.getGetApiResponse(apiUrl);
|
||||||
|
return response;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to Get: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<dynamic> getselect_dynamic_mul() async {
|
||||||
|
try {
|
||||||
|
String apiUrl = "$baseUrl/Testlist_ListFilter1/Testlist_ListFilter1";
|
||||||
|
final response = await _helper.getGetApiResponse(apiUrl);
|
||||||
|
return response;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to Get: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<dynamic> getselect_autocomp() async {
|
||||||
|
try {
|
||||||
|
String apiUrl = "$baseUrl/Testlist_ListFilter1/Testlist_ListFilter1";
|
||||||
|
final response = await _helper.getGetApiResponse(apiUrl);
|
||||||
|
return response;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to Get: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<dynamic> getselect_autcomp_mul() async {
|
||||||
|
try {
|
||||||
|
String apiUrl = "$baseUrl/Testlist_ListFilter1/Testlist_ListFilter1";
|
||||||
|
final response = await _helper.getGetApiResponse(apiUrl);
|
||||||
|
return response;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to Get: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,590 @@
|
|||||||
|
import 'package:base_project/data/response/status.dart';
|
||||||
|
import 'dart:typed_data';
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:http_parser/http_parser.dart';
|
||||||
|
import '../../../../utils/toast_messages/toast_message_util.dart';
|
||||||
|
import '../../../../BuilderField/shared/utils/entity_field_store.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import '../Testbug_Repo/Testbug_repo_screen.dart';
|
||||||
|
|
||||||
|
class TestbugViewModelScreen extends ChangeNotifier{
|
||||||
|
final TestbugRepoScreen repo = TestbugRepoScreen();
|
||||||
|
|
||||||
|
|
||||||
|
// State variables
|
||||||
|
List<Map<String, dynamic>> _testbugList = [];
|
||||||
|
List<Map<String, dynamic>> _filteredList = [];
|
||||||
|
bool _isLoading = false;
|
||||||
|
String _errorMessage = '';
|
||||||
|
int _currentPage = 0;
|
||||||
|
int _pageSize = 10;
|
||||||
|
bool _hasMoreData = true;
|
||||||
|
String _searchQuery = '';
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
List<Map<String, dynamic>> get testbugList => _testbugList;
|
||||||
|
List<Map<String, dynamic>> get filteredList => _filteredList;
|
||||||
|
bool get isLoading => _isLoading;
|
||||||
|
String get errorMessage => _errorMessage;
|
||||||
|
bool get hasMoreData => _hasMoreData;
|
||||||
|
String get searchQuery => _searchQuery;
|
||||||
|
|
||||||
|
// Set loading state
|
||||||
|
void _setLoading(bool loading) {
|
||||||
|
_isLoading = loading;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set error message
|
||||||
|
void _setError(String error) {
|
||||||
|
_errorMessage = error;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear error
|
||||||
|
void clearError() {
|
||||||
|
_errorMessage = '';
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get testbug list
|
||||||
|
Future<void> getEntities() async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.getEntities();
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
_testbugList = response.data ?? [];
|
||||||
|
_filteredList = List.from(_testbugList);
|
||||||
|
_currentPage = 0;
|
||||||
|
_hasMoreData = true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to fetch testbug list');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to fetch testbug list: $e');
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get testbug list with pagination
|
||||||
|
Future<void> getAllWithPagination({bool refresh = false}) async {
|
||||||
|
if (refresh) {
|
||||||
|
_currentPage = 0;
|
||||||
|
_testbugList.clear();
|
||||||
|
_filteredList.clear();
|
||||||
|
_hasMoreData = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_hasMoreData || _isLoading) return;
|
||||||
|
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.getAllWithPagination(_currentPage, _pageSize);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
final newItems = response.data ?? [];
|
||||||
|
|
||||||
|
if (refresh) {
|
||||||
|
_testbugList = newItems;
|
||||||
|
} else {
|
||||||
|
_testbugList.addAll(newItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
_filteredList = List.from(_testbugList);
|
||||||
|
_currentPage++;
|
||||||
|
|
||||||
|
// Check if we have more data
|
||||||
|
_hasMoreData = newItems.length == _pageSize;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to fetch Testbug list');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to fetch testbug list: $e');
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Variable to store image files
|
||||||
|
List<Map<String, dynamic>> _fileupload_fieldsFiles = [];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Create Testbug
|
||||||
|
Future<bool> createEntity(Map<String, dynamic> entity) async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
|
||||||
|
// Always source image selections from EntityFieldStore for simplicity
|
||||||
|
final List<UploadItem> storefilefileupload_fields = EntityFieldStore.instance
|
||||||
|
.get<List<UploadItem>>('fileupload_fields') ??
|
||||||
|
<UploadItem>[];
|
||||||
|
|
||||||
|
_fileupload_fieldsFiles = storefilefileupload_fields
|
||||||
|
.map((u) => {'path': u.fileName, 'bytes': u.bytes})
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
|
||||||
|
entity.remove('fileupload_fields');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
final response = await repo.createEntity(entity);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
// Get the response ID for image upload
|
||||||
|
|
||||||
|
final responseId = response.data!['id'].toString();
|
||||||
|
|
||||||
|
|
||||||
|
// Upload File if available
|
||||||
|
if (_fileupload_fieldsFiles.isNotEmpty) {
|
||||||
|
await _uploadfileupload_fields(responseId, _fileupload_fieldsFiles);
|
||||||
|
_fileupload_fieldsFiles.clear(); // Clear after upload
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'testbug created successfully',
|
||||||
|
toastType: ToastType.success,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Refresh the list
|
||||||
|
await getEntities();
|
||||||
|
|
||||||
|
|
||||||
|
EntityFieldStore.instance.remove('fileupload_fields');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to create Testbug');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: response.message ?? 'Failed to create Testbug',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to create testbug: $e');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Failed to create Testbug: $e',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update testbug
|
||||||
|
Future<bool> updateEntity(int id, Map<String, dynamic> entity) async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.updateEntity(id, entity);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Testbug updated successfully',
|
||||||
|
toastType: ToastType.success,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Update the item in the list
|
||||||
|
final index = _testbugList.indexWhere((item) => item['id'] == id);
|
||||||
|
if (index != -1) {
|
||||||
|
_testbugList[index] = response.data!;
|
||||||
|
_filteredList = List.from(_testbugList);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to update Testbug');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: response.message ?? 'Failed to update Testbug',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to update testbug: $e');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Failed to update Testbug: $e',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete testbug
|
||||||
|
Future<bool> deleteEntity(int id) async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.deleteEntity(id);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Testbug deleted successfully',
|
||||||
|
toastType: ToastType.success,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Remove the item from the list
|
||||||
|
_testbugList.removeWhere((item) => item['id'] == id);
|
||||||
|
_filteredList = List.from(_testbugList);
|
||||||
|
notifyListeners();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to delete Testbug');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: response.message ?? 'Failed to delete Testbug',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to delete testbug: $e');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Failed to delete Testbug: $e',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search testbug
|
||||||
|
void searchtestbug(String query) {
|
||||||
|
_searchQuery = query;
|
||||||
|
|
||||||
|
if (query.isEmpty) {
|
||||||
|
_filteredList = List.from(_testbugList);
|
||||||
|
} else {
|
||||||
|
_filteredList = _testbugList.where((item) {
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
(item['name']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(item['field_groupnn']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(item['field_groupnn']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(item['child']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(item['datagrid_fieldv']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(item['select_dyanamic']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(item['select_dynamic_mul']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(item['select_autocompidentifier']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(item['select_autcomp_mul']?.toString().toLowerCase().contains(query.toLowerCase()) ??false)
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear search
|
||||||
|
void clearSearch() {
|
||||||
|
_searchQuery = '';
|
||||||
|
_filteredList = List.from(_testbugList);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh data
|
||||||
|
Future<void> refreshData() async {
|
||||||
|
await getAllWithPagination(refresh: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Helper method to upload multiple image files
|
||||||
|
Future<void> _uploadfileupload_fields(
|
||||||
|
String responseId, List<dynamic> Files) async {
|
||||||
|
try {
|
||||||
|
for (var File in Files) {
|
||||||
|
if (File is Map<String, dynamic> &&
|
||||||
|
File.containsKey('path')) {
|
||||||
|
String filePath = File['path'];
|
||||||
|
Uint8List fileBytes = File['bytes'];
|
||||||
|
|
||||||
|
// Upload each image file
|
||||||
|
await uploadfileupload_fields(
|
||||||
|
responseId, 'Testbug', filePath, fileBytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
print('Error uploading files: $error');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: "Failed to upload images", toastType: ToastType.error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modify the uploadfileupload_fieldsimage function
|
||||||
|
Future<void> uploadfileupload_fields(String ref, String refTableNmae,
|
||||||
|
String selectedFilePath, Uint8List imageTimageBytes) async {
|
||||||
|
try {
|
||||||
|
|
||||||
|
final Uint8List fileBytes = imageTimageBytes!;
|
||||||
|
final mimeType = fileupload_fieldslookupMimeType(selectedFilePath);
|
||||||
|
|
||||||
|
FormData formData = FormData.fromMap({
|
||||||
|
'file': MultipartFile.fromBytes(
|
||||||
|
fileBytes,
|
||||||
|
filename: selectedFilePath
|
||||||
|
.split('/')
|
||||||
|
.last, // Get the file name from the path
|
||||||
|
contentType: MediaType.parse(mimeType!),
|
||||||
|
),
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
await repo.fileupload_fieldsUpload(ref, refTableNmae, formData).then((value) {
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: "File uploaded successfully",
|
||||||
|
toastType: ToastType.success);
|
||||||
|
}).onError(
|
||||||
|
(error, stackTrace) {
|
||||||
|
print("error--$error");
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: "Failed to upload file", toastType: ToastType.error);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
print('Error occurred during form submission: $error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modify the lookupMimeType function if needed
|
||||||
|
String fileupload_fieldslookupMimeType(String filePath) {
|
||||||
|
final ext = filePath.split('.').last;
|
||||||
|
switch (ext) {
|
||||||
|
case 'jpg':
|
||||||
|
case 'jpeg':
|
||||||
|
return 'image/jpeg';
|
||||||
|
case 'png':
|
||||||
|
return 'image/png';
|
||||||
|
case 'pdf':
|
||||||
|
return 'application/pdf';
|
||||||
|
// Add more cases for other file types as needed
|
||||||
|
default:
|
||||||
|
return 'application/octet-stream'; // Default MIME type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
late List<Map<String, dynamic>> datagrid_fieldvdataFuture =
|
||||||
|
[]; // Data from fetchData
|
||||||
|
|
||||||
|
Future<List<Map<String, dynamic>>> getdatagrid_fieldvGrid() async {
|
||||||
|
|
||||||
|
try {
|
||||||
|
final value = await repo.getdatagrid_fieldvGrid();
|
||||||
|
datagrid_fieldvdataFuture = (value as List)
|
||||||
|
.map((item) => item as Map<String, dynamic>)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return datagrid_fieldvdataFuture;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Map<String, dynamic>> select_dyanamicItems = [];
|
||||||
|
|
||||||
|
Future<List<Map<String, dynamic>>> getselect_dyanamic() async {
|
||||||
|
|
||||||
|
try {
|
||||||
|
final value = await repo.getselect_dyanamic();
|
||||||
|
select_dyanamicItems = (value as List)
|
||||||
|
.map((item) => item as Map<String, dynamic>)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return select_dyanamicItems;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Map<String, dynamic>> select_dynamic_mulItems = [];
|
||||||
|
|
||||||
|
Future<List<Map<String, dynamic>>> getselect_dynamic_mul() async {
|
||||||
|
|
||||||
|
try {
|
||||||
|
final value = await repo.getselect_dynamic_mul();
|
||||||
|
select_dynamic_mulItems = (value as List)
|
||||||
|
.map((item) => item as Map<String, dynamic>)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return select_dynamic_mulItems;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Map<String, dynamic>> select_autocompItems = [];
|
||||||
|
|
||||||
|
Future<List<Map<String, dynamic>>> getselect_autocomp() async {
|
||||||
|
|
||||||
|
try {
|
||||||
|
final value = await repo.getselect_autocomp();
|
||||||
|
select_autocompItems = (value as List)
|
||||||
|
.map((item) => item as Map<String, dynamic>)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return select_autocompItems;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Map<String, dynamic>> select_autcomp_mulItems = [];
|
||||||
|
|
||||||
|
Future<List<Map<String, dynamic>>> getselect_autcomp_mul() async {
|
||||||
|
|
||||||
|
try {
|
||||||
|
final value = await repo.getselect_autcomp_mul();
|
||||||
|
select_autcomp_mulItems = (value as List)
|
||||||
|
.map((item) => item as Map<String, dynamic>)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return select_autcomp_mulItems;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
import 'dart:typed_data';
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:http_parser/http_parser.dart';
|
||||||
|
import '../../../../resources/api_constants.dart';
|
||||||
|
import '../../../../data/network/base_network_service.dart';
|
||||||
|
import '../../../../data/network/network_api_service.dart';
|
||||||
|
|
||||||
|
class TestlistApiService {
|
||||||
|
final String baseUrl = ApiConstants.baseUrl;
|
||||||
|
|
||||||
|
final BaseNetworkService _helper = NetworkApiService();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future<List<Map<String, dynamic>>> getEntities() async {
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await _helper.getGetApiResponse('$baseUrl/Testlist/Testlist');
|
||||||
|
final entities = (response as List).cast<Map<String, dynamic>>();
|
||||||
|
return entities;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all entities: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Future<List<Map<String, dynamic>>> getAllWithPagination(
|
||||||
|
int page, int size) async {
|
||||||
|
try {
|
||||||
|
final response =
|
||||||
|
await _helper.getGetApiResponse('$baseUrl/Testlist/Testlist/getall/page?page=$page&size=$size');
|
||||||
|
final entities =
|
||||||
|
(response['content'] as List).cast<Map<String, dynamic>>();
|
||||||
|
return entities;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to get all without pagination: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Future<Map<String, dynamic>> createEntity(
|
||||||
|
Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
print("in post api$entity");
|
||||||
|
final response =
|
||||||
|
await _helper.getPostApiResponse('$baseUrl/Testlist/Testlist', entity);
|
||||||
|
|
||||||
|
print(entity);
|
||||||
|
|
||||||
|
// Assuming the response is a Map<String, dynamic>
|
||||||
|
Map<String, dynamic> responseData = response;
|
||||||
|
|
||||||
|
return responseData;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to create entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future<void> updateEntity( int entityId, Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
await _helper.getPutApiResponse('$baseUrl/Testlist/Testlist/$entityId',
|
||||||
|
entity); print(entity);
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to update entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> deleteEntity( int entityId) async {
|
||||||
|
try {
|
||||||
|
await _helper.getDeleteApiResponse('$baseUrl/Testlist/Testlist/$entityId');
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to delete entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../Testlist_viewModel/Testlist_view_model_screen.dart';
|
||||||
|
import 'Testlist_fields.dart';import 'package:base_project/BuilderField/shared/ui/entity_screens.dart';
|
||||||
|
import '../../../../utils/image_constant.dart';
|
||||||
|
import '../../../../utils/size_utils.dart';
|
||||||
|
import '../../../../theme/app_style.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_image.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_title.dart';
|
||||||
|
import '../../../../widgets/app_bar/custom_app_bar.dart';
|
||||||
|
import '../../../../widgets/custom_button.dart';
|
||||||
|
import '../../../../widgets/custom_text_form_field.dart';
|
||||||
|
import '../../../../widgets/custom_dropdown_field.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
import 'package:barcode_widget/barcode_widget.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
import 'package:autocomplete_textfield/autocomplete_textfield.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_picker_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_time_picker_field.dart'
|
||||||
|
;import 'package:multi_select_flutter/multi_select_flutter.dart';
|
||||||
|
import 'package:just_audio/just_audio.dart';
|
||||||
|
import 'package:video_player/video_player.dart';
|
||||||
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
|
import 'package:lottie/lottie.dart';
|
||||||
|
import '../../../../utils/toast_messages/toast_message_util.dart';
|
||||||
|
import 'dart:io';
|
||||||
|
import '../../../../Reuseable/reusable_text_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_dropdown_field.dart';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TestlistCreateEntityScreen extends StatefulWidget {
|
||||||
|
const TestlistCreateEntityScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_TestlistCreateEntityScreenState createState() => _TestlistCreateEntityScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TestlistCreateEntityScreenState extends State<TestlistCreateEntityScreen> {
|
||||||
|
|
||||||
|
final Map<String, dynamic> formData = {};
|
||||||
|
final _formKey = GlobalKey<FormState>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<TestlistViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
return EntityCreateScreen(
|
||||||
|
fields: TestlistFields.getFields(context),
|
||||||
|
onSubmit: (data) => _handleSubmit(data),
|
||||||
|
title: 'Testlist',
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
errorMessage:
|
||||||
|
viewModel.errorMessage.isNotEmpty ? viewModel.errorMessage : null,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _handleSubmit(Map<String, dynamic> formData) async {
|
||||||
|
final provider =
|
||||||
|
Provider.of<TestlistViewModelScreen>(context, listen: false);
|
||||||
|
final success = await provider.createEntity(formData);
|
||||||
|
|
||||||
|
if (success && mounted) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../../../../BuilderField/shared/ui/entity_details.dart';
|
||||||
|
import '../Testlist_viewModel/Testlist_view_model_screen.dart';
|
||||||
|
import 'Testlist_update_entity_screen.dart';
|
||||||
|
|
||||||
|
class TestlistDetailsScreen extends StatefulWidget {
|
||||||
|
final Map<String, dynamic> entity;
|
||||||
|
|
||||||
|
const TestlistDetailsScreen({
|
||||||
|
super.key,
|
||||||
|
required this.entity,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<TestlistDetailsScreen> createState() => _TestlistDetailsScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TestlistDetailsScreenState extends State<TestlistDetailsScreen> {
|
||||||
|
void _navigateToUpdateScreen(Map<String, dynamic> entity) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => TestlistViewModelScreen(),
|
||||||
|
child: TestlistUpdateEntityScreen(entity: entity),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).then((_) {
|
||||||
|
// Refresh the details screen with updated data
|
||||||
|
setState(() {});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showDeleteDialog(Map<String, dynamic> entity) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: const Text('Confirm Deletion'),
|
||||||
|
content: const Text('Are you sure you want to delete this Testlist?'),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Cancel'),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Delete'),
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
final vm =
|
||||||
|
Provider.of<TestlistViewModelScreen>(context, listen: false);
|
||||||
|
final success = await vm.deleteEntity(entity['id']);
|
||||||
|
if (success && mounted) {
|
||||||
|
Navigator.pop(context); // Go back to list
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<TestlistViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
return EntityDetails(
|
||||||
|
entity: widget.entity,
|
||||||
|
onEdit: (entity) => _navigateToUpdateScreen(entity),
|
||||||
|
onDelete: (entity) => _showDeleteDialog(entity),
|
||||||
|
title: 'Testlist',
|
||||||
|
displayFields: [
|
||||||
|
{'key': 'name', 'label': 'Name', 'type': 'text'},
|
||||||
|
|
||||||
|
{'key': 'description', 'label': 'Description', 'type': 'textarea'},
|
||||||
|
|
||||||
|
{'key': 'active', 'label': 'Active', 'type': 'toggle_switch'},
|
||||||
|
|
||||||
|
],
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,150 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/ui/entity_list.dart';
|
||||||
|
import 'Testlist_create_entity_screen.dart';
|
||||||
|
import 'Testlist_update_entity_screen.dart';
|
||||||
|
import '../Testlist_viewModel/Testlist_view_model_screen.dart';
|
||||||
|
import 'Testlist_details_screen.dart';import 'package:flutter/services.dart';
|
||||||
|
import 'package:speech_to_text/speech_to_text.dart' as stt;
|
||||||
|
import '../../../../theme/app_style.dart';
|
||||||
|
import '../../../../utils/size_utils.dart';
|
||||||
|
import '../../../../widgets/custom_icon_button.dart';
|
||||||
|
import '../../../../utils/image_constant.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_image.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_title.dart';
|
||||||
|
import '../../../../widgets/app_bar/custom_app_bar.dart';
|
||||||
|
import '../../../../theme/app_decoration.dart';
|
||||||
|
import 'package:multi_select_flutter/multi_select_flutter.dart';
|
||||||
|
import '../../../../Reuseable/reusable_text_field.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../../../../utils/toast_messages/toast_message_util.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
|
||||||
|
class Testlist_entity_list_screen extends StatefulWidget {
|
||||||
|
static const String routeName = '/entity-list';
|
||||||
|
|
||||||
|
@override
|
||||||
|
_Testlist_entity_list_screenState createState() => _Testlist_entity_list_screenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _Testlist_entity_list_screenState extends State<Testlist_entity_list_screen> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_loadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _loadData() {
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
|
if (mounted) {
|
||||||
|
final vm = Provider.of<TestlistViewModelScreen>(context, listen: false);
|
||||||
|
vm.getAllWithPagination(refresh: true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _navigateToCreateScreen() {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => TestlistViewModelScreen(),
|
||||||
|
child: const TestlistCreateEntityScreen(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).then((_) {
|
||||||
|
final vm = Provider.of<TestlistViewModelScreen>(context, listen: false);
|
||||||
|
vm.refreshData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _navigateToUpdateScreen(Map<String, dynamic> entity) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => TestlistViewModelScreen(),
|
||||||
|
child: TestlistUpdateEntityScreen(entity: entity),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
).then((_) {
|
||||||
|
final vm = Provider.of<TestlistViewModelScreen>(context, listen: false);
|
||||||
|
vm.refreshData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _navigateToDetailsScreen(Map<String, dynamic> entity) {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ChangeNotifierProvider(
|
||||||
|
create: (context) => TestlistViewModelScreen(),
|
||||||
|
child: TestlistDetailsScreen(entity: entity),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showDeleteDialog(Map<String, dynamic> entity) {
|
||||||
|
final parentContext = context;
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: const Text('Confirm Deletion'),
|
||||||
|
content: const Text('Are you sure you want to delete this Testlist?'),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Cancel'),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
child: const Text('Delete'),
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
final vm =
|
||||||
|
Provider.of<TestlistViewModelScreen>(parentContext, listen: false);
|
||||||
|
await vm.deleteEntity(entity['id']);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<TestlistViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
return EntityList(
|
||||||
|
entities: viewModel.filteredList,
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
errorMessage:
|
||||||
|
viewModel.errorMessage.isNotEmpty ? viewModel.errorMessage : null,
|
||||||
|
hasMoreData: viewModel.hasMoreData,
|
||||||
|
searchQuery: viewModel.searchQuery,
|
||||||
|
onSearchChanged: (query) => viewModel.searchtestlist(query),
|
||||||
|
onEdit: (entity) => _navigateToUpdateScreen(entity),
|
||||||
|
onDelete: (entity) => _showDeleteDialog(entity),
|
||||||
|
onTap: (entity) => _navigateToDetailsScreen(entity),
|
||||||
|
onRefresh: () => viewModel.refreshData(),
|
||||||
|
onLoadMore: () => viewModel.getAllWithPagination(),
|
||||||
|
title: 'Testlist',
|
||||||
|
onAddNew: _navigateToCreateScreen,
|
||||||
|
displayFields: [
|
||||||
|
{'key': 'name', 'label': 'Name', 'type': 'text'},
|
||||||
|
|
||||||
|
{'key': 'description', 'label': 'Description', 'type': 'textarea'},
|
||||||
|
|
||||||
|
{'key': 'active', 'label': 'Active', 'type': 'toggle_switch'},
|
||||||
|
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
import 'package:base_project/BuilderField/shared/fields/number_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/password_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/phone_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/custom_text_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/base_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/date_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/datetime_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/email_field.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/fields/url_field.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/custom_text_field.dart' as shared_text;
|
||||||
|
import '../../../../BuilderField/shared/fields/one_to_one_relation_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/calculated_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/one_to_many_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/value_list_picker_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/captcha_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/switch_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/url_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/audio_upload_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/checkbox_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/file_upload_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/image_upload_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/radio_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/video_upload_field.dart';
|
||||||
|
|
||||||
|
import '../../../../BuilderField/shared/fields/autocomplete_dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/autocomplete_multiselect_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/one_to_one_relation_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/data_grid_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dynamic_dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dynamic_multiselect_dropdown_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/static_multiselect_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/currency_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/field_group_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/qr_code_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/barcode_field.dart';
|
||||||
|
import '../../../../BuilderField/shared/fields/dependent_dropdown_field.dart';
|
||||||
|
import '../Testlist_viewModel/Testlist_view_model_screen.dart';/// Field definitions for Testlist entity
|
||||||
|
/// This defines the structure and validation for Testlist forms
|
||||||
|
class TestlistFields {
|
||||||
|
/// Get field definitions for Testlist entity
|
||||||
|
static List<BaseField> getFields(BuildContext context) {
|
||||||
|
final viewModel =
|
||||||
|
Provider.of<TestlistViewModelScreen>(context, listen: false);
|
||||||
|
return [
|
||||||
|
// Basic Information
|
||||||
|
CustomTextField(
|
||||||
|
fieldKey: 'name',
|
||||||
|
label: 'Name',
|
||||||
|
hint: 'Enter Name',
|
||||||
|
isRequired: true,
|
||||||
|
maxLength: 50,
|
||||||
|
),
|
||||||
|
|
||||||
|
CustomTextField(
|
||||||
|
fieldKey: 'description',
|
||||||
|
label: 'Description',
|
||||||
|
hint: 'Enter Description',
|
||||||
|
isRequired: false,
|
||||||
|
maxLength: 1000,
|
||||||
|
),
|
||||||
|
|
||||||
|
SwitchField(
|
||||||
|
fieldKey: 'active',
|
||||||
|
label: 'Active',
|
||||||
|
),
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,77 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import '../Testlist_viewModel/Testlist_view_model_screen.dart';
|
||||||
|
import 'package:base_project/BuilderField/shared/ui/entity_screens.dart';
|
||||||
|
import 'Testlist_fields.dart';import '../../../../utils/image_constant.dart';
|
||||||
|
import '../../../../utils/size_utils.dart';
|
||||||
|
import '../../../../theme/app_style.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_image.dart';
|
||||||
|
import '../../../../widgets/app_bar/appbar_title.dart';
|
||||||
|
import '../../../../widgets/app_bar/custom_app_bar.dart';
|
||||||
|
import 'package:barcode_widget/barcode_widget.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import '../../../../widgets/custom_button.dart';
|
||||||
|
import '../../../../widgets/custom_text_form_field.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:autocomplete_textfield/autocomplete_textfield.dart';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
import 'dart:math';
|
||||||
|
import '../../../../Reuseable/reusable_text_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_picker_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_date_time_picker_field.dart';
|
||||||
|
import '../../../../Reuseable/reusable_dropdown_field.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
class TestlistUpdateEntityScreen extends StatefulWidget {
|
||||||
|
final Map<String, dynamic> entity;
|
||||||
|
|
||||||
|
|
||||||
|
TestlistUpdateEntityScreen({required this.entity});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_TestlistUpdateEntityScreenState createState() => _TestlistUpdateEntityScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TestlistUpdateEntityScreenState extends State<TestlistUpdateEntityScreen> {
|
||||||
|
final _formKey = GlobalKey<FormState>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<TestlistViewModelScreen>(
|
||||||
|
builder: (context, viewModel, child) {
|
||||||
|
// Start with all fields, then remove upload fields (generic filter by keys)
|
||||||
|
final Set<String> hiddenKeys = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
final fields = TestlistFields.getFields(context)
|
||||||
|
.where((f) => !hiddenKeys.contains(f.fieldKey))
|
||||||
|
.toList(); return EntityUpdateScreen(
|
||||||
|
fields: fields,
|
||||||
|
initialData: widget.entity,
|
||||||
|
onSubmit: (data) => _handleSubmit(data),
|
||||||
|
title: 'Testlist',
|
||||||
|
isLoading: viewModel.isLoading,
|
||||||
|
errorMessage:
|
||||||
|
viewModel.errorMessage.isNotEmpty ? viewModel.errorMessage : null,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _handleSubmit(Map<String, dynamic> formData) async {
|
||||||
|
final provider =
|
||||||
|
Provider.of<TestlistViewModelScreen>(context, listen: false);
|
||||||
|
final success = await provider.updateEntity(widget.entity['id'], formData);
|
||||||
|
|
||||||
|
if (success && mounted) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import '../../../../data/network/base_network_service.dart';
|
||||||
|
import '../../../../data/network/network_api_service.dart';
|
||||||
|
import '../../../../resources/api_constants.dart';
|
||||||
|
import 'package:base_project/data/response/api_response.dart';
|
||||||
|
|
||||||
|
class TestlistRepoScreen {
|
||||||
|
|
||||||
|
final String baseUrl = ApiConstants.baseUrl;
|
||||||
|
final BaseNetworkService _helper = NetworkApiService();
|
||||||
|
final String _endpointPath = '/Testlist/Testlist';
|
||||||
|
|
||||||
|
Future<ApiResponse<List<Map<String, dynamic>>>> getEntities() async {
|
||||||
|
try {
|
||||||
|
final response =
|
||||||
|
await _helper.getGetApiResponse('$baseUrl$_endpointPath');
|
||||||
|
print('Response received: $response');
|
||||||
|
List<Map<String, dynamic>> entities = const [];
|
||||||
|
if (response is List) {
|
||||||
|
entities = response
|
||||||
|
.whereType<Map>()
|
||||||
|
.map((e) => Map<String, dynamic>.from(e as Map))
|
||||||
|
.toList();
|
||||||
|
} else if (response is Map<String, dynamic>) {
|
||||||
|
final dynamic content = response['content'];
|
||||||
|
if (content is List) {
|
||||||
|
entities = content
|
||||||
|
.whereType<Map>()
|
||||||
|
.map((e) => Map<String, dynamic>.from(e as Map))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ApiResponse.success(entities);
|
||||||
|
} catch (e) {
|
||||||
|
print(' error got $e');
|
||||||
|
return ApiResponse.error('Failed to get all entities: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<List<Map<String, dynamic>>>> getAllWithPagination(
|
||||||
|
int page, int size) async {
|
||||||
|
try {
|
||||||
|
final response = await _helper.getGetApiResponse(
|
||||||
|
'$baseUrl$_endpointPath/getall/page?page=$page&size=$size');
|
||||||
|
|
||||||
|
if (response is Map<String, dynamic> && response['content'] is List) {
|
||||||
|
final List<Map<String, dynamic>> entities =
|
||||||
|
(response['content'] as List).cast<Map<String, dynamic>>().toList();
|
||||||
|
return ApiResponse.success(entities);
|
||||||
|
} else {
|
||||||
|
return ApiResponse.error('Invalid response format');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to get all without pagination: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<Map<String, dynamic>>> createEntity(
|
||||||
|
Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
print("in post api$entity");
|
||||||
|
final response =
|
||||||
|
await _helper.getPostApiResponse('$baseUrl$_endpointPath', entity);
|
||||||
|
return ApiResponse.success(response as Map<String, dynamic>);
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to create entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<Map<String, dynamic>>> updateEntity(
|
||||||
|
int entityId, Map<String, dynamic> entity) async {
|
||||||
|
try {
|
||||||
|
final response = await _helper.getPutApiResponse(
|
||||||
|
'$baseUrl$_endpointPath/$entityId', entity);
|
||||||
|
return ApiResponse.success(response as Map<String, dynamic>);
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to update entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ApiResponse<void>> deleteEntity(int entityId) async {
|
||||||
|
try {
|
||||||
|
await _helper.getDeleteApiResponse('$baseUrl$_endpointPath/$entityId');
|
||||||
|
return ApiResponse.success(null);
|
||||||
|
} catch (e) {
|
||||||
|
return ApiResponse.error('Failed to delete entity: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,305 @@
|
|||||||
|
import 'package:base_project/data/response/status.dart';
|
||||||
|
import 'dart:typed_data';
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:http_parser/http_parser.dart';
|
||||||
|
import '../../../../utils/toast_messages/toast_message_util.dart';
|
||||||
|
import '../../../../BuilderField/shared/utils/entity_field_store.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import '../Testlist_Repo/Testlist_repo_screen.dart';
|
||||||
|
|
||||||
|
class TestlistViewModelScreen extends ChangeNotifier{
|
||||||
|
final TestlistRepoScreen repo = TestlistRepoScreen();
|
||||||
|
|
||||||
|
|
||||||
|
// State variables
|
||||||
|
List<Map<String, dynamic>> _testlistList = [];
|
||||||
|
List<Map<String, dynamic>> _filteredList = [];
|
||||||
|
bool _isLoading = false;
|
||||||
|
String _errorMessage = '';
|
||||||
|
int _currentPage = 0;
|
||||||
|
int _pageSize = 10;
|
||||||
|
bool _hasMoreData = true;
|
||||||
|
String _searchQuery = '';
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
List<Map<String, dynamic>> get testlistList => _testlistList;
|
||||||
|
List<Map<String, dynamic>> get filteredList => _filteredList;
|
||||||
|
bool get isLoading => _isLoading;
|
||||||
|
String get errorMessage => _errorMessage;
|
||||||
|
bool get hasMoreData => _hasMoreData;
|
||||||
|
String get searchQuery => _searchQuery;
|
||||||
|
|
||||||
|
// Set loading state
|
||||||
|
void _setLoading(bool loading) {
|
||||||
|
_isLoading = loading;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set error message
|
||||||
|
void _setError(String error) {
|
||||||
|
_errorMessage = error;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear error
|
||||||
|
void clearError() {
|
||||||
|
_errorMessage = '';
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get testlist list
|
||||||
|
Future<void> getEntities() async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.getEntities();
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
_testlistList = response.data ?? [];
|
||||||
|
_filteredList = List.from(_testlistList);
|
||||||
|
_currentPage = 0;
|
||||||
|
_hasMoreData = true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to fetch testlist list');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to fetch testlist list: $e');
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get testlist list with pagination
|
||||||
|
Future<void> getAllWithPagination({bool refresh = false}) async {
|
||||||
|
if (refresh) {
|
||||||
|
_currentPage = 0;
|
||||||
|
_testlistList.clear();
|
||||||
|
_filteredList.clear();
|
||||||
|
_hasMoreData = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_hasMoreData || _isLoading) return;
|
||||||
|
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.getAllWithPagination(_currentPage, _pageSize);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
final newItems = response.data ?? [];
|
||||||
|
|
||||||
|
if (refresh) {
|
||||||
|
_testlistList = newItems;
|
||||||
|
} else {
|
||||||
|
_testlistList.addAll(newItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
_filteredList = List.from(_testlistList);
|
||||||
|
_currentPage++;
|
||||||
|
|
||||||
|
// Check if we have more data
|
||||||
|
_hasMoreData = newItems.length == _pageSize;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to fetch Testlist list');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to fetch testlist list: $e');
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Create Testlist
|
||||||
|
Future<bool> createEntity(Map<String, dynamic> entity) async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
final response = await repo.createEntity(entity);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
// Get the response ID for image upload
|
||||||
|
|
||||||
|
final responseId = response.data!['id'].toString();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'testlist created successfully',
|
||||||
|
toastType: ToastType.success,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Refresh the list
|
||||||
|
await getEntities();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to create Testlist');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: response.message ?? 'Failed to create Testlist',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to create testlist: $e');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Failed to create Testlist: $e',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update testlist
|
||||||
|
Future<bool> updateEntity(int id, Map<String, dynamic> entity) async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.updateEntity(id, entity);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Testlist updated successfully',
|
||||||
|
toastType: ToastType.success,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Update the item in the list
|
||||||
|
final index = _testlistList.indexWhere((item) => item['id'] == id);
|
||||||
|
if (index != -1) {
|
||||||
|
_testlistList[index] = response.data!;
|
||||||
|
_filteredList = List.from(_testlistList);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to update Testlist');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: response.message ?? 'Failed to update Testlist',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to update testlist: $e');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Failed to update Testlist: $e',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete testlist
|
||||||
|
Future<bool> deleteEntity(int id) async {
|
||||||
|
_setLoading(true);
|
||||||
|
_setError('');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await repo.deleteEntity(id);
|
||||||
|
|
||||||
|
if (response.status == Status.SUCCESS) {
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Testlist deleted successfully',
|
||||||
|
toastType: ToastType.success,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Remove the item from the list
|
||||||
|
_testlistList.removeWhere((item) => item['id'] == id);
|
||||||
|
_filteredList = List.from(_testlistList);
|
||||||
|
notifyListeners();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
_setError(response.message ?? 'Failed to delete Testlist');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: response.message ?? 'Failed to delete Testlist',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
_setError('Failed to delete testlist: $e');
|
||||||
|
ToastMessageUtil.showToast(
|
||||||
|
message: 'Failed to delete Testlist: $e',
|
||||||
|
toastType: ToastType.error,
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
_setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search testlist
|
||||||
|
void searchtestlist(String query) {
|
||||||
|
_searchQuery = query;
|
||||||
|
|
||||||
|
if (query.isEmpty) {
|
||||||
|
_filteredList = List.from(_testlistList);
|
||||||
|
} else {
|
||||||
|
_filteredList = _testlistList.where((item) {
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
(item['name']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(item['description']?.toString().toLowerCase().contains(query.toLowerCase()) ??false) ||
|
||||||
|
|
||||||
|
|
||||||
|
(item['active']?.toString().toLowerCase().contains(query.toLowerCase()) ??false)
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear search
|
||||||
|
void clearSearch() {
|
||||||
|
_searchQuery = '';
|
||||||
|
_filteredList = List.from(_testlistList);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh data
|
||||||
|
Future<void> refreshData() async {
|
||||||
|
await getAllWithPagination(refresh: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@ -69,6 +69,15 @@ public class BuilderService {
|
|||||||
executeDump(true);
|
executeDump(true);
|
||||||
|
|
||||||
// ADD OTHER SERVICE
|
// ADD OTHER SERVICE
|
||||||
|
addCustomMenu( "Testlist","Testlist", "Transcations");
|
||||||
|
|
||||||
|
|
||||||
|
addCustomMenu( "Child","Child", "Transcations");
|
||||||
|
|
||||||
|
|
||||||
|
addCustomMenu( "Testbug","Testbug", "Transcations");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println("dashboard and menu inserted...");
|
System.out.println("dashboard and menu inserted...");
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,83 @@
|
|||||||
|
package com.realnet.basic1.Controllers;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.realnet.config.EmailService;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.data.domain.*;
|
||||||
|
import com.realnet.fnd.response.EntityResponse;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import org.springframework.beans.factory.annotation.*;
|
||||||
|
import com.realnet.basic1.Entity.Child;
|
||||||
|
import com.realnet.basic1.Services.ChildService ;
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "/Child")
|
||||||
|
@CrossOrigin("*")
|
||||||
|
@RestController
|
||||||
|
public class ChildController {
|
||||||
|
@Autowired
|
||||||
|
private ChildService Service;
|
||||||
|
|
||||||
|
@Value("${projectPath}")
|
||||||
|
private String projectPath;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/Child")
|
||||||
|
public Child Savedata(@RequestBody Child data) {
|
||||||
|
Child save = Service.Savedata(data) ;
|
||||||
|
|
||||||
|
System.out.println("data saved..." + save);
|
||||||
|
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
@PutMapping("/Child/{id}")
|
||||||
|
public Child update(@RequestBody Child data,@PathVariable Integer id ) {
|
||||||
|
Child update = Service.update(data,id);
|
||||||
|
System.out.println("data update..." + update);
|
||||||
|
return update;
|
||||||
|
}
|
||||||
|
// get all with pagination
|
||||||
|
@GetMapping("/Child/getall/page")
|
||||||
|
public Page<Child> getall(@RequestParam(value = "page", required = false) Integer page,
|
||||||
|
@RequestParam(value = "size", required = false) Integer size) {
|
||||||
|
Pageable paging = PageRequest.of(page, size);
|
||||||
|
Page<Child> get = Service.getAllWithPagination(paging);
|
||||||
|
|
||||||
|
return get;
|
||||||
|
|
||||||
|
}
|
||||||
|
@GetMapping("/Child")
|
||||||
|
public List<Child> getdetails() {
|
||||||
|
List<Child> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
// get all without authentication
|
||||||
|
|
||||||
|
@GetMapping("/token/Child")
|
||||||
|
public List<Child> getallwioutsec() {
|
||||||
|
List<Child> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@GetMapping("/Child/{id}")
|
||||||
|
public Child getdetailsbyId(@PathVariable Integer id ) {
|
||||||
|
Child get = Service.getdetailsbyId(id);
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@DeleteMapping("/Child/{id}")
|
||||||
|
public ResponseEntity<?> delete_by_id(@PathVariable Integer id ) {
|
||||||
|
Service.delete_by_id(id);
|
||||||
|
return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,155 @@
|
|||||||
|
package com.realnet.basic1.Controllers;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.realnet.config.EmailService;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.data.domain.*;
|
||||||
|
import com.realnet.fnd.response.EntityResponse;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import org.springframework.beans.factory.annotation.*;
|
||||||
|
import com.realnet.basic1.Entity.Testbug;
|
||||||
|
import com.realnet.basic1.Services.TestbugService ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "/Testbug")
|
||||||
|
@CrossOrigin("*")
|
||||||
|
@RestController
|
||||||
|
public class TestbugController {
|
||||||
|
@Autowired
|
||||||
|
private TestbugService Service;
|
||||||
|
|
||||||
|
@Value("${projectPath}")
|
||||||
|
private String projectPath;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/Testbug")
|
||||||
|
public Testbug Savedata(@RequestBody Testbug data) {
|
||||||
|
Testbug save = Service.Savedata(data) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("data saved..." + save);
|
||||||
|
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
@PutMapping("/Testbug/{id}")
|
||||||
|
public Testbug update(@RequestBody Testbug data,@PathVariable Integer id ) {
|
||||||
|
Testbug update = Service.update(data,id);
|
||||||
|
System.out.println("data update..." + update);
|
||||||
|
return update;
|
||||||
|
}
|
||||||
|
// get all with pagination
|
||||||
|
@GetMapping("/Testbug/getall/page")
|
||||||
|
public Page<Testbug> getall(@RequestParam(value = "page", required = false) Integer page,
|
||||||
|
@RequestParam(value = "size", required = false) Integer size) {
|
||||||
|
Pageable paging = PageRequest.of(page, size);
|
||||||
|
Page<Testbug> get = Service.getAllWithPagination(paging);
|
||||||
|
|
||||||
|
return get;
|
||||||
|
|
||||||
|
}
|
||||||
|
@GetMapping("/Testbug")
|
||||||
|
public List<Testbug> getdetails() {
|
||||||
|
List<Testbug> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
// get all without authentication
|
||||||
|
|
||||||
|
@GetMapping("/token/Testbug")
|
||||||
|
public List<Testbug> getallwioutsec() {
|
||||||
|
List<Testbug> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@GetMapping("/Testbug/{id}")
|
||||||
|
public Testbug getdetailsbyId(@PathVariable Integer id ) {
|
||||||
|
Testbug get = Service.getdetailsbyId(id);
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@DeleteMapping("/Testbug/{id}")
|
||||||
|
public ResponseEntity<?> delete_by_id(@PathVariable Integer id ) {
|
||||||
|
Service.delete_by_id(id);
|
||||||
|
return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
package com.realnet.basic1.Controllers;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.realnet.config.EmailService;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.data.domain.*;
|
||||||
|
import com.realnet.fnd.response.EntityResponse;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import org.springframework.beans.factory.annotation.*;
|
||||||
|
import com.realnet.basic1.Entity.Testlist;
|
||||||
|
import com.realnet.basic1.Services.TestlistService ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "/Testlist")
|
||||||
|
@CrossOrigin("*")
|
||||||
|
@RestController
|
||||||
|
public class TestlistController {
|
||||||
|
@Autowired
|
||||||
|
private TestlistService Service;
|
||||||
|
|
||||||
|
@Value("${projectPath}")
|
||||||
|
private String projectPath;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/Testlist")
|
||||||
|
public Testlist Savedata(@RequestBody Testlist data) {
|
||||||
|
Testlist save = Service.Savedata(data) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("data saved..." + save);
|
||||||
|
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
@PutMapping("/Testlist/{id}")
|
||||||
|
public Testlist update(@RequestBody Testlist data,@PathVariable Integer id ) {
|
||||||
|
Testlist update = Service.update(data,id);
|
||||||
|
System.out.println("data update..." + update);
|
||||||
|
return update;
|
||||||
|
}
|
||||||
|
// get all with pagination
|
||||||
|
@GetMapping("/Testlist/getall/page")
|
||||||
|
public Page<Testlist> getall(@RequestParam(value = "page", required = false) Integer page,
|
||||||
|
@RequestParam(value = "size", required = false) Integer size) {
|
||||||
|
Pageable paging = PageRequest.of(page, size);
|
||||||
|
Page<Testlist> get = Service.getAllWithPagination(paging);
|
||||||
|
|
||||||
|
return get;
|
||||||
|
|
||||||
|
}
|
||||||
|
@GetMapping("/Testlist")
|
||||||
|
public List<Testlist> getdetails() {
|
||||||
|
List<Testlist> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
// get all without authentication
|
||||||
|
|
||||||
|
@GetMapping("/token/Testlist")
|
||||||
|
public List<Testlist> getallwioutsec() {
|
||||||
|
List<Testlist> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@GetMapping("/Testlist/{id}")
|
||||||
|
public Testlist getdetailsbyId(@PathVariable Integer id ) {
|
||||||
|
Testlist get = Service.getdetailsbyId(id);
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@DeleteMapping("/Testlist/{id}")
|
||||||
|
public ResponseEntity<?> delete_by_id(@PathVariable Integer id ) {
|
||||||
|
Service.delete_by_id(id);
|
||||||
|
return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
package com.realnet.basic1.Controllers;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import com.realnet.basic1.Entity.Testlist_ListFilter1;
|
||||||
|
import com.realnet.basic1.Services.Testlist_ListFilter1Service ;
|
||||||
|
@RequestMapping(value = "/Testlist_ListFilter1")
|
||||||
|
@RestController
|
||||||
|
public class Testlist_ListFilter1Controller {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private Testlist_ListFilter1Service Service;
|
||||||
|
|
||||||
|
@GetMapping("/Testlist_ListFilter1")
|
||||||
|
public List<Testlist_ListFilter1> getlist() {
|
||||||
|
List<Testlist_ListFilter1> get = Service.getlistbuilder();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@GetMapping("/Testlist_ListFilter11")
|
||||||
|
public List<Testlist_ListFilter1> getlistwithparam( ) {
|
||||||
|
List<Testlist_ListFilter1> get = Service.getlistbuilderparam( );
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
package com.realnet.basic1.Controllers;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.realnet.config.EmailService;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.data.domain.*;
|
||||||
|
import com.realnet.fnd.response.EntityResponse;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import org.springframework.beans.factory.annotation.*;
|
||||||
|
import com.realnet.basic1.Entity.Child;
|
||||||
|
import com.realnet.basic1.Services.ChildService ;
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "/token/Child")
|
||||||
|
@CrossOrigin("*")
|
||||||
|
@RestController
|
||||||
|
public class tokenFree_ChildController {
|
||||||
|
@Autowired
|
||||||
|
private ChildService Service;
|
||||||
|
|
||||||
|
@Value("${projectPath}")
|
||||||
|
private String projectPath;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/Child")
|
||||||
|
public Child Savedata(@RequestBody Child data) {
|
||||||
|
Child save = Service.Savedata(data) ;
|
||||||
|
|
||||||
|
System.out.println("data saved..." + save);
|
||||||
|
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
@PutMapping("/Child/{id}")
|
||||||
|
public Child update(@RequestBody Child data,@PathVariable Integer id ) {
|
||||||
|
Child update = Service.update(data,id);
|
||||||
|
System.out.println("data update..." + update);
|
||||||
|
return update;
|
||||||
|
}
|
||||||
|
// get all with pagination
|
||||||
|
@GetMapping("/Child/getall/page")
|
||||||
|
public Page<Child> getall(@RequestParam(value = "page", required = false) Integer page,
|
||||||
|
@RequestParam(value = "size", required = false) Integer size) {
|
||||||
|
Pageable paging = PageRequest.of(page, size);
|
||||||
|
Page<Child> get = Service.getAllWithPagination(paging);
|
||||||
|
|
||||||
|
return get;
|
||||||
|
|
||||||
|
}
|
||||||
|
@GetMapping("/Child")
|
||||||
|
public List<Child> getdetails() {
|
||||||
|
List<Child> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
// get all without authentication
|
||||||
|
|
||||||
|
@GetMapping("/token/Child")
|
||||||
|
public List<Child> getallwioutsec() {
|
||||||
|
List<Child> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@GetMapping("/Child/{id}")
|
||||||
|
public Child getdetailsbyId(@PathVariable Integer id ) {
|
||||||
|
Child get = Service.getdetailsbyId(id);
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@DeleteMapping("/Child/{id}")
|
||||||
|
public ResponseEntity<?> delete_by_id(@PathVariable Integer id ) {
|
||||||
|
Service.delete_by_id(id);
|
||||||
|
return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,155 @@
|
|||||||
|
package com.realnet.basic1.Controllers;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.realnet.config.EmailService;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.data.domain.*;
|
||||||
|
import com.realnet.fnd.response.EntityResponse;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import org.springframework.beans.factory.annotation.*;
|
||||||
|
import com.realnet.basic1.Entity.Testbug;
|
||||||
|
import com.realnet.basic1.Services.TestbugService ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "/token/Testbug")
|
||||||
|
@CrossOrigin("*")
|
||||||
|
@RestController
|
||||||
|
public class tokenFree_TestbugController {
|
||||||
|
@Autowired
|
||||||
|
private TestbugService Service;
|
||||||
|
|
||||||
|
@Value("${projectPath}")
|
||||||
|
private String projectPath;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/Testbug")
|
||||||
|
public Testbug Savedata(@RequestBody Testbug data) {
|
||||||
|
Testbug save = Service.Savedata(data) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("data saved..." + save);
|
||||||
|
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
@PutMapping("/Testbug/{id}")
|
||||||
|
public Testbug update(@RequestBody Testbug data,@PathVariable Integer id ) {
|
||||||
|
Testbug update = Service.update(data,id);
|
||||||
|
System.out.println("data update..." + update);
|
||||||
|
return update;
|
||||||
|
}
|
||||||
|
// get all with pagination
|
||||||
|
@GetMapping("/Testbug/getall/page")
|
||||||
|
public Page<Testbug> getall(@RequestParam(value = "page", required = false) Integer page,
|
||||||
|
@RequestParam(value = "size", required = false) Integer size) {
|
||||||
|
Pageable paging = PageRequest.of(page, size);
|
||||||
|
Page<Testbug> get = Service.getAllWithPagination(paging);
|
||||||
|
|
||||||
|
return get;
|
||||||
|
|
||||||
|
}
|
||||||
|
@GetMapping("/Testbug")
|
||||||
|
public List<Testbug> getdetails() {
|
||||||
|
List<Testbug> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
// get all without authentication
|
||||||
|
|
||||||
|
@GetMapping("/token/Testbug")
|
||||||
|
public List<Testbug> getallwioutsec() {
|
||||||
|
List<Testbug> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@GetMapping("/Testbug/{id}")
|
||||||
|
public Testbug getdetailsbyId(@PathVariable Integer id ) {
|
||||||
|
Testbug get = Service.getdetailsbyId(id);
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@DeleteMapping("/Testbug/{id}")
|
||||||
|
public ResponseEntity<?> delete_by_id(@PathVariable Integer id ) {
|
||||||
|
Service.delete_by_id(id);
|
||||||
|
return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
package com.realnet.basic1.Controllers;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
|
import com.realnet.config.EmailService;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.data.domain.*;
|
||||||
|
import com.realnet.fnd.response.EntityResponse;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import org.springframework.beans.factory.annotation.*;
|
||||||
|
import com.realnet.basic1.Entity.Testlist;
|
||||||
|
import com.realnet.basic1.Services.TestlistService ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "/token/Testlist")
|
||||||
|
@CrossOrigin("*")
|
||||||
|
@RestController
|
||||||
|
public class tokenFree_TestlistController {
|
||||||
|
@Autowired
|
||||||
|
private TestlistService Service;
|
||||||
|
|
||||||
|
@Value("${projectPath}")
|
||||||
|
private String projectPath;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/Testlist")
|
||||||
|
public Testlist Savedata(@RequestBody Testlist data) {
|
||||||
|
Testlist save = Service.Savedata(data) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("data saved..." + save);
|
||||||
|
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
@PutMapping("/Testlist/{id}")
|
||||||
|
public Testlist update(@RequestBody Testlist data,@PathVariable Integer id ) {
|
||||||
|
Testlist update = Service.update(data,id);
|
||||||
|
System.out.println("data update..." + update);
|
||||||
|
return update;
|
||||||
|
}
|
||||||
|
// get all with pagination
|
||||||
|
@GetMapping("/Testlist/getall/page")
|
||||||
|
public Page<Testlist> getall(@RequestParam(value = "page", required = false) Integer page,
|
||||||
|
@RequestParam(value = "size", required = false) Integer size) {
|
||||||
|
Pageable paging = PageRequest.of(page, size);
|
||||||
|
Page<Testlist> get = Service.getAllWithPagination(paging);
|
||||||
|
|
||||||
|
return get;
|
||||||
|
|
||||||
|
}
|
||||||
|
@GetMapping("/Testlist")
|
||||||
|
public List<Testlist> getdetails() {
|
||||||
|
List<Testlist> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
// get all without authentication
|
||||||
|
|
||||||
|
@GetMapping("/token/Testlist")
|
||||||
|
public List<Testlist> getallwioutsec() {
|
||||||
|
List<Testlist> get = Service.getdetails();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@GetMapping("/Testlist/{id}")
|
||||||
|
public Testlist getdetailsbyId(@PathVariable Integer id ) {
|
||||||
|
Testlist get = Service.getdetailsbyId(id);
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@DeleteMapping("/Testlist/{id}")
|
||||||
|
public ResponseEntity<?> delete_by_id(@PathVariable Integer id ) {
|
||||||
|
Service.delete_by_id(id);
|
||||||
|
return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
package com.realnet.basic1.Controllers;
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import com.realnet.basic1.Entity.Testlist_ListFilter1;
|
||||||
|
import com.realnet.basic1.Services.Testlist_ListFilter1Service ;
|
||||||
|
@RequestMapping(value = "/token/Testlist_ListFilter1")
|
||||||
|
@RestController
|
||||||
|
public class tokenFree_Testlist_ListFilter1Controller {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private Testlist_ListFilter1Service Service;
|
||||||
|
|
||||||
|
@GetMapping("/Testlist_ListFilter1")
|
||||||
|
public List<Testlist_ListFilter1> getlist() {
|
||||||
|
List<Testlist_ListFilter1> get = Service.getlistbuilder();
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
@GetMapping("/Testlist_ListFilter11")
|
||||||
|
public List<Testlist_ListFilter1> getlistwithparam( ) {
|
||||||
|
List<Testlist_ListFilter1> get = Service.getlistbuilderparam( );
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
package com.realnet.basic1.Entity;
|
||||||
|
import lombok.*;
|
||||||
|
import com.realnet.WhoColumn.Entity.Extension;
|
||||||
|
import javax.persistence.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Data
|
||||||
|
public class Child extends Extension {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String namek;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
package com.realnet.basic1.Entity;
|
||||||
|
import lombok.*;
|
||||||
|
import com.realnet.WhoColumn.Entity.Extension;
|
||||||
|
import javax.persistence.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.realnet.basic1.Entity.Child;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Data
|
||||||
|
public class Testbug extends Extension {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String fileupload_fieldsname;
|
||||||
|
private String fileupload_fieldspath ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private String bar_code;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private String qr_code;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@OneToOne( cascade=CascadeType.ALL)
|
||||||
|
private Child child;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private String select_dyanamic;
|
||||||
|
private String select_dyanamicidentifier;
|
||||||
|
|
||||||
|
private String select_dynamic_mul;
|
||||||
|
|
||||||
|
private String select_autocomp;
|
||||||
|
private String select_autocompidentifier;
|
||||||
|
|
||||||
|
private String select_autcomp_mul;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
package com.realnet.basic1.Entity;
|
||||||
|
import lombok.*;
|
||||||
|
import com.realnet.WhoColumn.Entity.Extension;
|
||||||
|
import javax.persistence.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Data
|
||||||
|
public class Testlist extends Extension {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Column(length = 2000)
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
private Boolean active;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
package com.realnet.basic1.Entity;
|
||||||
|
import lombok.*;
|
||||||
|
import javax.persistence.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Testlist_ListFilter1 {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package com.realnet.basic1.Repository;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.realnet.basic1.Entity.Child;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface ChildRepository extends JpaRepository<Child, Integer> {
|
||||||
|
|
||||||
|
@Query(value = "select * from child where created_by=?1", nativeQuery = true)
|
||||||
|
List<Child> findAll(Long creayedBy);
|
||||||
|
|
||||||
|
@Query(value = "select * from child where created_by=?1", nativeQuery = true)
|
||||||
|
Page<Child> findAll( Long creayedBy,Pageable page);
|
||||||
|
}
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
package com.realnet.basic1.Repository;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.realnet.basic1.Entity.Testbug;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface TestbugRepository extends JpaRepository<Testbug, Integer> {
|
||||||
|
|
||||||
|
@Query(value = "select * from testbug where created_by=?1", nativeQuery = true)
|
||||||
|
List<Testbug> findAll(Long creayedBy);
|
||||||
|
|
||||||
|
@Query(value = "select * from testbug where created_by=?1", nativeQuery = true)
|
||||||
|
Page<Testbug> findAll( Long creayedBy,Pageable page);
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package com.realnet.basic1.Repository;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.realnet.basic1.Entity.Testlist;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface TestlistRepository extends JpaRepository<Testlist, Integer> {
|
||||||
|
|
||||||
|
@Query(value = "select * from testlist where created_by=?1", nativeQuery = true)
|
||||||
|
List<Testlist> findAll(Long creayedBy);
|
||||||
|
|
||||||
|
@Query(value = "select * from testlist where created_by=?1", nativeQuery = true)
|
||||||
|
Page<Testlist> findAll( Long creayedBy,Pageable page);
|
||||||
|
}
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
package com.realnet.basic1.Services;
|
||||||
|
import com.realnet.basic1.Repository.ChildRepository;
|
||||||
|
import com.realnet.basic1.Entity.Child
|
||||||
|
;import java.util.*;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import com.realnet.SequenceGenerator.Service.SequenceService;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import com.realnet.realm.Entity.Realm;
|
||||||
|
import com.realnet.realm.Services.RealmService;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class ChildService {
|
||||||
|
@Autowired
|
||||||
|
private ChildRepository Repository;
|
||||||
|
@Autowired
|
||||||
|
private AppUserServiceImpl userService;
|
||||||
|
@Autowired
|
||||||
|
private RealmService realmService;
|
||||||
|
|
||||||
|
public Child Savedata(Child data) {
|
||||||
|
|
||||||
|
|
||||||
|
data.setUpdatedBy(getUser().getUserId());
|
||||||
|
data.setCreatedBy(getUser().getUserId());
|
||||||
|
data.setAccountId(getUser().getAccount().getAccount_id());
|
||||||
|
Child save = Repository.save(data);
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get all with pagination
|
||||||
|
public Page<Child> getAllWithPagination(Pageable page) {
|
||||||
|
return Repository.findAll( getUser().getUserId(),page);
|
||||||
|
}
|
||||||
|
public List<Child> getdetails() {
|
||||||
|
List<Realm> realm = realmService.findByUserId(getUser().getUserId());
|
||||||
|
List<Child> all = Repository.findAll(getUser().getUserId());
|
||||||
|
|
||||||
|
return all ; }
|
||||||
|
|
||||||
|
|
||||||
|
public Child getdetailsbyId(Integer id) {
|
||||||
|
return Repository.findById(id).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void delete_by_id(Integer id) {
|
||||||
|
Repository.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Child update(Child data,Integer id) {
|
||||||
|
Child old = Repository.findById(id).get();
|
||||||
|
old.setNamek(data.getNamek());
|
||||||
|
|
||||||
|
final Child test = Repository.save(old);
|
||||||
|
data.setUpdatedBy(getUser().getUserId());
|
||||||
|
return test;}
|
||||||
|
|
||||||
|
|
||||||
|
public AppUser getUser() {
|
||||||
|
AppUser user = userService.getLoggedInUser();
|
||||||
|
return user;
|
||||||
|
|
||||||
|
}}
|
||||||
@ -0,0 +1,219 @@
|
|||||||
|
package com.realnet.basic1.Services;
|
||||||
|
import com.realnet.basic1.Repository.TestbugRepository;
|
||||||
|
import com.realnet.basic1.Entity.Testbug
|
||||||
|
;import java.util.*;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import com.realnet.SequenceGenerator.Service.SequenceService;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import com.realnet.realm.Entity.Realm;
|
||||||
|
import com.realnet.realm.Services.RealmService;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.realnet.basic1.Entity.Testlist;
|
||||||
|
import com.realnet.basic1.Services.TestlistService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.realnet.basic1.Entity.Testlist;
|
||||||
|
import com.realnet.basic1.Services.TestlistService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class TestbugService {
|
||||||
|
@Autowired
|
||||||
|
private TestbugRepository Repository;
|
||||||
|
@Autowired
|
||||||
|
private AppUserServiceImpl userService;
|
||||||
|
@Autowired
|
||||||
|
private RealmService realmService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TestlistService select_dyanamicserv;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TestlistService select_autocompserv;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public Testbug Savedata(Testbug data) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (data.getSelect_dyanamic() != null) {
|
||||||
|
try {
|
||||||
|
int select_dyanamicId = Integer.valueOf(data.getSelect_dyanamic());
|
||||||
|
Testlist get = select_dyanamicserv.getdetailsbyId(select_dyanamicId);
|
||||||
|
if (get != null) {
|
||||||
|
|
||||||
|
data.setSelect_dyanamicidentifier(get.getName());
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
System.out.println(" select_dyanamicId is not integer..");
|
||||||
|
// Invalid integer string — ignore or log
|
||||||
|
data.setSelect_dyanamicidentifier(data.getSelect_dyanamic());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (data.getSelect_autocomp() != null) {
|
||||||
|
try {
|
||||||
|
int select_autocompId = Integer.valueOf(data.getSelect_autocomp());
|
||||||
|
Testlist get = select_autocompserv.getdetailsbyId(select_autocompId);
|
||||||
|
if (get != null) {
|
||||||
|
|
||||||
|
data.setSelect_autocompidentifier(get.getName());
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
System.out.println(" select_autocompId is not integer..");
|
||||||
|
// Invalid integer string — ignore or log
|
||||||
|
data.setSelect_autocompidentifier(data.getSelect_autocomp());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data.setUpdatedBy(getUser().getUserId());
|
||||||
|
data.setCreatedBy(getUser().getUserId());
|
||||||
|
data.setAccountId(getUser().getAccount().getAccount_id());
|
||||||
|
Testbug save = Repository.save(data);
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get all with pagination
|
||||||
|
public Page<Testbug> getAllWithPagination(Pageable page) {
|
||||||
|
return Repository.findAll( getUser().getUserId(),page);
|
||||||
|
}
|
||||||
|
public List<Testbug> getdetails() {
|
||||||
|
List<Realm> realm = realmService.findByUserId(getUser().getUserId());
|
||||||
|
List<Testbug> all = Repository.findAll(getUser().getUserId());
|
||||||
|
|
||||||
|
return all ; }
|
||||||
|
|
||||||
|
|
||||||
|
public Testbug getdetailsbyId(Integer id) {
|
||||||
|
return Repository.findById(id).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void delete_by_id(Integer id) {
|
||||||
|
Repository.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Testbug update(Testbug data,Integer id) {
|
||||||
|
Testbug old = Repository.findById(id).get();
|
||||||
|
old.setName(data.getName());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
old.setBar_code(data.getBar_code());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
old.setQr_code(data.getQr_code());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
old.setChild(data.getChild());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
old.setSelect_dyanamic(data.getSelect_dyanamic());
|
||||||
|
|
||||||
|
old.setSelect_dynamic_mul(data.getSelect_dynamic_mul());
|
||||||
|
|
||||||
|
old.setSelect_autocomp(data.getSelect_autocomp());
|
||||||
|
|
||||||
|
old.setSelect_autcomp_mul(data.getSelect_autcomp_mul());
|
||||||
|
|
||||||
|
final Testbug test = Repository.save(old);
|
||||||
|
data.setUpdatedBy(getUser().getUserId());
|
||||||
|
return test;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public AppUser getUser() {
|
||||||
|
AppUser user = userService.getLoggedInUser();
|
||||||
|
return user;
|
||||||
|
|
||||||
|
}}
|
||||||
@ -0,0 +1,93 @@
|
|||||||
|
package com.realnet.basic1.Services;
|
||||||
|
import com.realnet.basic1.Repository.TestlistRepository;
|
||||||
|
import com.realnet.basic1.Entity.Testlist
|
||||||
|
;import java.util.*;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import com.realnet.SequenceGenerator.Service.SequenceService;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import com.realnet.realm.Entity.Realm;
|
||||||
|
import com.realnet.realm.Services.RealmService;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import com.realnet.users.service1.AppUserServiceImpl;
|
||||||
|
import com.realnet.users.entity1.AppUser;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class TestlistService {
|
||||||
|
@Autowired
|
||||||
|
private TestlistRepository Repository;
|
||||||
|
@Autowired
|
||||||
|
private AppUserServiceImpl userService;
|
||||||
|
@Autowired
|
||||||
|
private RealmService realmService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public Testlist Savedata(Testlist data) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data.setUpdatedBy(getUser().getUserId());
|
||||||
|
data.setCreatedBy(getUser().getUserId());
|
||||||
|
data.setAccountId(getUser().getAccount().getAccount_id());
|
||||||
|
Testlist save = Repository.save(data);
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get all with pagination
|
||||||
|
public Page<Testlist> getAllWithPagination(Pageable page) {
|
||||||
|
return Repository.findAll( getUser().getUserId(),page);
|
||||||
|
}
|
||||||
|
public List<Testlist> getdetails() {
|
||||||
|
List<Realm> realm = realmService.findByUserId(getUser().getUserId());
|
||||||
|
List<Testlist> all = Repository.findAll(getUser().getUserId());
|
||||||
|
|
||||||
|
return all ; }
|
||||||
|
|
||||||
|
|
||||||
|
public Testlist getdetailsbyId(Integer id) {
|
||||||
|
return Repository.findById(id).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void delete_by_id(Integer id) {
|
||||||
|
Repository.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Testlist update(Testlist data,Integer id) {
|
||||||
|
Testlist old = Repository.findById(id).get();
|
||||||
|
old.setName(data.getName());
|
||||||
|
|
||||||
|
old.setDescription(data.getDescription());
|
||||||
|
|
||||||
|
old.setActive (data.getActive());
|
||||||
|
|
||||||
|
final Testlist test = Repository.save(old);
|
||||||
|
data.setUpdatedBy(getUser().getUserId());
|
||||||
|
return test;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public AppUser getUser() {
|
||||||
|
AppUser user = userService.getLoggedInUser();
|
||||||
|
return user;
|
||||||
|
|
||||||
|
}}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
package com.realnet.basic1.Services;
|
||||||
|
import java.util.*;
|
||||||
|
import com.realnet.basic1.Repository.TestlistRepository;
|
||||||
|
import com.realnet.basic1.Entity.Testlist;
|
||||||
|
|
||||||
|
import com.realnet.basic1.Entity.Testlist_ListFilter1;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class Testlist_ListFilter1Service {
|
||||||
|
@Autowired
|
||||||
|
private TestlistRepository Repository;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public List<Testlist_ListFilter1> getlistbuilder() {
|
||||||
|
List<Testlist> list= Repository.findAll();
|
||||||
|
ArrayList<Testlist_ListFilter1> l = new ArrayList<>();
|
||||||
|
for (Testlist data : list) {
|
||||||
|
Boolean isActive = data.getActive();
|
||||||
|
|
||||||
|
if (Boolean.TRUE.equals(isActive)) {{
|
||||||
|
Testlist_ListFilter1 dummy = new Testlist_ListFilter1();
|
||||||
|
dummy.setId(data.getId());
|
||||||
|
dummy.setName(data.getName());
|
||||||
|
l.add(dummy);
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
return l;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public List<Testlist_ListFilter1> getlistbuilderparam( ) {
|
||||||
|
List<Testlist> list= Repository.findAll();
|
||||||
|
ArrayList<Testlist_ListFilter1> l = new ArrayList<>();
|
||||||
|
for (Testlist data : list) {
|
||||||
|
Boolean isActive = data.getActive();
|
||||||
|
|
||||||
|
if (Boolean.TRUE.equals(isActive)) {{
|
||||||
|
Testlist_ListFilter1 dummy = new Testlist_ListFilter1();
|
||||||
|
dummy.setId(data.getId());
|
||||||
|
dummy.setName(data.getName());
|
||||||
|
l.add(dummy);
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
return l;}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user