Untitled

 avatar
unknown
plain_text
2 years ago
15 kB
6
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...