Bug 931, 934 fixed

design_3.0_task_module_new
WaseemAbbasi22 4 months ago
parent 116855878b
commit ac45e20711

@ -50,7 +50,7 @@ class TaskData {
int? id; int? id;
int? statusValue; int? statusValue;
String? taskJobNo; String? taskJobNo;
User? userCreated; TaskContactUser? userCreated;
List<TaskJobContactPerson>? taskJobContactPersons; List<TaskJobContactPerson>? taskJobContactPersons;
TaskTypeModel? taskType; TaskTypeModel? taskType;
TaskJobStatus? taskJobStatus; TaskJobStatus? taskJobStatus;
@ -62,7 +62,7 @@ class TaskData {
Rooms? room; Rooms? room;
String? callComment; String? callComment;
List<TaskJobAttachment>? taskJobAttachments; List<TaskJobAttachment>? taskJobAttachments;
User? assignedEngineer; TaskContactUser? assignedEngineer;
List<TaskJobAssistantEmployees>? taskJobAssistantEmployees; List<TaskJobAssistantEmployees>? taskJobAssistantEmployees;
TaskJobAssistantEmployees? modelAssistantEmployees; TaskJobAssistantEmployees? modelAssistantEmployees;
List<AssistantEmployees>? assistantEmployees; List<AssistantEmployees>? assistantEmployees;
@ -83,7 +83,7 @@ class TaskData {
String? estimationDeliveryDate; String? estimationDeliveryDate;
String? reasonOfFSCA; String? reasonOfFSCA;
String? correctiveActionDescription; String? correctiveActionDescription;
User? evaluatorUser; TaskContactUser? evaluatorUser;
List<TaskJobActivityEngineerTimer>? taskJobActivityEngineerTimers = []; List<TaskJobActivityEngineerTimer>? taskJobActivityEngineerTimers = [];
TimerModel? taskTimerModel = TimerModel(); TimerModel? taskTimerModel = TimerModel();
double? totalWorkingHours = 0.0; double? totalWorkingHours = 0.0;
@ -133,7 +133,8 @@ class TaskData {
TaskData.fromJson(Map<String, dynamic> json) { TaskData.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
taskJobNo = json['taskJobNo']; taskJobNo = json['taskJobNo'];
userCreated = json['userCreated'] != null ? User.fromJson(json['userCreated']) : null; userCreated = json['userCreated'] != null ? TaskContactUser.fromJson(json['userCreated']) : null;
if (json['taskJobContactPersons'] != null) { if (json['taskJobContactPersons'] != null) {
taskJobContactPersons = <TaskJobContactPerson>[]; taskJobContactPersons = <TaskJobContactPerson>[];
json['taskJobContactPersons'].forEach((v) { json['taskJobContactPersons'].forEach((v) {
@ -155,7 +156,8 @@ class TaskData {
taskJobAttachments!.add(TaskJobAttachment.fromJson(v)); taskJobAttachments!.add(TaskJobAttachment.fromJson(v));
}); });
} }
assignedEngineer = json['assignedEngineer'] != null ? User.fromJson(json['assignedEngineer']) : null; assignedEngineer = json['assignedEngineer'] != null ? TaskContactUser.fromJson(json['assignedEngineer']) : null;
asset = json['asset'] != null ? TaskAsset.fromJson(json['asset']) : null; asset = json['asset'] != null ? TaskAsset.fromJson(json['asset']) : null;
if (json['taskJobAssistantEmployees'] != null) { if (json['taskJobAssistantEmployees'] != null) {
taskJobAssistantEmployees = <TaskJobAssistantEmployees>[]; taskJobAssistantEmployees = <TaskJobAssistantEmployees>[];
@ -205,7 +207,7 @@ class TaskData {
estimationDeliveryDate = json['estimationDeliveryDate']; estimationDeliveryDate = json['estimationDeliveryDate'];
reasonOfFSCA = json['reasonOfFSCA']; reasonOfFSCA = json['reasonOfFSCA'];
correctiveActionDescription = json['correctiveActionDescription']; correctiveActionDescription = json['correctiveActionDescription'];
evaluatorUser = json['evaluatorUser'] != null ? User.fromJson(json['evaluatorUser']) : null; evaluatorUser = json['evaluatorUser'] != null ? TaskContactUser.fromJson(json['evaluatorUser']) : null;
site = json["site"] == null ? null : Site.fromJson(json["site"]); site = json["site"] == null ? null : Site.fromJson(json["site"]);
building = json["building"] == null ? null : Building.fromJson(json["building"]); building = json["building"] == null ? null : Building.fromJson(json["building"]);
@ -248,6 +250,7 @@ class TaskData {
if (assignedEngineer != null) { if (assignedEngineer != null) {
data['assignedEngineer'] = assignedEngineer!.toJson(); data['assignedEngineer'] = assignedEngineer!.toJson();
} }
if (taskJobAssistantEmployees != null) { if (taskJobAssistantEmployees != null) {
data['taskJobAssistantEmployees'] = taskJobAssistantEmployees!.map((v) => v.toJson()).toList(); data['taskJobAssistantEmployees'] = taskJobAssistantEmployees!.map((v) => v.toJson()).toList();
} }
@ -349,41 +352,57 @@ class TaskJobActivityEngineerTimer {
} }
} }
class User { class TaskContactUser {
final String? userId; String? userId;
final String? userName; String? userName;
final String? email; String? email;
final String? employeeId; String? employeeId;
final int? languageId; int? languageId;
String? extensionNo;
User({this.userId, this.userName, this.email, this.employeeId, this.languageId}); String? phoneNumber;
factory User.fromJson(Map<String, dynamic> json) => User( TaskContactUser({
userId: json['userId'], this.userId,
userName: json['userName'], this.userName,
email: json['email'], this.email,
employeeId: json['employeeId'], this.employeeId,
languageId: json['languageId'], this.languageId,
); this.extensionNo,
this.phoneNumber,
});
Map<String, dynamic> toJson() => { TaskContactUser.fromJson(Map<String, dynamic> json) {
'userId': userId, userId = json['userId'];
'userName': userName, userName = json['userName'];
'email': email, email = json['email'];
'employeeId': employeeId, employeeId = json['employeeId'];
'languageId': languageId, languageId = json['languageId'];
}; extensionNo = json['extensionNo'];
phoneNumber = json['phoneNumber'];
}
Map<String, dynamic> toJson() {
return {
'userId': userId,
'userName': userName,
'email': email,
'employeeId': employeeId,
'languageId': languageId,
'extensionNo': extensionNo,
'phoneNumber': phoneNumber,
};
}
} }
class TaskJobContactPerson { class TaskJobContactPerson {
final int? id; final int? id;
final User? user; final TaskContactUser? user;
TaskJobContactPerson({this.id, this.user}); TaskJobContactPerson({this.id, this.user});
factory TaskJobContactPerson.fromJson(Map<String, dynamic> json) => TaskJobContactPerson( factory TaskJobContactPerson.fromJson(Map<String, dynamic> json) => TaskJobContactPerson(
id: json['id'], id: json['id'],
user: json['user'] != null ? User.fromJson(json['user']) : null, user: json['user'] != null ? TaskContactUser.fromJson(json['user']) : null,
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
@ -475,17 +494,20 @@ class TaskJobStatus {
class TaskJobAttachment { class TaskJobAttachment {
final int? id; final int? id;
final String? name; final String? name;
String ?createdBy;
TaskJobAttachment({this.id, this.name}); TaskJobAttachment({this.id, this.name,this.createdBy});
factory TaskJobAttachment.fromJson(Map<String, dynamic> json) => TaskJobAttachment( factory TaskJobAttachment.fromJson(Map<String, dynamic> json) => TaskJobAttachment(
id: json['id'], id: json['id'],
name: json['name'], name: json['name'],
createdBy: json['createdBy'],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
'id': id, 'id': id,
'name': name, 'name': name,
'createdBy': createdBy,
}; };
} }
@ -531,12 +553,12 @@ class TaskJobHistory {
final int? id; final int? id;
final RelatedTo? action; final RelatedTo? action;
final TaskJobStatus? taskJobStatus; final TaskJobStatus? taskJobStatus;
final User? user; final TaskContactUser? user;
final dynamic typeOfAlert; final dynamic typeOfAlert;
final dynamic riskLevel; final dynamic riskLevel;
final dynamic resource; final dynamic resource;
final dynamic actionNeeded; final dynamic actionNeeded;
final User? assignedEmployee; final TaskContactUser? assignedEmployee;
final dynamic alertNo; final dynamic alertNo;
final String? estimationDeliveryDate; final String? estimationDeliveryDate;
final String? createdDate; final String? createdDate;
@ -570,12 +592,12 @@ class TaskJobHistory {
id: json['id'], id: json['id'],
action: json['action'] != null ? RelatedTo.fromJson(json['action']) : null, action: json['action'] != null ? RelatedTo.fromJson(json['action']) : null,
taskJobStatus: json['taskJobStatus'] != null ? TaskJobStatus.fromJson(json['taskJobStatus']) : null, taskJobStatus: json['taskJobStatus'] != null ? TaskJobStatus.fromJson(json['taskJobStatus']) : null,
user: json['user'] != null ? User.fromJson(json['user']) : null, user: json['user'] != null ? TaskContactUser.fromJson(json['user']) : null,
typeOfAlert: json['typeOfAlert'], typeOfAlert: json['typeOfAlert'],
riskLevel: json['riskLevel'], riskLevel: json['riskLevel'],
resource: json['resource'], resource: json['resource'],
actionNeeded: json['actionNeeded'], actionNeeded: json['actionNeeded'],
assignedEmployee: json['assignedEmployee'] != null ? User.fromJson(json['assignedEmployee']) : null, assignedEmployee: json['assignedEmployee'] != null ? TaskContactUser.fromJson(json['assignedEmployee']) : null,
alertNo: json['alertNo'], alertNo: json['alertNo'],
estimationDeliveryDate: json['estimationDeliveryDate'], estimationDeliveryDate: json['estimationDeliveryDate'],
createdDate: json['createdDate'], createdDate: json['createdDate'],

@ -121,6 +121,8 @@ class _TaskRequestDetailsViewState extends State<TaskRequestDetailsView> {
], ],
), ),
], ],
if (taskProvider.taskRequestModel!.taskJobContactPersons!.isNotEmpty) contactInfoCard(context, taskProvider.taskRequestModel),
if (taskProvider.taskRequestModel?.callComment != null) ...[ if (taskProvider.taskRequestModel?.callComment != null) ...[
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
Text( Text(
@ -159,6 +161,38 @@ class _TaskRequestDetailsViewState extends State<TaskRequestDetailsView> {
); );
} }
Widget contactInfoCard(BuildContext context, TaskData? taskModel) {
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
8.height,
const Divider().defaultStyle(context),
Text(
"Contact Info",
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
// 8.height,
ListView.separated(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
padding: EdgeInsets.zero,
itemBuilder: (cxt, index) => Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'${context.translation.name}: ${taskModel.taskJobContactPersons?[index].user?.userName ?? '-'}'.bodyText(context),
'${context.translation.employeeId}: ${taskModel.taskJobContactPersons?[index].user?.employeeId ?? '-'}'.bodyText(context),
'${context.translation.telephone}: ${taskModel.taskJobContactPersons?[index].user?.phoneNumber ?? '-'}'.bodyText(context),
'${context.translation.email}: ${taskModel.taskJobContactPersons?[index].user?.email ?? '-'}'.bodyText(context),
'Extension: ${taskModel.taskJobContactPersons?[index].user?.extensionNo ?? '-'}'.bodyText(context),
],
),
separatorBuilder: (cxt, index) => const Divider().defaultStyle(context),
itemCount: taskModel!.taskJobContactPersons!.length),
],
);
}
Widget installationWidget({required TaskData taskModel}) { Widget installationWidget({required TaskData taskModel}) {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,

@ -6,6 +6,7 @@ import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
@ -56,6 +57,8 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
List<File> _files = []; List<File> _files = [];
bool installationType = true; bool installationType = true;
String comments = ''; String comments = '';
List<File> _userAttachments = [];
List<TaskJobAttachment> _readOnlyAttachments = [];
@override @override
void initState() { void initState() {
@ -68,14 +71,14 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
Future<void> assignData() async { Future<void> assignData() async {
_taskProvider = Provider.of<TaskRequestProvider>(context, listen: false); _taskProvider = Provider.of<TaskRequestProvider>(context, listen: false);
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
TaskData? taskModel = _taskProvider!.taskRequestModel; TaskData? taskModel = _taskProvider!.taskRequestModel;
_userAttachments = _taskProvider?.taskRequestModel?.taskJobAttachments?.where((e) => e.createdBy == _userProvider.user?.userID).map((e) => File(e.name ?? '')).toList() ?? [];
_readOnlyAttachments = _taskProvider?.taskRequestModel?.taskJobAttachments?.where((e) => e.createdBy != _userProvider.user?.userID).toList() ?? [];
_taskProvider?.updateTaskModel(taskModel); _taskProvider?.updateTaskModel(taskModel);
if (taskModel != null) {
_files.addAll(taskModel.taskJobAttachments!.map((e) => File(e.name ?? '')).toList());
// if (taskModel.taskType?.isInstallation == true) {
// await _taskProvider!.getSiteData(siteId: taskModel.asset?.siteId);
// }
}
} }
@override @override
@ -138,7 +141,7 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
20.height, 20.height,
MultiFilesPicker( MultiFilesPicker(
label: context.translation.attachFiles, label: context.translation.attachFiles,
files: _files, files: _userAttachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: false, onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120),
@ -189,8 +192,12 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
if (validate(model: taskModel)) { if (validate(model: taskModel)) {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
List<TaskJobAttachment> attachment = []; List<TaskJobAttachment> attachment = [];
for (var item in _files) { if (_readOnlyAttachments.isNotEmpty) {
attachment.add(TaskJobAttachment(id: 0, name: ServiceRequestUtils.isLocalUrl(item.path) ? "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}" : item.path)); attachment.addAll(_readOnlyAttachments);
}
for (var file in _userAttachments) {
String fileName = ServiceRequestUtils.isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(File(file.path).readAsBytesSync())}") : file.path;
attachment.add(TaskJobAttachment(id: 0, name: fileName));
} }
taskModel?.taskJobAttachments = attachment; taskModel?.taskJobAttachments = attachment;
if (taskModel?.taskTimePicker != null) { if (taskModel?.taskTimePicker != null) {

Loading…
Cancel
Save