300 lines
11 KiB
Dart
300 lines
11 KiB
Dart
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
|
import 'package:SEFER/views/widgets/my_scafold.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
import '../../../constant/colors.dart';
|
|
import '../../../constant/links.dart';
|
|
import '../../../constant/style.dart';
|
|
import '../../../controller/functions/gemeni.dart';
|
|
import '../../auth/captin/driver_car_controller.dart';
|
|
|
|
class CarsInsertingPage extends StatelessWidget {
|
|
CarsInsertingPage({super.key});
|
|
final driverCarController = Get.put(DriverCarController());
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
Get.put(AI());
|
|
return MyScafolld(
|
|
title: 'Insert New Car'.tr,
|
|
body: [
|
|
Container(
|
|
color: AppColor.accentColor.withOpacity(.2),
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
egyptCarLicenceFront(),
|
|
egyptCarLicenceBack(),
|
|
const SizedBox(height: 10),
|
|
Text('Please make sure to read the license carefully.'.tr),
|
|
Text(
|
|
'If your car license has the new design, upload the front side with two images.'
|
|
.tr),
|
|
const SizedBox(height: 10),
|
|
MyElevatedButton(
|
|
title: 'Please upload this license.'.tr,
|
|
onPressed: () {
|
|
final aiFront =
|
|
Get.find<AI>().responseIdCardDriverEgyptFront;
|
|
final aiBack =
|
|
Get.find<AI>().responseIdCardDriverEgyptBack;
|
|
driverCarController.addCarsForDrivers(
|
|
aiBack['vin'].toString(),
|
|
aiBack['car_plate'].toString(),
|
|
aiBack['make'].toString(),
|
|
aiBack['model'].toString(),
|
|
aiBack['year'].toString(),
|
|
aiFront['expiration_date'].toString(),
|
|
aiBack['color'].toString(),
|
|
aiBack['color_hex'].toString(),
|
|
aiFront['address'].toString(),
|
|
aiFront['owner'].toString(),
|
|
aiBack['registration_date'].toString(),
|
|
aiBack['displacement'].toString(),
|
|
aiBack['fuel'].toString(),
|
|
);
|
|
})
|
|
],
|
|
),
|
|
),
|
|
)
|
|
],
|
|
isleading: true);
|
|
}
|
|
}
|
|
|
|
GetBuilder<AI> egyptCarLicenceFront() {
|
|
return GetBuilder<AI>(
|
|
builder: (ai) {
|
|
if (ai.responseIdCardDriverEgyptFront.isNotEmpty) {
|
|
// No need to access ai.responseIdCardDriverEgyptBack anymore
|
|
final licenseExpiryDate = DateTime.parse(
|
|
ai.responseIdCardDriverEgyptFront['LicenseExpirationDate']);
|
|
|
|
// Check if license has expired
|
|
final today = DateTime.now();
|
|
final isLicenseExpired = licenseExpiryDate.isBefore(today);
|
|
|
|
return Card(
|
|
elevation: 4.0,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(16.0),
|
|
),
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(16.0),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Row(
|
|
children: [
|
|
Text('Vehicle Details Front'.tr,
|
|
style: AppStyle.headTitle2),
|
|
IconButton(
|
|
onPressed: () async {
|
|
ai.allMethodForAI(ai.prompts[3]['prompt'].toString(),
|
|
AppLink.uploadEgypt, 'car_front');
|
|
},
|
|
icon: const Icon(Icons.refresh),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 8.0),
|
|
const Divider(color: AppColor.accentColor),
|
|
const SizedBox(height: 8.0),
|
|
// Removed Make, Model, etc. as they are not available
|
|
|
|
Text(
|
|
'${'Plate Number'.tr}: ${ai.responseIdCardDriverEgyptFront['car_plate']}',
|
|
),
|
|
const SizedBox(height: 8.0),
|
|
Text(
|
|
'${'Owner Name'.tr}: ${ai.responseIdCardDriverEgyptFront['owner']}',
|
|
),
|
|
const SizedBox(height: 8.0),
|
|
Text(
|
|
'${'Address'.tr}: ${ai.responseIdCardDriverEgyptFront['address']}',
|
|
),
|
|
const SizedBox(height: 8.0),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(
|
|
'${'License Expiry Date'.tr}: ${licenseExpiryDate.toString().substring(0, 10)}',
|
|
style: TextStyle(
|
|
color: isLicenseExpired ? Colors.red : Colors.green,
|
|
),
|
|
),
|
|
// Removed Fuel as it's not available
|
|
],
|
|
),
|
|
// Removed Inspection Date as it's not available
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
return Card(
|
|
child: InkWell(
|
|
onTap: () async {
|
|
ai.allMethodForAINewCar(ai.prompts[3]['prompt'].toString(),
|
|
AppLink.uploadEgypt, 'car_front', 'carId'); //todo
|
|
},
|
|
child: Column(
|
|
children: [
|
|
Image.asset(
|
|
'assets/images/3.png',
|
|
height: Get.height * .25,
|
|
width: double.maxFinite,
|
|
fit: BoxFit.fitHeight,
|
|
),
|
|
Text(
|
|
'Capture an Image of Your car license front '.tr,
|
|
style: AppStyle.title,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
GetBuilder<AI> egyptCarLicenceBack() {
|
|
return GetBuilder<AI>(
|
|
builder: (ai) {
|
|
if (ai.responseIdCardDriverEgyptBack.isNotEmpty) {
|
|
// Get the tax expiry date from the response
|
|
final taxExpiryDate =
|
|
ai.responseIdCardDriverEgyptBack['tax_expiry'].toString();
|
|
// final displacement = ai.responseIdCardDriverEgyptBack['displacement'];
|
|
// if (int.parse(displacement) < 1000) {}
|
|
// Get the inspection date from the response
|
|
final inspectionDate =
|
|
ai.responseIdCardDriverEgyptBack['inspection_date'].toString();
|
|
final year = int.parse(inspectionDate.toString().split('-')[0]);
|
|
|
|
// Set inspectionDateTime to December 31st of the given year
|
|
final inspectionDateTime = DateTime(year, 12, 31);
|
|
String carBackLicenseExpired =
|
|
inspectionDateTime.toString().split(' ')[0];
|
|
// Get the current date
|
|
final today = DateTime.now();
|
|
|
|
// Try parsing the tax expiry date. If it fails, set it to null.
|
|
final taxExpiryDateTime = DateTime.tryParse(taxExpiryDate ?? '');
|
|
final isExpired =
|
|
taxExpiryDateTime != null && taxExpiryDateTime.isBefore(today);
|
|
// Check if the inspection date is before today
|
|
bool isInspectionExpired = inspectionDateTime.isBefore(today);
|
|
|
|
return Card(
|
|
elevation: 4.0,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(16.0),
|
|
),
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(16.0),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text('Vehicle Details Back'.tr, style: AppStyle.headTitle2),
|
|
IconButton(
|
|
onPressed: () async {
|
|
ai.allMethodForAI(ai.prompts[4]['prompt'].toString(),
|
|
AppLink.uploadEgypt, 'car_back');
|
|
},
|
|
icon: const Icon(Icons.refresh),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 8.0),
|
|
const Divider(color: AppColor.accentColor),
|
|
const SizedBox(height: 8.0),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(
|
|
'${'Make'.tr}: ${ai.responseIdCardDriverEgyptBack['make']}'),
|
|
Text(
|
|
'${'Model'.tr}: ${ai.responseIdCardDriverEgyptBack['model']}'),
|
|
],
|
|
),
|
|
const SizedBox(height: 8.0),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(
|
|
'${'Year'.tr}: ${ai.responseIdCardDriverEgyptBack['year']}'),
|
|
Text(
|
|
'${'Chassis'.tr}: ${ai.responseIdCardDriverEgyptBack['chassis']}'),
|
|
],
|
|
),
|
|
const SizedBox(height: 8.0),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(
|
|
'${'Color'.tr}: ${ai.responseIdCardDriverEgyptBack['color']}'),
|
|
Text(
|
|
'${'Displacement'.tr}: ${ai.responseIdCardDriverEgyptBack['displacement']} cc'),
|
|
],
|
|
),
|
|
const SizedBox(height: 8.0),
|
|
Text(
|
|
'${'Fuel'.tr}: ${ai.responseIdCardDriverEgyptBack['fuel']}'),
|
|
const SizedBox(height: 8.0),
|
|
if (taxExpiryDateTime != null)
|
|
Text(
|
|
'${'Tax Expiry Date'.tr}: $taxExpiryDate',
|
|
style: TextStyle(
|
|
color: isExpired ? Colors.red : Colors.green,
|
|
),
|
|
),
|
|
const SizedBox(height: 8.0),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(
|
|
'${'Inspection Date'.tr}: $carBackLicenseExpired',
|
|
style: TextStyle(
|
|
color: isInspectionExpired ? Colors.red : Colors.green,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
return Card(
|
|
child: InkWell(
|
|
onTap: () async {
|
|
ai.allMethodForAI(ai.prompts[4]['prompt'].toString(),
|
|
AppLink.uploadEgypt, 'car_back');
|
|
},
|
|
child: Column(
|
|
children: [
|
|
Image.asset(
|
|
'assets/images/4.png',
|
|
height: Get.height * .25,
|
|
width: double.maxFinite,
|
|
fit: BoxFit.fitHeight,
|
|
),
|
|
Text(
|
|
'Capture an Image of Your car license back'.tr,
|
|
style: AppStyle.title,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|