Untitled
unknown
plain_text
3 years ago
15 kB
11
Indexable
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:get/get.dart' hide MultipartFile, FormData;
import 'package:image_picker/image_picker.dart';
import 'package:intl/intl.dart';
import 'package:the_citizen_app/src/controllers/agency_controller.dart';
import 'package:the_citizen_app/src/helpers/dialogHelper.dart';
import 'package:the_citizen_app/src/helpers/get_hepler.dart';
import 'package:the_citizen_app/src/helpers/k_log.dart';
import 'package:the_citizen_app/src/helpers/route.dart';
import 'package:the_citizen_app/src/models/compensatory_model.dart';
import 'package:the_citizen_app/src/models/team_leave_type_model.dart';
import 'package:the_citizen_app/src/pages/attendance_page.dart';
import 'package:the_citizen_app/src/pages/home_page.dart';
import 'package:the_citizen_app/src/pages/main_page.dart';
import '../config/api_endpoint.dart';
import '../helpers/uniqe_id.dart';
import '../models/history_image_count_model.dart';
import '../models/leave_balance_model.dart';
import '../models/officer_search_view_model.dart';
import '../services/api_service.dart';
import 'user_controller.dart';
class EmployeeLeaveManageMentController extends GetxController with ApiService {
final selectedIndex = RxInt(0);
final startDate = Rx<DateTime?>(
DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day));
final endDate = Rx<DateTime?>(
DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day));
final historyImageCount = RxList<HistoryImageModel>();
final leaveTypeList = RxList<TeamLeaveTypeModel?>([]);
final leaveBalanceList = RxList<LeaveBalanceModel?>([]);
final isCompensatorySelected = RxBool(false);
final compensatoryLeaveList = RxList<CompensatoryModel?>([]);
final searchedOfficerList = RxList<OfficerSearchViewModel?>([]);
// final checkBoxList = RxList<OfficerCheckBox?>([]);
final selectedLeaveBal = Rx<LeaveBalanceModel?>(null);
final selectedleaveType = Rx<TeamLeaveTypeModel?>(null);
final selectedStartDate = RxString('Select Start Date');
final selectedContactPerson = RxString('Write Officer Name');
final selectedEndDate = RxString('Select End Date');
final purpose = RxString('');
final contactPersonSearch = RxString('');
final selectedCheckValue = RxString('');
final start_half = RxDouble(0);
final leavedays = RxDouble(1);
final isLoading = RxBool(false);
final isLoading1 = RxBool(false);
final end_half = RxDouble(0);
final selectedOfficer = Rx<OfficerSearchViewModel?>(null);
final imageList = RxList<File?>([]);
final attachments = RxList<MultipartFile?>([]);
pickImage({required ImageSource imageSource}) async {
final pickImage = await ImagePicker().pickImage(source: imageSource);
if (pickImage != null) {
imageList.add(File(pickImage.path));
//final fileName = getExt(path: pickImage.path);
attachments.add(
await MultipartFile.fromFile(
pickImage.path,
filename: 'rep.jpg',
),
);
}
}
@override
void onReady() {
start_half.value = 1;
startDate.value =
DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);
end_half.value = 1;
endDate.value =
DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);
super.onReady();
}
@override
void onClose() {
leavedays.value = 0;
start_half.value = 1;
startDate.value = DateTime.now();
end_half.value = 1;
endDate.value = DateTime.now();
super.onClose();
}
pickDate({required bool? start}) async {
final date = await showDatePicker(
context: Get.context!,
initialDate: start! ? DateTime.now() : startDate.value!,
firstDate: start ? DateTime(1950) : startDate.value!,
lastDate: DateTime(2050));
if (date != null) {
if (start) {
startDate.value = DateTime(date.year, date.month, date.day);
differenceDays();
} else {
endDate.value = DateTime(date.year, date.month, date.day);
if (DateFormat.yMMMd().format(startDate.value!) !=
DateFormat.yMMMd().format(endDate.value!)) {
differenceDays();
} else {
end_half.value = 1.0;
start_half.value = 1.0;
leavedays.value = 1.0;
}
}
}
}
differenceDays() {
leavedays.value = (endDate.value!.difference(startDate.value!).inHours / 24)
.roundToDouble() +
1;
if (start_half == .5 || start_half == 1.5) {
leavedays - 0.5;
}
if (end_half == .5 || end_half == 1.5) {
leavedays - 0.5;
}
}
getCompensatory() async {
final username = Get.put(UserController()).username;
final selectedAgency = Get.put(AgencyController()).selectedAgency;
final body = {
'apiKey': "ZWR1Y2l0aW9uQkRBMTIzNDU2Nzg5",
'appCode': ApiEndpoint.WFC_APP_CODE,
'agencyId': '89180b6c-9cd0-40db-9b08-1b251aa1f18e', 'username': 'kabir2'
// 'username': username,
// 'agencyId': selectedAgency!.agencyId,
};
// final res = await postDynamic(
// authentication: true, path: ApiEndpoint.getLeaveBalance(), body: body);
try {
final res = await getDynamic(
path: '${dotenv.env['BASE_URL_WFC']}/get_compensatory_leave',
authentication: true,
queryParameters: body);
if (res.data['status'] != null && res.data['responseCode'] == '200') {
for (var i = 0; i < res.data['data'].length; i++) {
compensatoryLeaveList.add(CompensatoryModel(
isSelect: false.obs, leaveDate: res.data['data'][i]));
}
}
} catch (e) {
throw e;
}
}
getLeaveBalance() async {
isLoading.value = true;
final username = Get.put(UserController()).username;
final selectedAgency = Get.put(AgencyController()).selectedAgency;
final body = {
'apiKey': "ZWR1Y2l0aW9uQkRBMTIzNDU2Nzg5",
'appCode': ApiEndpoint.WFC_APP_CODE,
'username': username,
'agencyIds': [selectedAgency!.agencyId],
};
// final res = await postDynamic(
// authentication: true, path: ApiEndpoint.getLeaveBalance(), body: body);
try {
final res =
await Dio().post('${dotenv.env['BASE_URL_WFC']}/get_leave_balance',
options: Options(
headers: {
'Content-Type': 'application/json',
// 'latLng': '${locationC.latLng.value.latitude},${locationC.latLng.value.longitude}',
'latLng':
'${locationC.latLng.value.latitude},${locationC.latLng.value.longitude}',
'Authorization':
'Bearer ${Get.put(UserController()).getToken()}'
},
),
data: body);
if (res.data['status'] != null && res.data['responseCode'] == '200') {
final allleaveBalance = res.data['data']
.map((json) =>
LeaveBalanceModel.fromJson(json as Map<String, dynamic>))
.toList()
.cast<LeaveBalanceModel>() as List<LeaveBalanceModel>;
leaveBalanceList.clear();
leaveBalanceList.addAll(allleaveBalance);
selectedLeaveBal.value = leaveBalanceList.first;
}
} catch (e) {
throw e;
}
}
getLeaveTypeList() async {
try {
final username = Get.put(UserController()).username;
final selectedAgency = Get.put(AgencyController()).selectedAgency;
final body = {
'apiKey': ApiEndpoint.SHOUT_API_KEY,
'appCode': ApiEndpoint.SHOUT_APP_CODE,
'username': username,
'agencyId': [selectedAgency!.agencyId],
"uiCodes": ["411001"],
};
final res = await getDynamic(
authentication: true,
path: ApiEndpoint.getLeaveTypeUrl(),
queryParameters: body);
if (res.data['status'].contains('successful') == true) {
isLoading.value = false;
final allleavetype = res.data['data']
.map((json) =>
TeamLeaveTypeModel.fromJson(json as Map<String, dynamic>))
.toList()
.cast<TeamLeaveTypeModel>() as List<TeamLeaveTypeModel>;
leaveTypeList.clear();
leaveTypeList.addAll(allleavetype);
selectedleaveType.value = leaveTypeList.first;
isLoading.value = false;
}
} on DioError catch (e) {
throw e;
}
}
getContactPersonList() async {
isLoading.value = true;
final username = Get.put(UserController()).username;
final selectedAgency = Get.put(AgencyController()).selectedAgency;
final body = {
'apiKey': ApiEndpoint.SHOUT_API_KEY,
'appCode': ApiEndpoint.SHOUT_APP_CODE,
'username': username,
'agencyIds': [selectedAgency!.agencyId],
"uiCodes": ["411001"],
"additionalUsernames": [username],
"searchText": contactPersonSearch.value,
};
final res = await postDynamic(
authentication: true, path: ApiEndpoint.getContactPerson(), body: body);
if (res.data['status'] != null &&
res.data['status'].contains('successful') == true) {
isLoading.value = false;
final allSearchedOfficer = res.data['data']
.map((json) =>
OfficerSearchViewModel.fromJson(json as Map<String, dynamic>))
.toList()
.cast<OfficerSearchViewModel>() as List<OfficerSearchViewModel>;
searchedOfficerList.clear();
searchedOfficerList.addAll(allSearchedOfficer);
// checkBoxList.clear();
// for (var element in searchedOfficerList) {
// checkBoxList.add(
// OfficerCheckBox(isCheck: false, name: element!.username ?? ''));
// }
await getFileCount();
//checkBoxList.length.toString());
isLoading.value = false;
}
}
leavesubmission() async {
kLog('value');
GetHelper.showDialog(widget: CircularProgressIndicator());
try {
final username = Get.put(UserController()).username;
final selectedAgency = Get.put(AgencyController()).selectedAgency;
FormData body = FormData.fromMap({
"apiKey": "ZWR1Y2l0aW9uQkRBMTIzNDU2Nzg5",
"username": username,
"agencyIds": selectedAgency!.agencyId,
"appCode": "SHOUT",
"additionalUsernames": username,
"leaveCode": selectedleaveType.value!.leaveCode,
"leaveName": selectedleaveType.value!.leaveName,
"refno": "1458",
"mandatory": selectedleaveType.value!.isMandatory,
"encashable": selectedleaveType.value!.isEncashable,
"leavePurpose": purpose.value,
"annualQuota": selectedleaveType.value!.annualQuota,
"prorated": selectedleaveType.value!.isProrated,
"contactDetails": [
{
"empId": selectedOfficer.value!.id,
"username": selectedOfficer.value!.username,
"fullname": selectedOfficer.value!.fullname,
"mobile": selectedOfficer.value!.mobile,
"email": selectedOfficer.value!.email,
}
].toString(),
"leaveStartDate":
DateFormat('yyyy-MM-dd').format(startDate.value!).toString(),
"leaveStartFirstHalf": start_half.value == 0.5 ? true : false,
"leaveStartFull": start_half.value == 1 ? true : false,
"leaveStartSecondHalf": start_half.value == 1.5 ? true : false,
"leaveEndDate":
DateFormat('yyyy-MM-dd').format(endDate.value!).toString(),
"leaveEndFirstHalf": end_half.value == 0.5 ? true : false,
"leaveEndFull": end_half.value == 1 ? true : false,
"leaveEndSecondHalf": end_half.value == 1.5 ? true : false,
"daysInLeave": leavedays.value,
"lwp": false,
"attachmentUploaded": true,
"files": attachments
});
final res = await postDynamic(
path: "${dotenv.env['BASE_URL_WFC']}/add_tm_leave_application",
authentication: true,
body: body);
if (res.statusCode == 200) {
back();
DialogHelper.successDialog(
title: 'Leave Application',
msg: 'Application Submitted Successfully',
color: Colors.amber,
onPressed: () {
leavedays.value = 1.0;
startDate.value = DateTime.now();
endDate.value = DateTime.now();
back();
},
);
} else {
back();
DialogHelper.successDialog(
title: 'Leave Application',
msg: 'Application Not Submitted, Try again',
color: Colors.red,
onPressed: () {
leavedays.value = 0.0;
startDate.value = DateTime.now();
endDate.value = DateTime.now();
back();
},
);
}
} on DioError catch (e) {
isLoading1.value = false;
}
}
// changeValue({required bool a, required String username}) {
// for (var element in checkBoxList) {
// element!.isCheck = false;
// }
// checkBoxList[checkBoxList.indexWhere((e) => e!.name == username)]!.isCheck =
// a;
// selectedCheckValue.value = username;
// }
getFileCount() async {
try {
isLoading.value = true;
historyImageCount.clear();
for (var element in searchedOfficerList) {
// kLog(element.id);
final selectedAgency = Get.put(AgencyController()).selectedAgency;
final username = Get.put(UserController()).username;
final params = {
'apiKey': ApiEndpoint.KYC_API_KEY,
'appCode': ApiEndpoint.WFC_APP_CODE,
'agencyId': selectedAgency!.agencyId,
//'agencyId': ['e3b21bef-1afb-4ed7-8a46-2b1801d8649b'],
'username': username,
'fileCategory': 'FILE_CATEGORY_TASK_PROGRESS',
'fileRefId': element!.id!,
'fileRefNo': '',
'fileEntryUsername': ''
};
final res = await getDynamic(
path: ApiEndpoint.getFileCount(),
queryParameters: params,
);
historyImageCount.add(HistoryImageModel(
progressId: element.id!,
status: '',
imageCount: res.data['data']['fileCount'].toString(),
));
isLoading.value = false;
}
// ignore: unused_local_variable
for (var element in historyImageCount) {
print('image Count');
// kLog('${element.progressId} ${element.imageCount}');
}
} on DioError catch (e) {}
//get history image
}
}
Editor is loading...