import 'dart:convert'; import 'dart:math' as math; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:intl/intl.dart'; import 'package:timeago/timeago.dart' as timeago; import 'lat_lng.dart'; import 'place.dart'; import 'uploaded_file.dart'; import '/backend/schema/enums/enums.dart'; import '/auth/custom_auth/auth_util.dart'; String formatDate(String date) { DateTime parseDate = DateTime.parse(date); DateFormat format = DateFormat('yyyy/MM/dd'); String formatedDate = format.format(parseDate); return formatedDate; } String? convertToUpperCase(String? text) { // Check if the input text is not null before converting to uppercase if (text != null && text.isNotEmpty) { List words = text.split(' '); for (int i = 0; i < words.length; i++) { String word = words[i]; if (word.isNotEmpty) { words[i] = word[0].toUpperCase() + word.substring(1); } } return words.join(' '); } else { return null; // or return an empty string, depending on your use case } } String? positionLabel(String? position) { switch (position) { //data to label case 'director': return 'Director'; case 'shareholder': return 'Shareholder'; case 'company_secretary': return 'Company Secretary'; //label to data case 'Director': return 'director'; case 'Shareholder': return 'shareholder'; case 'Company Secretary': return 'company_secretary'; default: return position; // return the original value if not recognized } } String formatTime(String timestamp) { // Parse the timestamp DateTime dateTime = DateTime.parse(timestamp).toLocal(); // Convert to the desired format (9:54) String formattedTime = DateFormat.Hm().format(dateTime); return formattedTime; } bool comparePermission( List getPermissionID, int permissionID, ) { // Function definition bool isIntInList(int target, List intList) { return intList.contains(target); } int myTargetInt = permissionID; List myIntList = getPermissionID; // Check if the list is empty, trigger an alert or return a different value if (myIntList.isEmpty) { // Trigger an alert or return a different value // You can replace the following line with your alert logic or different return value print('Alert: The permission list is empty!'); return false; } return isIntInList(myTargetInt, myIntList); } String formatDate2(String date) { DateTime parseDate = DateTime.parse(date); DateFormat format = DateFormat('yyyyMMdd'); String formatedDate = format.format(parseDate); return formatedDate; } String getCategoryLabel(int categoryId) { String label; switch (categoryId) { case 1: label = 'Bank Statement'; break; case 2: label = 'Income'; break; case 3: label = 'Expense'; break; case 4: label = 'Others'; break; case 5: label = 'Income Tax Statement'; break; default: label = 'Unknown Category'; // Default label if category ID doesn't match any case break; } return label; } Color getStatusColor(String status) { switch (status) { case "uploaded": case "in_progress": return Colors.white; case "ocr_complete": return Color(0xFFFFEFBD); // Yellow color for "ocr_complete" case "failed": return Color(0xFFF5AE97); // Red color for "failed" default: return Colors.white; // Default color if status doesn't match any case } } List filteredRemovePermissions( List? addPermissions, List? removePermissions, ) { if (addPermissions == null || removePermissions == null) { // Handle the case where one or both lists are null return []; } // Create sets for faster lookup Set addSet = Set.from(addPermissions); Set removeSet = Set.from(removePermissions); // Find the differing values List differingValues = removeSet.difference(addSet).toList(); // Print the differing values (you can replace this with your desired logic) print('Differing values: $differingValues'); return differingValues; } List extractStatus(String jsonData) { try { final Map data = jsonDecode(jsonData); if (data.containsKey('documents') && data['documents'] is List) { List documents = data['documents']; // Filter the documents with 'completed' status List> completedDocuments = documents .whereType>() .where((doc) => doc['status'] == 'completed') .toList(); // Extract necessary information List extractedData = completedDocuments.map((doc) { return { 'Category ID': doc['bookkeeping_document_category_id'], 'URL': doc['url'], 'Created At': doc['created_at'] }; }).toList(); return extractedData; } else { print('Invalid JSON format or missing "documents" key.'); return []; // Return an empty list if data is not as expected } } catch (e) { print('Error: $e'); return []; // Return an empty list in case of an error } } String getStatus2(String status) { switch (status) { case "uploaded": return 'Uploaded'; // Blue color for "Uploaded" case "in_progress": return 'In progress'; // Blue color for "In progress" case "ocr_complete": return 'OCR complete'; // Yellow color for "OCR complete" case "failed": return 'Failed'; // Red color for "Failed" default: return '::0xFFFFFFFF'; // Default color if status doesn't match any case (white color) } } List addAccessRightPrefix(List roles) { List result = []; for (String item in roles) { String newItem = "Access right : $item"; result.add(newItem); } return result; }