Compare commits

..

11 Commits

38 changed files with 3835 additions and 2520 deletions

View File

@ -259,18 +259,6 @@
"packageUri": "lib/",
"languageVersion": "3.1"
},
{
"name": "syncfusion_flutter_core",
"rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/syncfusion_flutter_core-28.2.4",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "syncfusion_flutter_datepicker",
"rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/syncfusion_flutter_datepicker-28.2.4",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "table_calendar",
"rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/table_calendar-3.2.0",
@ -344,7 +332,7 @@
"languageVersion": "3.6"
}
],
"generated": "2025-02-05T20:46:55.606574Z",
"generated": "2025-02-06T19:17:10.303508Z",
"generator": "pub",
"generatorVersion": "3.6.1",
"flutterRoot": "file:///C:/src/flutter/flutter",

View File

@ -154,14 +154,6 @@ string_scanner
3.1
file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/string_scanner-1.3.0/
file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/string_scanner-1.3.0/lib/
syncfusion_flutter_core
3.3
file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/syncfusion_flutter_core-28.2.4/
file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/syncfusion_flutter_core-28.2.4/lib/
syncfusion_flutter_datepicker
3.3
file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/syncfusion_flutter_datepicker-28.2.4/
file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/syncfusion_flutter_datepicker-28.2.4/lib/
table_calendar
3.0
file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/table_calendar-3.2.0/

View File

@ -8,6 +8,7 @@
<option name="brand" value="DOCOMO" />
<option name="codename" value="F01L" />
<option name="id" value="F01L" />
<option name="labId" value="google" />
<option name="manufacturer" value="FUJITSU" />
<option name="name" value="F-01L" />
<option name="screenDensity" value="360" />
@ -19,6 +20,7 @@
<option name="brand" value="OPPO" />
<option name="codename" value="OP573DL1" />
<option name="id" value="OP573DL1" />
<option name="labId" value="google" />
<option name="manufacturer" value="OPPO" />
<option name="name" value="CPH2557" />
<option name="screenDensity" value="480" />
@ -30,6 +32,7 @@
<option name="brand" value="DOCOMO" />
<option name="codename" value="SH-01L" />
<option name="id" value="SH-01L" />
<option name="labId" value="google" />
<option name="manufacturer" value="SHARP" />
<option name="name" value="AQUOS sense2 SH-01L" />
<option name="screenDensity" value="480" />
@ -40,7 +43,9 @@
<option name="api" value="34" />
<option name="brand" value="Lenovo" />
<option name="codename" value="TB370FU" />
<option name="formFactor" value="Tablet" />
<option name="id" value="TB370FU" />
<option name="labId" value="google" />
<option name="manufacturer" value="Lenovo" />
<option name="name" value="Tab P12" />
<option name="screenDensity" value="340" />
@ -52,6 +57,7 @@
<option name="brand" value="samsung" />
<option name="codename" value="a51" />
<option name="id" value="a51" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy A51" />
<option name="screenDensity" value="420" />
@ -63,17 +69,31 @@
<option name="brand" value="google" />
<option name="codename" value="akita" />
<option name="id" value="akita" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="motorola" />
<option name="codename" value="arcfox" />
<option name="id" value="arcfox" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="razr plus 2024" />
<option name="screenDensity" value="360" />
<option name="screenX" value="1080" />
<option name="screenY" value="1272" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="b0q" />
<option name="id" value="b0q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S22 Ultra" />
<option name="screenDensity" value="600" />
@ -85,6 +105,7 @@
<option name="brand" value="google" />
<option name="codename" value="bluejay" />
<option name="id" value="bluejay" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6a" />
<option name="screenDensity" value="420" />
@ -96,6 +117,7 @@
<option name="brand" value="google" />
<option name="codename" value="caiman" />
<option name="id" value="caiman" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro" />
<option name="screenDensity" value="360" />
@ -106,7 +128,9 @@
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="comet" />
<option name="default" value="true" />
<option name="id" value="comet" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro Fold" />
<option name="screenDensity" value="390" />
@ -118,6 +142,7 @@
<option name="brand" value="samsung" />
<option name="codename" value="crownqlteue" />
<option name="id" value="crownqlteue" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Note9" />
<option name="screenDensity" value="420" />
@ -129,6 +154,7 @@
<option name="brand" value="samsung" />
<option name="codename" value="dm2q" />
<option name="id" value="dm2q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="S23 Plus" />
<option name="screenDensity" value="450" />
@ -140,6 +166,7 @@
<option name="brand" value="samsung" />
<option name="codename" value="dm3q" />
<option name="id" value="dm3q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S23 Ultra" />
<option name="screenDensity" value="600" />
@ -150,7 +177,9 @@
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="e1q" />
<option name="default" value="true" />
<option name="id" value="e1q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S24" />
<option name="screenDensity" value="480" />
@ -162,6 +191,7 @@
<option name="brand" value="samsung" />
<option name="codename" value="e3q" />
<option name="id" value="e3q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S24 Ultra" />
<option name="screenDensity" value="450" />
@ -173,6 +203,7 @@
<option name="brand" value="google" />
<option name="codename" value="eos" />
<option name="id" value="eos" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Eos" />
<option name="screenDensity" value="320" />
@ -184,6 +215,7 @@
<option name="brand" value="google" />
<option name="codename" value="felix" />
<option name="id" value="felix" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold" />
<option name="screenDensity" value="420" />
@ -195,6 +227,7 @@
<option name="brand" value="google" />
<option name="codename" value="felix" />
<option name="id" value="felix" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold" />
<option name="screenDensity" value="420" />
@ -206,6 +239,7 @@
<option name="brand" value="google" />
<option name="codename" value="felix_camera" />
<option name="id" value="felix_camera" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold (Camera-enabled)" />
<option name="screenDensity" value="420" />
@ -217,17 +251,32 @@
<option name="brand" value="motorola" />
<option name="codename" value="fogona" />
<option name="id" value="fogona" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g play - 2024" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="g0q" />
<option name="id" value="g0q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="SM-S906U1" />
<option name="screenDensity" value="450" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="gts8uwifi" />
<option name="formFactor" value="Tablet" />
<option name="id" value="gts8uwifi" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Tab S8 Ultra" />
<option name="screenDensity" value="320" />
@ -239,6 +288,7 @@
<option name="brand" value="google" />
<option name="codename" value="husky" />
<option name="id" value="husky" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8 Pro" />
<option name="screenDensity" value="390" />
@ -250,6 +300,7 @@
<option name="brand" value="motorola" />
<option name="codename" value="java" />
<option name="id" value="java" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="G20" />
<option name="screenDensity" value="280" />
@ -261,6 +312,7 @@
<option name="brand" value="google" />
<option name="codename" value="komodo" />
<option name="id" value="komodo" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9 Pro XL" />
<option name="screenDensity" value="360" />
@ -272,6 +324,7 @@
<option name="brand" value="google" />
<option name="codename" value="lynx" />
<option name="id" value="lynx" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7a" />
<option name="screenDensity" value="420" />
@ -283,6 +336,7 @@
<option name="brand" value="motorola" />
<option name="codename" value="maui" />
<option name="id" value="maui" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g play - 2023" />
<option name="screenDensity" value="280" />
@ -294,6 +348,7 @@
<option name="brand" value="google" />
<option name="codename" value="oriole" />
<option name="id" value="oriole" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6" />
<option name="screenDensity" value="420" />
@ -305,6 +360,7 @@
<option name="brand" value="google" />
<option name="codename" value="panther" />
<option name="id" value="panther" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7" />
<option name="screenDensity" value="420" />
@ -316,6 +372,7 @@
<option name="brand" value="samsung" />
<option name="codename" value="q5q" />
<option name="id" value="q5q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold5" />
<option name="screenDensity" value="420" />
@ -327,6 +384,7 @@
<option name="brand" value="samsung" />
<option name="codename" value="q6q" />
<option name="id" value="q6q" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold6" />
<option name="screenDensity" value="420" />
@ -337,7 +395,9 @@
<option name="api" value="30" />
<option name="brand" value="google" />
<option name="codename" value="r11" />
<option name="formFactor" value="Wear OS" />
<option name="id" value="r11" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Watch" />
<option name="screenDensity" value="320" />
@ -350,6 +410,7 @@
<option name="brand" value="google" />
<option name="codename" value="redfin" />
<option name="id" value="redfin" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 5" />
<option name="screenDensity" value="440" />
@ -361,6 +422,7 @@
<option name="brand" value="google" />
<option name="codename" value="shiba" />
<option name="id" value="shiba" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8" />
<option name="screenDensity" value="420" />
@ -371,7 +433,9 @@
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="tangorpro" />
<option name="formFactor" value="Tablet" />
<option name="id" value="tangorpro" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Tablet" />
<option name="screenDensity" value="320" />
@ -382,7 +446,9 @@
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="tokay" />
<option name="default" value="true" />
<option name="id" value="tokay" />
<option name="labId" value="google" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 9" />
<option name="screenDensity" value="420" />

View File

@ -25,5 +25,10 @@ public final class GeneratedPluginRegistrant {
} catch (Exception e) {
Log.e(TAG, "Error registering plugin flutter_plugin_android_lifecycle, io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin", e);
}
try {
flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
} catch (Exception e) {
Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e);
}
}
}

View File

@ -12,10 +12,17 @@
@import file_picker;
#endif
#if __has_include(<path_provider_foundation/PathProviderPlugin.h>)
#import <path_provider_foundation/PathProviderPlugin.h>
#else
@import path_provider_foundation;
#endif
@implementation GeneratedPluginRegistrant
+ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry {
[FilePickerPlugin registerWithRegistrar:[registry registrarForPlugin:@"FilePickerPlugin"]];
[PathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"PathProviderPlugin"]];
}
@end

View File

@ -55,10 +55,9 @@ class AppStrings {
static const String totalGst = "Total GST";
static const String cCN = "CCN No.";
static const String cCNDate = "CCN Date";
static const String miroStatus = "Miro Status";
static const String miroStatus = "Micro Status";
static const String gstHold = "GST Hold";
static const String gstRelease = "If GST release this invoice"
" than required GST Payment Due & UTN Number";
static const String gstRelease = "If GST release this invoice\nthan required GST Payment Due & UTN Number";
static const String utrNo = "UTR No.";
static const String utrDate = "UTR Date";
static const String amount = "Amount";
@ -85,7 +84,9 @@ class AppStrings {
static const String cancelledInvoice = "Cancelled Invoice";
static const String ccnView = "CCN View";
static const String transporterInbound = "Transporter Inbound Transaction";
static const String billdayConfiguration = "Bill day Configuration";
static const String bufferdayConfiguration = "Buffer day Configuration";
static const String ccnConfiguration = "CCN Configuration";
static const String close = "Close";
static const String billDayConfiguration = "Bill Day Configuration";
static const String bufferDayConfiguration = "Buffer Day Configuration";
static const String ccnConfiguration = "CCN Configuration";
}

View File

@ -8,8 +8,8 @@ class ConfigurationScreenController extends GetxController{
var selectedState = 0.obs;
RxBool isSelected = false.obs;
RxList userTabs = <CommonModel>[
CommonModel(title: AppStrings.billdayConfiguration),
CommonModel(title: AppStrings.bufferdayConfiguration),
CommonModel(title: AppStrings.billDayConfiguration),
CommonModel(title: AppStrings.bufferDayConfiguration),
CommonModel(title: AppStrings.ccnConfiguration),
].obs;
var selectedInvoice = '41896424644'.obs; // Default value

View File

@ -22,7 +22,7 @@ class FreightBillCtrl extends GetxController{
}
var items = ['Admin', 'Sub Admin',
'Internal Audit', 'Raw material','MIS User'].obs;
var status = ['STO','In-Bound'];
var status = ['STO','INBOUND'];
RxList tabs = <CommonModel>[
CommonModel(
title: "User\nManagement",

View File

@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shayog/components/common/common_button.dart';
import 'package:shayog/components/styles/textStyles.dart';
import 'package:shayog/feature/presentation/widgets/text_view.dart';
import '../../../../../../components/common/common_btn.dart';
import '../../../../../../components/common/custom_drop_down.dart';
@ -22,7 +21,114 @@ class AddInternalUser extends StatelessWidget {
padding: EdgeInsets.all(16),
color: AppColors.clrF2,
child: allData(),
// child: Row(
// children: [
// Expanded(child: Container(
// padding: EdgeInsets.only(right: 16),
// height: 150,
// color: Colors.pink,
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// TextView(
// text: AppStrings.firstName,
// isRequired: true,
// ),
// InputField(
// errorTxtColor: controller.errorTextColor,
// validator: Validations.checkValidations,
// controller: controller.nameCtrl,
// title: AppStrings.enterFirstName,
// ),
// TextView(
// text: AppStrings.userType,
// ),
//
// CustomDropdown(
// initialValue: controller.userTypeList[1],
// backClr: AppColors.clrD9,
// borderClr: AppColors.clrGrey,
// items: controller.userTypeList,
// itemLabel: (item) => item,
// onSelected: (selected) {
// if (selected != null) {
// controller.selectedValue.value = selected;
// }
// },
// hintText: 'Select User Type',
// ),
// ],
// ),)),
// Expanded(child: Container(
// padding: EdgeInsets.only(right: 16),
// height: 150,
// color: Colors.green,
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// TextView(
// text: AppStrings.lastName,
// isRequired: true,
// ),
// InputField(
// errorTxtColor: controller.errorTextColor,
// validator: Validations.checkValidations,
// controller: controller.lastNCtrl,
// title: AppStrings.enterLastName,
// ),
// TextView(
// text: AppStrings.status,
// ),
//
// CustomDropdown(
// initialValue: controller.status[0],
// backClr: AppColors.clrD9,
// borderClr: AppColors.clrGrey,
// items: controller.status,
// itemLabel: (item) => item,
// onSelected: (selected) {
// if (selected != null) {
// controller.selectedStatus.value = selected;
// }
// },
// hintText: 'Active'),
// ],
// ),)),
// Expanded(child: Container(
// height: 150,
// color: Colors.yellow,
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// TextView(
// text: AppStrings.employeeCode,
// isRequired: true,
// ),
// InputField(
// errorTxtColor: controller.errorTextColor,
// validator: Validations.checkValidations,
// controller: controller.employeeCodeCtrl,
// title: AppStrings.enterEmployeeCode,
// ),
// TextView(
// text: AppStrings.emailAddress,
// isRequired: true,
// ),
// //SizedBox(height: 8),
// InputField(
// errorTxtColor: controller.errorTextColor,
// validator: Validations.checkEmailValidations,
// controller: controller.emailCtrl,
// title: AppStrings.enterEmailAddress,
// ),
//
// ],
// ),)),
// ],
// ),
);
}
@ -31,7 +137,7 @@ class AddInternalUser extends StatelessWidget {
children: [
Form(
key: controller.formKey,
//autovalidateMode: AutovalidateMode.onUserInteraction,
autovalidateMode: AutovalidateMode.onUserInteraction,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
@ -93,7 +199,6 @@ class AddInternalUser extends StatelessWidget {
)),
],
),
SizedBox(height:8 ),
Row(
children: [
Flexible(
@ -104,7 +209,6 @@ class AddInternalUser extends StatelessWidget {
TextView(
text: AppStrings.userType,
),
SizedBox(height: 8),
CustomDropdown(
initialValue: controller.userTypeList[1],
backClr: AppColors.clrD9,
@ -118,15 +222,6 @@ class AddInternalUser extends StatelessWidget {
},
hintText: 'Select User Type',
),
Obx(() => controller.validateAdduser.value == true ?
TextView(
margin: EdgeInsets.only(top: 4),
text: "Required",
style: 10.txtTransparent,
) :
SizedBox.shrink(
))
],
)),
SizedBox(width: 16),
@ -138,10 +233,8 @@ class AddInternalUser extends StatelessWidget {
TextView(
text: AppStrings.status,
),
SizedBox(height: 8),
CustomDropdown(
//initialValue: controller.status[0],
initialValue: "Active",
initialValue: controller.status[0],
backClr: AppColors.clrD9,
borderClr: AppColors.clrGrey,
items: controller.status,
@ -152,16 +245,6 @@ class AddInternalUser extends StatelessWidget {
}
},
hintText: 'Active'),
Obx(() => controller.validateAdduser.value == true ?
TextView(
margin: EdgeInsets.only(top: 4),
text: "Required",
style: 10.txtTransparent,
) :
SizedBox.shrink(
))
],
)),
SizedBox(width: 16),
@ -227,7 +310,26 @@ class AddInternalUser extends StatelessWidget {
clickAction: () {
controller.createUser();
}
// if(controller.formKey.currentState!.validate()){
// controller.createUser();
// } else {
// controller.validatePlants.value == true;
//
// }
// if (controller.formKey.currentState
// ?.validate() ??
// false) {
// ScaffoldMessenger.of(context)
// .showSnackBar(
// SnackBar(
// content: Text(
// 'Form submitted successfully!')),
// );
// controller.createUser();
// } else {
// controller.showE.value = true;
// }
// }
)
: CommonButton(
height: 30,

View File

@ -11,7 +11,7 @@ import '../../../../../components/styles/app_strings.dart';
import '../../transporter/widgets/common_card.dart';
class InternalUserRoleMapping extends StatefulWidget {
const InternalUserRoleMapping({super.key});
InternalUserRoleMapping({super.key});
@override
State<InternalUserRoleMapping> createState() => _InternalUserRoleMappingState();
@ -19,7 +19,35 @@ class InternalUserRoleMapping extends StatefulWidget {
class _InternalUserRoleMappingState extends State<InternalUserRoleMapping> {
final ctrl = Get.put(DashboardCtrl());
String? selectedEmail;
// Error message
String? errorText;
// List of emails for the dropdown
final List<String> emails = ['email1@example.com', 'email2@example.com', 'email3@example.com'];
// Function for when the email is selected
void onEmailSelected(String? email) {
setState(() {
selectedEmail = email;
});
}
void onSaveClick() {
// Validate that an email is selected
if (selectedEmail == null || selectedEmail!.isEmpty) {
setState(() {
errorText = "Please select an email."; // Set the error message
});
} else {
setState(() {
errorText = null; // Clear the error message if selection is valid
});
// Perform your save action (e.g., API call, navigation, etc.)
print('Email Selected: $selectedEmail');
}
}
@override
Widget build(BuildContext context) {
@ -35,7 +63,23 @@ class _InternalUserRoleMappingState extends State<InternalUserRoleMapping> {
color: Colors.white,
child: Column(
children: [
// CustomDropdown<String>(
// backClr: AppColors.clrD9,
// borderClr: AppColors.clrGrey,
// items: emails,
// itemLabel: (item) => item,
// onSelected: onEmailSelected,
// hintText: "Select Email",
// ),
// // Error message for the dropdown if no value is selected
// if (errorText != null)
// Padding(
// padding: const EdgeInsets.only(top: 8.0),
// child: Text(
// errorText!,
// style: TextStyle(color: Colors.red, fontSize: 12),
// ),
// ),
Container(
color: AppColors.clrF2,
@ -62,22 +106,21 @@ class _InternalUserRoleMappingState extends State<InternalUserRoleMapping> {
onSelected: (selected) {
if (selected != null) {
ctrl.selectedEmpCode.value = selected;
ctrl.validateRoleMapCode.value = false;
}
},
hintText: "Select Employee Code",
),
SizedBox(height: 5),
ctrl.validateRoleEmail.value == true ? TextView(
ctrl.validateRoleMapCode.value == true ? TextView(
text: "Required",
style: 10.txtTransparent,
style: 10.txtSBoldRed,
) : TextView(
text: "ABC",
style: 10.txtTransparent,
),
text: "ABC",
style: 10.txtTransparent,
),
],
)),
SizedBox(width: 16),
@ -141,12 +184,12 @@ class _InternalUserRoleMappingState extends State<InternalUserRoleMapping> {
width: 100,
text: AppStrings.submit,
clickAction: () {
if(ctrl.selectedEmail.value == "Select Email" ){
if(ctrl.selectedEmail.value == "Select Email" ||ctrl.selectedEmpCode.value == "Select Employee Code" ){
ctrl.validateRoleEmail.value = true;
ctrl.validateRoleMapCode.value = true;
} else{
ctrl.validateRoleEmail.value = false;
ctrl.validateRoleMapCode.value = false;
ctrl.getRoleMappingData();
}

View File

@ -181,7 +181,6 @@ class ManageUser extends StatelessWidget {
text: AppStrings.cancel,
clickAction: () {
controller.isSelected.value = false;
controller.clearUserData();
},
),
SizedBox(width: 16),
@ -220,7 +219,7 @@ class ManageUser extends StatelessWidget {
children: [
Container(
margin: EdgeInsets.only(bottom: 16, top: 16),
height: MediaQuery.of(context).size.height * 0.4,
height: MediaQuery.of(context).size.height * 0.6,
child: RawScrollbar(
thumbColor: AppColors.clrD9,
radius: Radius.circular(2),

View File

@ -52,16 +52,15 @@ class UserPlantMapping extends StatelessWidget {
hintText: 'Select Employee Code',
),
SizedBox(height: 5),
ctrl.validatePlantEmail.value == true ? TextView(
ctrl.validatePlantCode.value == true ? TextView(
text: "Required",
style: 10.txtTransparent,
style: 10.txtSBoldRed,
) : TextView(
text: "ABC",
style: 10.txtTransparent,
),
],
)),
@ -130,18 +129,20 @@ class UserPlantMapping extends StatelessWidget {
text: AppStrings.submit,
clickAction: () {
if(ctrl.selectPlantEmail.value == "Select Email"){
if(ctrl.selectPlantEmail.value == "Select Email" ||ctrl.selectedCode.value == "Select Employee Code" ){
ctrl.validatePlantEmail.value = true;
ctrl.validatePlantCode.value = true;
} else{
ctrl.validatePlantEmail.value = false;
ctrl.validatePlantCode.value = false;
ctrl.getPlantMapping();
}
},
// clickAction: () {
// ctrl.checkPlants();
// },
),
],
),
@ -186,9 +187,9 @@ class UserPlantMapping extends StatelessWidget {
value ?? false);
},
activeColor: AppColors.primaryClr,
// Custom color when selected
checkColor: Colors.white,
// Custom color for check mark
materialTapTargetSize: MaterialTapTargetSize
.shrinkWrap,
),

View File

@ -20,136 +20,142 @@ class UserScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Container(
padding: EdgeInsets.only(bottom: 16),
margin: EdgeInsets.all(16),
child: Column(
children: [
Container(
height: 50,
color: AppColors.primaryClr,
child: Row(
children: [
ListView.separated(
padding: EdgeInsets.symmetric(horizontal: 16),
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemBuilder: (context, index) {
return Obx(
() => InkWell(
onTap: () {
ctrl.selectedUser.value = index;
ctrl.clearPrefillData();
ctrl.isSelected.value = false;
child: Column(
children: [
Container(
padding: EdgeInsets.only(bottom: 16),
margin: EdgeInsets.all(16),
child: Column(
children: [
Container(
height: 50,
color: AppColors.primaryClr,
child: Row(
children: [
ListView.separated(
padding: EdgeInsets.symmetric(horizontal: 16),
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemBuilder: (context, index) {
return Obx(
() => InkWell(
onTap: () {
ctrl.selectedUser.value = index;
ctrl.clearPrefillData();
ctrl.isSelected.value = false;
ctrl.validateRoleMapCode.value = false;
ctrl.validateRoleEmail.value = false;
ctrl.validatePlantEmail.value = false;
ctrl.validatePlantCode.value = false;
ctrl.validateUserStatus.value = false;
ctrl.validateUserType.value = false;
ctrl.validateRoleEmail.value = false;
ctrl.validatePlantEmail.value = false;
if (ctrl.selectedUser.value == 0) {
ctrl.getManageUser();
}
if (ctrl.selectedUser.value == 2) {
ctrl.showRolesSection.value = false;
}
if (ctrl.selectedUser.value != 3) {
ctrl.selectPlantEmail.value =
"Select Email";
ctrl.selectPlantCode.value =
'Select Employee Code';
ctrl.plantMapping.clear();
}
},
child: Container(
margin: EdgeInsets.only(bottom: 10, top: 10),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: ctrl.selectedUser.value ==
index
? Colors.white
: AppColors.primaryClr,
width: 3))),
child: Center(
child: TextView(
text: ctrl.userTabs[index].title ?? "",
style: 12.txtBoldWhite,
if (ctrl.selectedUser.value == 0) {
ctrl.getManageUser();
}
if (ctrl.selectedUser.value == 2) {
ctrl.showRolesSection.value = false;
}
if (ctrl.selectedUser.value != 3) {
ctrl.selectPlantEmail.value =
"Select Email";
ctrl.selectPlantCode.value =
'Select Employee Code';
ctrl.plantMapping.clear();
}
},
child: Container(
margin: EdgeInsets.only(bottom: 10, top: 10),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: ctrl.selectedUser.value ==
index
? Colors.white
: AppColors.primaryClr,
width: 3))),
child: Center(
child: TextView(
text: ctrl.userTabs[index].title ?? "",
style: 12.txtBoldWhite,
),
),
),
),
),
),
);
},
separatorBuilder: (context, index) {
return SizedBox(width: 16);
},
itemCount: 5),
Spacer(),
InkWell(
onTap: () {
ctrl.selectedUser.value == 0
? ctrl.getManageUser()
: ctrl.selectedUser.value == 1
? ctrl.clearPrefillData()
: ctrl.selectedUser.value == 2
? ctrl.clearRoleMapping()
: ctrl.selectedUser.value == 3
? ctrl.clearPlants()
: ctrl.clearUserType();
},
child: Image.asset(AppImages.refresh,
height: 12, width: 12)),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextView(
text: AppStrings.refresh,
style: 12.txtBoldWhite,
),
),
Obx(
() => Visibility(
visible: ctrl.selectedUser.value == 0,
child: InkWell(
onTap: () {
ctrl.toggleContainer();
);
},
child: Image.asset(AppImages.filter,
height: 16, width: 16)),
),
),
Obx(
() => Visibility(
visible: ctrl.selectedUser.value == 0,
child: Padding(
separatorBuilder: (context, index) {
return SizedBox(width: 16);
},
itemCount: 5),
Spacer(),
InkWell(
onTap: () {
ctrl.selectedUser.value == 0
? ctrl.getManageUser()
: ctrl.selectedUser.value == 1
? ctrl.clearPrefillData()
: ctrl.selectedUser.value == 2
? ctrl.clearRoleMapping()
: ctrl.selectedUser.value == 3
? ctrl.clearPlants()
: ctrl.clearUserType();
},
child: Image.asset(AppImages.refresh,
height: 12, width: 12)),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextView(
text: AppStrings.filter,
text: AppStrings.refresh,
style: 12.txtBoldWhite,
),
),
),
Obx(
() => Visibility(
visible: ctrl.selectedUser.value == 0,
child: InkWell(
onTap: () {
ctrl.toggleContainer();
},
child: Image.asset(AppImages.filter,
height: 16, width: 16)),
),
),
Obx(
() => Visibility(
visible: ctrl.selectedUser.value == 0,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: TextView(
text: AppStrings.filter,
style: 12.txtBoldWhite,
),
),
),
),
],
),
],
),
),
Obx(() {
switch (ctrl.selectedUser.value) {
case 0:
return ManageUser();
case 1:
return AddInternalUser();
case 2:
return InternalUserRoleMapping();
case 3:
return UserPlantMapping();
default:
return UserType();
}
}),
],
),
Obx(() {
switch (ctrl.selectedUser.value) {
case 0:
return ManageUser();
case 1:
return AddInternalUser();
case 2:
return InternalUserRoleMapping();
case 3:
return UserPlantMapping();
default:
return UserType();
}
}),
],
),
)
],
),
);
}

View File

@ -44,7 +44,16 @@ class UserType extends StatelessWidget {
controller: controller.userTypeCtrl,
title: "Enter User Type",
),
SizedBox(height: 8),
controller.validateUserType.value == true ? TextView(
text: "Required",
style: 10.txtSBoldRed,
) : TextView(
text: "ABC",
style: 10.txtTransparent,
),
],
),
)),
@ -73,7 +82,16 @@ class UserType extends StatelessWidget {
}
},
hintText: 'Select Status'),
SizedBox(height: 8),
controller.validateUserType.value == true ? TextView(
text: "Required",
style: 10.txtSBoldRed,
) : TextView(
text: "ABC",
style: 10.txtTransparent,
),
],
),
)),
@ -105,8 +123,15 @@ class UserType extends StatelessWidget {
clickAction: () {
controller.createUserType();
if(controller.userTypeCtrl.text.isEmpty ||controller.selectStatus.value == "Select Status" ){
controller.validateUserStatus.value = true;
controller.validateUserType.value = true;
} else{
controller.validateUserStatus.value = false;
controller.validateUserType.value = false;
controller.createUserType();
}
},
),
@ -244,6 +269,116 @@ class UserType extends StatelessWidget {
],
);
}
data(){
return Row(
children: [
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(text:
"Add User Type",isRequired: true,
),
SizedBox(height: 8),
InputField(
controller: controller.userTypeCtrl,
title: "Enter User Type",
),
controller.validateUserType.value == true ? TextView(
text: "Required",
style: 10.txtSBoldRed,
) : TextView(
text: "ABC",
style: 10.txtTransparent,
),
],
)),
SizedBox(width: 16),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(
text:
"Status Type",isRequired: true,
),
CustomDropdown(
initialValue: controller.selectStatus.value,
backClr: AppColors.clrD9,
borderClr: AppColors.clrGrey,
items: controller.userTypeStatus,
itemLabel: (item) => item,
onSelected: (selected) {
if (selected != null) {
controller.selectStatus.value = selected;
}
},
hintText: 'Select Status'),
controller.validateUserType.value == true ? TextView(
text: "Required",
style: 10.txtSBoldRed,
) : TextView(
text: "ABC",
style: 10.txtTransparent,
),
],
)),
SizedBox(width: 16),
Expanded(
//flex: 2,
child: Column(
children: [
TextView(text:
"",
),
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
CommonBtn(
bkClr: Colors.white,
text: AppStrings.cancel,
clickAction: () {},
),
SizedBox(width: 16),
CommonButton(
isLoading: controller.userTypeLoading,
height: 28,
borderRadius: 4,
width: 100,
text: AppStrings.submit,
clickAction: () {
if(controller.userTypeCtrl.text.isEmpty ||controller.selectStatus.value == "Select Status" ){
controller.validateUserStatus.value = true;
controller.validateUserType.value = true;
} else{
controller.validateUserStatus.value = false;
controller.validateUserType.value = false;
controller.createUserType();
}
},
),
],
),
),
],
))
],
);
}
}

View File

@ -55,7 +55,6 @@ class DashboardCtrl extends GetxController {
}
String? validateDropdown(String? value) {
print('data');
if (value == null || value.isEmpty) {
return 'Please select an item';
}
@ -94,7 +93,7 @@ class DashboardCtrl extends GetxController {
@override
void onInit() {
getManageUser();
getPlantEmailCode();
getDropDownData();
getEmailCodeOfRoleMapping();
userTypeDetails();
super.onInit();
@ -135,7 +134,7 @@ var userEmail =[].obs;
Map<String, String> requestBody = {
"userName": selectUser.value == "Select User Name" ? "" : selectUser.value,
"userTypeName": selectType.value == "Select UserType" ? "" : selectType.value,
"userTypeName": selectUser.value == "Select User Name" ? "" : selectUser.value,
"Email": selectEmail.value == "Select Email" ?"": selectEmail.value,
"EmployeeTransCode":
selectCode.value == "Select Employee Code" ? "" : selectCode.value,
@ -168,14 +167,7 @@ var userEmail =[].obs;
userLoading.value = false;
}
}
clearUserData(){
selectUser.value = "Select User Name";
selectEmail.value = "Select Email";
selectCode.value = "Select Employee Code";
selectType.value = "Select UserType";
selectedStatus.value = "Select Status";
getManageUser();
}
void nextPage() {
if (currentPage.value < totalPages.value) {
currentPage.value++;
@ -233,15 +225,14 @@ clearUserData(){
var status = ['Active', 'In-Active'];
var selectedStatus = 'Select Status'.obs;
var selectedValue = 'Select User Type'.obs;
var isValidate = false.obs;
Color errorTextColor = Colors.red;
void createUser() {
if (formKey.currentState!.validate()) {
validateAdduser.value = false;
addInternalUser();
} else {
validateAdduser.value = true;
isValidate.value = true;
}
}
@ -272,8 +263,6 @@ clearUserData(){
onclick: () {
Get.back();
getManageUser();
getEmailCodeOfRoleMapping();
getPlantEmailCode();
clearPrefillData();
selectedUser.value = 0;
});
@ -380,7 +369,7 @@ clearUserData(){
var employeeCode = [].obs;
var userEmails = [].obs;
getPlantEmailCode() async {
getDropDownData() async {
try {
dropDownLoader.value = true;
@ -404,7 +393,18 @@ clearUserData(){
selectPlantCode.value.isEmpty;
}
checkPlants() {
if (selectPlantEmail.value == "Select Email" ||
selectPlantCode.value == "Select Employee Code") {
CommonDialog.showDialog(
message: "Select all mandatory fields",
onclick: () {
Get.back();
});
} else {
getPlantMapping();
}
}
clearRoleMapping() {
selectedEmail.value.isEmpty;
@ -435,7 +435,7 @@ clearUserData(){
var fetchEmailsNCodesLoading = false.obs;
var statusMessage = "".obs;
// roleMappingEmailCode
// rolemapping
getRoleMappingData() async {
try {
fetchEmailsNCodesLoading.value = true;
@ -443,14 +443,13 @@ clearUserData(){
"email": selectedEmail.value,
"employeeTransCode": selectedEmpCode.value,
};
var response = await PostRequests.fetchEmailsAndEmpCodes(requestBody,statusMessage.value);
var response = await PostRequests.fetchEmailsAndEmpCodes(requestBody);
if (response != null) {
roleMappingData.value = response.data!;
showRolesSection.value = true;
statusMessage.value = response.status.toString();
} else {
//print("cdg");
print("cdg");
// AppAlerts.alert(message: "sxjs");
}
} finally {
@ -579,10 +578,11 @@ clearUserData(){
}
RxBool validateRoleEmail = false.obs;
RxBool validateRoleMapCode = false.obs;
RxBool validatePlantEmail = false.obs;
RxBool validateAdduser = false.obs;
RxBool validatePlantCode = false.obs;
RxBool validateUserStatus = false.obs;
RxBool validateUserType = false.obs;
searchEmpCode(String enterValue) {
print('-----typing ---- ${enterValue}');
@ -606,6 +606,26 @@ clearUserData(){
}
RxString? validateEmail;
// Error message
RxString? showErrorText;
void onEmailSelected(dynamic email) {
selectedEmail.value = email;
}
void onSaveClick() {
// Validate that an email is selected
if (selectedEmail.value.isEmpty) {
errorText.value = "Required"; // Set the error message
} else {
errorText.value = ""; // Clear the error message if selection is valid
// Perform your save action (e.g., API call, navigation, etc.)
print('Email Selected: $selectedEmail');
}
}
}

View File

@ -3,6 +3,7 @@ import 'package:get/get.dart';
import 'package:shayog/components/styles/app_strings.dart';
import 'package:shayog/components/styles/textStyles.dart';
import 'package:shayog/feature/presentation/screens/transporter/view/transport_view.dart';
import 'package:shayog/feature/presentation/screens/transporter/view_model/transport_controller.dart';
import '../../../../components/styles/app_colors.dart';
import '../../widgets/text_view.dart';
import '../admin/configuration_management/configuration_screen.dart';
@ -76,7 +77,6 @@ class _DashboardScreenState extends State<DashboardScreen> {
itemBuilder: (context) {
return [
PopupMenuItem<int>(
value: 0,
height: 30,
onTap: () {
@ -87,7 +87,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
style: 12.txtSBoldGrey,
),
),
const PopupMenuDivider(), // Divider between items
const PopupMenuDivider(), // Divider between items
PopupMenuItem<int>(
value: 1,
height: 35,
@ -102,7 +102,6 @@ class _DashboardScreenState extends State<DashboardScreen> {
];
},
),
SizedBox(width: 8),
],
),
@ -155,8 +154,6 @@ class _DashboardScreenState extends State<DashboardScreen> {
ctrl.tabs[index].title ?? "",
textAlign: TextAlign.center,
style: 10.txtBoldWhite,
)
],
),

View File

@ -2,6 +2,7 @@
//
// final getInvoiceResponse = getInvoiceResponseFromJson(jsonString);
import 'package:meta/meta.dart';
import 'dart:convert';
GetInvoiceResponse getInvoiceResponseFromJson(String str) => GetInvoiceResponse.fromJson(json.decode(str));
@ -12,8 +13,8 @@ class GetInvoiceResponse {
final List<List<GetInvoiceContent>> content;
final Pageable pageable;
final bool last;
final int totalElements;
final int totalPages;
final int totalElements;
final int size;
final int number;
final Sort sort;
@ -25,8 +26,8 @@ class GetInvoiceResponse {
required this.content,
required this.pageable,
required this.last,
required this.totalElements,
required this.totalPages,
required this.totalElements,
required this.size,
required this.number,
required this.sort,
@ -39,8 +40,8 @@ class GetInvoiceResponse {
content: List<List<GetInvoiceContent>>.from(json["content"].map((x) => List<GetInvoiceContent>.from(x.map((x) => GetInvoiceContent.fromJson(x))))),
pageable: Pageable.fromJson(json["pageable"]),
last: json["last"],
totalElements: json["totalElements"],
totalPages: json["totalPages"],
totalElements: json["totalElements"],
size: json["size"],
number: json["number"],
sort: Sort.fromJson(json["sort"]),
@ -53,8 +54,8 @@ class GetInvoiceResponse {
"content": List<dynamic>.from(content.map((x) => List<dynamic>.from(x.map((x) => x.toJson())))),
"pageable": pageable.toJson(),
"last": last,
"totalElements": totalElements,
"totalPages": totalPages,
"totalElements": totalElements,
"size": size,
"number": number,
"sort": sort.toJson(),
@ -68,8 +69,14 @@ class GetInvoiceContent {
final int invoiceId;
final String freightbillCode;
final String sapReferenceno;
final double shipmentCost;
final int shipmentCost;
final DateTime shipmentCostDate;
final int statusId;
final String status;
final String plantCode;
final String plantDesc;
final String materialCode;
final String materialDescription;
final DateTime createdOn;
GetInvoiceContent({
@ -78,6 +85,12 @@ class GetInvoiceContent {
required this.sapReferenceno,
required this.shipmentCost,
required this.shipmentCostDate,
required this.statusId,
required this.status,
required this.plantCode,
required this.plantDesc,
required this.materialCode,
required this.materialDescription,
required this.createdOn,
});
@ -85,8 +98,16 @@ class GetInvoiceContent {
invoiceId: json["invoice_id"],
freightbillCode: json["freightbill_code"],
sapReferenceno: json["sap_referenceno"],
shipmentCost: json["shipment_cost"]?.toDouble(),
// shipmentCost: json["shipment_cost"],
shipmentCost: (json["shipment_cost"] as num).toInt(),
shipmentCostDate: DateTime.parse(json["shipment_cost_date"]),
statusId: json["status_id"],
status: json["status"],
plantCode: json["plant_code"],
plantDesc: json["plant_desc"],
materialCode: json["material_code"],
materialDescription: json["material_description"],
createdOn: DateTime.parse(json["created_on"]),
);
@ -96,6 +117,12 @@ class GetInvoiceContent {
"sap_referenceno": sapReferenceno,
"shipment_cost": shipmentCost,
"shipment_cost_date": "${shipmentCostDate.year.toString().padLeft(4, '0')}-${shipmentCostDate.month.toString().padLeft(2, '0')}-${shipmentCostDate.day.toString().padLeft(2, '0')}",
"status_id": statusId,
"status": status,
"plant_code": plantCode,
"plant_desc": plantDesc,
"material_code": materialCode,
"material_description": materialDescription,
"created_on": createdOn.toIso8601String(),
};
}

View File

@ -0,0 +1,337 @@
// To parse this JSON data, do
//
// final paymentResModel = paymentResModelFromJson(jsonString);
import 'dart:convert';
PaymentResModel paymentResModelFromJson(String str) => PaymentResModel.fromJson(json.decode(str));
String paymentResModelToJson(PaymentResModel data) => json.encode(data.toJson());
class PaymentResModel {
final List<List<Payment>>? content;
final Pageable? pageable;
final int? totalPages;
final int? totalElements;
final bool? last;
final int? size;
final int? number;
final Sort? sort;
final int? numberOfElements;
final bool? first;
final bool? empty;
PaymentResModel({
this.content,
this.pageable,
this.totalPages,
this.totalElements,
this.last,
this.size,
this.number,
this.sort,
this.numberOfElements,
this.first,
this.empty,
});
factory PaymentResModel.fromJson(Map<String, dynamic> json) => PaymentResModel(
content: json["content"] == null ? [] : List<List<Payment>>.from(json["content"]!.map((x) => List<Payment>.from(x.map((x) => Payment.fromJson(x))))),
pageable: json["pageable"] == null ? null : Pageable.fromJson(json["pageable"]),
totalPages: json["totalPages"],
totalElements: json["totalElements"],
last: json["last"],
size: json["size"],
number: json["number"],
sort: json["sort"] == null ? null : Sort.fromJson(json["sort"]),
numberOfElements: json["numberOfElements"],
first: json["first"],
empty: json["empty"],
);
Map<String, dynamic> toJson() => {
"content": content == null ? [] : List<dynamic>.from(content!.map((x) => List<dynamic>.from(x.map((x) => x.toJson())))),
"pageable": pageable?.toJson(),
"totalPages": totalPages,
"totalElements": totalElements,
"last": last,
"size": size,
"number": number,
"sort": sort?.toJson(),
"numberOfElements": numberOfElements,
"first": first,
"empty": empty,
};
}
class Payment {
final int? plantId;
final String? plantCode;
final String? plantDesc;
final int? materialId;
final String? materialCode;
final dynamic uom;
final double? shipmentNetQty;
final double? shipmentNetCost;
final int? igstAmount;
final double? sgstAmount;
final double? cgstAmount;
final double? totalGst;
final double? shipmentGrossCost;
final int? invoiceId;
final dynamic transporterInvoiceNo;
final dynamic transporterInvoiceNoDate;
final int? freightbillId;
final String? freightbillCode;
final double? shipmentCost;
final DateTime? shipmentCostDate;
final double? gstAmount;
final dynamic paymentAmount;
final dynamic paymentDate;
final dynamic paymentCaseno;
final String? miroDocument;
final DateTime? miroDocumentDate;
final String? sapReferenceno;
final dynamic utr1No;
final dynamic utr2No;
final dynamic utr3No;
final dynamic utr4No;
final dynamic utr5No;
final dynamic utr1PaymentAmount;
final dynamic utr2PaymentAmount;
final dynamic utr3PaymentAmount;
final dynamic utr4PaymentAmount;
final dynamic utr5PaymentAmount;
final dynamic utr1Date;
final dynamic utr2Date;
final dynamic utr3Date;
final dynamic utr4Date;
final dynamic utr5Date;
final dynamic singedDocLink;
final dynamic signedDocUploadedOn;
final dynamic signedDocUploadedBy;
final String? status;
final int? statusId;
final int? createdBy;
final int? lastUpdatedBy;
final DateTime? lastUpdatedOn;
Payment({
this.plantId,
this.plantCode,
this.plantDesc,
this.materialId,
this.materialCode,
this.uom,
this.shipmentNetQty,
this.shipmentNetCost,
this.igstAmount,
this.sgstAmount,
this.cgstAmount,
this.totalGst,
this.shipmentGrossCost,
this.invoiceId,
this.transporterInvoiceNo,
this.transporterInvoiceNoDate,
this.freightbillId,
this.freightbillCode,
this.shipmentCost,
this.shipmentCostDate,
this.gstAmount,
this.paymentAmount,
this.paymentDate,
this.paymentCaseno,
this.miroDocument,
this.miroDocumentDate,
this.sapReferenceno,
this.utr1No,
this.utr2No,
this.utr3No,
this.utr4No,
this.utr5No,
this.utr1PaymentAmount,
this.utr2PaymentAmount,
this.utr3PaymentAmount,
this.utr4PaymentAmount,
this.utr5PaymentAmount,
this.utr1Date,
this.utr2Date,
this.utr3Date,
this.utr4Date,
this.utr5Date,
this.singedDocLink,
this.signedDocUploadedOn,
this.signedDocUploadedBy,
this.status,
this.statusId,
this.createdBy,
this.lastUpdatedBy,
this.lastUpdatedOn,
});
factory Payment.fromJson(Map<String, dynamic> json) => Payment(
plantId: json["plant_id"],
plantCode: json["plant_code"],
plantDesc: json["plant_desc"],
materialId: json["material_id"],
materialCode: json["material_code"],
uom: json["uom"],
shipmentNetQty: json["shipment_net_qty"]?.toDouble(),
shipmentNetCost: json["shipment_net_cost"]?.toDouble(),
igstAmount: json["igst_amount"],
sgstAmount: json["sgst_amount"]?.toDouble(),
cgstAmount: json["cgst_amount"]?.toDouble(),
totalGst: json["total_gst"]?.toDouble(),
shipmentGrossCost: json["shipment_gross_cost"]?.toDouble(),
invoiceId: json["invoice_id"],
transporterInvoiceNo: json["transporter_invoice_no"],
transporterInvoiceNoDate: json["transporter_invoice_no_date"],
freightbillId: json["freightbill_id"],
freightbillCode: json["freightbill_code"],
shipmentCost: json["shipment_cost"]?.toDouble(),
shipmentCostDate: json["shipment_cost_date"] == null ? null : DateTime.parse(json["shipment_cost_date"]),
gstAmount: json["gst_amount"]?.toDouble(),
paymentAmount: json["payment_amount"],
paymentDate: json["payment_date"],
paymentCaseno: json["payment_caseno"],
miroDocument: json["miro_document"],
miroDocumentDate: json["miro_document_date"] == null ? null : DateTime.parse(json["miro_document_date"]),
sapReferenceno: json["sap_referenceno"],
utr1No: json["utr1_no"],
utr2No: json["utr2_no"],
utr3No: json["utr3_no"],
utr4No: json["utr4_no"],
utr5No: json["utr5_no"],
utr1PaymentAmount: json["utr1_payment_amount"],
utr2PaymentAmount: json["utr2_payment_amount"],
utr3PaymentAmount: json["utr3_payment_amount"],
utr4PaymentAmount: json["utr4_payment_amount"],
utr5PaymentAmount: json["utr5_payment_amount"],
utr1Date: json["utr1_date"],
utr2Date: json["utr2_date"],
utr3Date: json["utr3_date"],
utr4Date: json["utr4_date"],
utr5Date: json["utr5_date"],
singedDocLink: json["singed_doc_link"],
signedDocUploadedOn: json["signed_doc_uploaded_on"],
signedDocUploadedBy: json["signed_doc_uploaded_by"],
status: json["status"],
statusId: json["status_id"],
createdBy: json["created_by"],
lastUpdatedBy: json["last_updated_by"],
lastUpdatedOn: json["last_updated_on"] == null ? null : DateTime.parse(json["last_updated_on"]),
);
Map<String, dynamic> toJson() => {
"plant_id": plantId,
"plant_code": plantCode,
"plant_desc": plantDesc,
"material_id": materialId,
"material_code": materialCode,
"uom": uom,
"shipment_net_qty": shipmentNetQty,
"shipment_net_cost": shipmentNetCost,
"igst_amount": igstAmount,
"sgst_amount": sgstAmount,
"cgst_amount": cgstAmount,
"total_gst": totalGst,
"shipment_gross_cost": shipmentGrossCost,
"invoice_id": invoiceId,
"transporter_invoice_no": transporterInvoiceNo,
"transporter_invoice_no_date": transporterInvoiceNoDate,
"freightbill_id": freightbillId,
"freightbill_code": freightbillCode,
"shipment_cost": shipmentCost,
"shipment_cost_date": "${shipmentCostDate!.year.toString().padLeft(4, '0')}-${shipmentCostDate!.month.toString().padLeft(2, '0')}-${shipmentCostDate!.day.toString().padLeft(2, '0')}",
"gst_amount": gstAmount,
"payment_amount": paymentAmount,
"payment_date": paymentDate,
"payment_caseno": paymentCaseno,
"miro_document": miroDocument,
"miro_document_date": "${miroDocumentDate!.year.toString().padLeft(4, '0')}-${miroDocumentDate!.month.toString().padLeft(2, '0')}-${miroDocumentDate!.day.toString().padLeft(2, '0')}",
"sap_referenceno": sapReferenceno,
"utr1_no": utr1No,
"utr2_no": utr2No,
"utr3_no": utr3No,
"utr4_no": utr4No,
"utr5_no": utr5No,
"utr1_payment_amount": utr1PaymentAmount,
"utr2_payment_amount": utr2PaymentAmount,
"utr3_payment_amount": utr3PaymentAmount,
"utr4_payment_amount": utr4PaymentAmount,
"utr5_payment_amount": utr5PaymentAmount,
"utr1_date": utr1Date,
"utr2_date": utr2Date,
"utr3_date": utr3Date,
"utr4_date": utr4Date,
"utr5_date": utr5Date,
"singed_doc_link": singedDocLink,
"signed_doc_uploaded_on": signedDocUploadedOn,
"signed_doc_uploaded_by": signedDocUploadedBy,
"status": status,
"status_id": statusId,
"created_by": createdBy,
"last_updated_by": lastUpdatedBy,
"last_updated_on": lastUpdatedOn?.toIso8601String(),
};
}
class Pageable {
final Sort? sort;
final int? pageNumber;
final int? pageSize;
final int? offset;
final bool? paged;
final bool? unpaged;
Pageable({
this.sort,
this.pageNumber,
this.pageSize,
this.offset,
this.paged,
this.unpaged,
});
factory Pageable.fromJson(Map<String, dynamic> json) => Pageable(
sort: json["sort"] == null ? null : Sort.fromJson(json["sort"]),
pageNumber: json["pageNumber"],
pageSize: json["pageSize"],
offset: json["offset"],
paged: json["paged"],
unpaged: json["unpaged"],
);
Map<String, dynamic> toJson() => {
"sort": sort?.toJson(),
"pageNumber": pageNumber,
"pageSize": pageSize,
"offset": offset,
"paged": paged,
"unpaged": unpaged,
};
}
class Sort {
final bool? sorted;
final bool? empty;
final bool? unsorted;
Sort({
this.sorted,
this.empty,
this.unsorted,
});
factory Sort.fromJson(Map<String, dynamic> json) => Sort(
sorted: json["sorted"],
empty: json["empty"],
unsorted: json["unsorted"],
);
Map<String, dynamic> toJson() => {
"sorted": sorted,
"empty": empty,
"unsorted": unsorted,
};
}

View File

@ -0,0 +1,175 @@
// To parse this JSON data, do
//
// final subFreightViewDialogModel = subFreightViewDialogModelFromJson(jsonString);
import 'dart:convert';
SubFreightViewDialogModel subFreightViewDialogModelFromJson(String str) => SubFreightViewDialogModel.fromJson(json.decode(str));
String subFreightViewDialogModelToJson(SubFreightViewDialogModel data) => json.encode(data.toJson());
class SubFreightViewDialogModel {
List<Grn>? grn;
String? freightBillCode;
DateTime? freightBillDate;
SubFreightViewDialogModel({
this.grn,
this.freightBillCode,
this.freightBillDate,
});
SubFreightViewDialogModel copyWith({
List<Grn>? grn,
String? freightBillCode,
DateTime? freightBillDate,
}) =>
SubFreightViewDialogModel(
grn: grn ?? this.grn,
freightBillCode: freightBillCode ?? this.freightBillCode,
freightBillDate: freightBillDate ?? this.freightBillDate,
);
factory SubFreightViewDialogModel.fromJson(Map<String, dynamic> json) => SubFreightViewDialogModel(
grn: json["grn"] == null ? [] : List<Grn>.from(json["grn"]!.map((x) => Grn.fromJson(x))),
freightBillCode: json["freightBillCode"],
freightBillDate: json["freightBillDate"] == null ? null : DateTime.parse(json["freightBillDate"]),
);
Map<String, dynamic> toJson() => {
"grn": grn == null ? [] : List<dynamic>.from(grn!.map((x) => x.toJson())),
"freightBillCode": freightBillCode,
"freightBillDate": freightBillDate?.toIso8601String(),
};
}
class Grn {
int? grnId;
String? grnNo;
DateTime? grnDate;
String? plantCode;
String? materialCode;
String? transporterCode;
String? transporterName;
String? fromLocation;
String? vehicleNo;
String? vehicleType;
double? shipmentCost;
String? lrNo;
DateTime? lrDate;
double? dispQty;
double? netQty;
double? billingQty;
int? freightRate;
String? plantDesc;
String? materialDescription;
Grn({
this.grnId,
this.grnNo,
this.grnDate,
this.plantCode,
this.materialCode,
this.transporterCode,
this.transporterName,
this.fromLocation,
this.vehicleNo,
this.vehicleType,
this.shipmentCost,
this.lrNo,
this.lrDate,
this.dispQty,
this.netQty,
this.billingQty,
this.freightRate,
this.plantDesc,
this.materialDescription,
});
Grn copyWith({
int? grnId,
String? grnNo,
DateTime? grnDate,
String? plantCode,
String? materialCode,
String? transporterCode,
String? transporterName,
String? fromLocation,
String? vehicleNo,
String? vehicleType,
double? shipmentCost,
String? lrNo,
DateTime? lrDate,
double? dispQty,
double? netQty,
double? billingQty,
int? freightRate,
String? plantDesc,
String? materialDescription,
}) =>
Grn(
grnId: grnId ?? this.grnId,
grnNo: grnNo ?? this.grnNo,
grnDate: grnDate ?? this.grnDate,
plantCode: plantCode ?? this.plantCode,
materialCode: materialCode ?? this.materialCode,
transporterCode: transporterCode ?? this.transporterCode,
transporterName: transporterName ?? this.transporterName,
fromLocation: fromLocation ?? this.fromLocation,
vehicleNo: vehicleNo ?? this.vehicleNo,
vehicleType: vehicleType ?? this.vehicleType,
shipmentCost: shipmentCost ?? this.shipmentCost,
lrNo: lrNo ?? this.lrNo,
lrDate: lrDate ?? this.lrDate,
dispQty: dispQty ?? this.dispQty,
netQty: netQty ?? this.netQty,
billingQty: billingQty ?? this.billingQty,
freightRate: freightRate ?? this.freightRate,
plantDesc: plantDesc ?? this.plantDesc,
materialDescription: materialDescription ?? this.materialDescription,
);
factory Grn.fromJson(Map<String, dynamic> json) => Grn(
grnId: json["grn_id"],
grnNo: json["grn_no"],
grnDate: json["grn_date"] == null ? null : DateTime.parse(json["grn_date"]),
plantCode: json["plant_code"],
materialCode: json["material_code"],
transporterCode: json["transporter_code"],
transporterName: json["transporter_name"],
fromLocation: json["from_location"],
vehicleNo: json["vehicle_no"],
vehicleType: json["vehicle_type"],
shipmentCost: json["shipment_cost"]?.toDouble(),
lrNo: json["lr_no"],
lrDate: json["lr_date"] == null ? null : DateTime.parse(json["lr_date"]),
dispQty: json["disp_qty"]?.toDouble(),
netQty: json["net_qty"]?.toDouble(),
billingQty: json["billing_qty"]?.toDouble(),
freightRate: json["freight_rate"],
plantDesc: json["plant_desc"],
materialDescription: json["material_description"],
);
Map<String, dynamic> toJson() => {
"grn_id": grnId,
"grn_no": grnNo,
"grn_date": "${grnDate!.year.toString().padLeft(4, '0')}-${grnDate!.month.toString().padLeft(2, '0')}-${grnDate!.day.toString().padLeft(2, '0')}",
"plant_code": plantCode,
"material_code": materialCode,
"transporter_code": transporterCode,
"transporter_name": transporterName,
"from_location": fromLocation,
"vehicle_no": vehicleNo,
"vehicle_type": vehicleType,
"shipment_cost": shipmentCost,
"lr_no": lrNo,
"lr_date": "${lrDate!.year.toString().padLeft(4, '0')}-${lrDate!.month.toString().padLeft(2, '0')}-${lrDate!.day.toString().padLeft(2, '0')}",
"disp_qty": dispQty,
"net_qty": netQty,
"billing_qty": billingQty,
"freight_rate": freightRate,
"plant_desc": plantDesc,
"material_description": materialDescription,
};
}

View File

@ -9,95 +9,124 @@ ViewFreightBillResModel viewFreightBillResModelFromJson(String str) => ViewFreig
String viewFreightBillResModelToJson(ViewFreightBillResModel data) => json.encode(data.toJson());
class ViewFreightBillResModel {
final List<List<FreightBill>>? content;
final Pageable? pageable;
final bool? last;
final int? totalElements;
final int? totalPages;
final int? size;
final int? number;
final Sort? sort;
final bool? first;
final int? numberOfElements;
final bool? empty;
List<List<FreightBill>>? content;
Pageable? pageable;
int? totalPages;
int? totalElements;
bool? last;
int? size;
int? number;
Sort? sort;
int? numberOfElements;
bool? first;
bool? empty;
ViewFreightBillResModel({
this.content,
this.pageable,
this.last,
this.totalElements,
this.totalPages,
this.totalElements,
this.last,
this.size,
this.number,
this.sort,
this.first,
this.numberOfElements,
this.first,
this.empty,
});
ViewFreightBillResModel copyWith({
List<List<FreightBill>>? content,
Pageable? pageable,
int? totalPages,
int? totalElements,
bool? last,
int? size,
int? number,
Sort? sort,
int? numberOfElements,
bool? first,
bool? empty,
}) =>
ViewFreightBillResModel(
content: content ?? this.content,
pageable: pageable ?? this.pageable,
totalPages: totalPages ?? this.totalPages,
totalElements: totalElements ?? this.totalElements,
last: last ?? this.last,
size: size ?? this.size,
number: number ?? this.number,
sort: sort ?? this.sort,
numberOfElements: numberOfElements ?? this.numberOfElements,
first: first ?? this.first,
empty: empty ?? this.empty,
);
factory ViewFreightBillResModel.fromJson(Map<String, dynamic> json) => ViewFreightBillResModel(
content: json["content"] == null ? [] : List<List<FreightBill>>.from(json["content"]!.map((x) => List<FreightBill>.from(x.map((x) => FreightBill.fromJson(x))))),
pageable: json["pageable"] == null ? null : Pageable.fromJson(json["pageable"]),
last: json["last"],
totalElements: json["totalElements"],
totalPages: json["totalPages"],
totalElements: json["totalElements"],
last: json["last"],
size: json["size"],
number: json["number"],
sort: json["sort"] == null ? null : Sort.fromJson(json["sort"]),
first: json["first"],
numberOfElements: json["numberOfElements"],
first: json["first"],
empty: json["empty"],
);
Map<String, dynamic> toJson() => {
"content": content == null ? [] : List<dynamic>.from(content!.map((x) => List<dynamic>.from(x.map((x) => x.toJson())))),
"pageable": pageable?.toJson(),
"last": last,
"totalElements": totalElements,
"totalPages": totalPages,
"totalElements": totalElements,
"last": last,
"size": size,
"number": number,
"sort": sort?.toJson(),
"first": first,
"numberOfElements": numberOfElements,
"first": first,
"empty": empty,
};
}
class FreightBill {
final int? freightbillId;
final String? freightbillCode;
final String? status;
final DateTime? statusDate;
final String? plantCode;
final String? materialCode;
final String? fromLocation;
final int? billingQty;
final dynamic uom;
final double? freightAmount;
final double? cgst;
final double? sgst;
final int? igst;
final double? totalGst;
final double? shipmentNetAmount;
final DateTime? createdOn;
final dynamic trasnporterInvoiceNo;
final dynamic trasnporterInvoiceNoDate;
final dynamic utr1No;
final dynamic utr2No;
final dynamic utr3No;
final dynamic utr4No;
final dynamic utr5No;
final dynamic utr1PaymentAmount;
final dynamic utr2PaymentAmount;
final dynamic utr3PaymentAmount;
final dynamic utr4PaymentAmount;
final dynamic utr5PaymentAmount;
final dynamic utr1Date;
final dynamic utr2Date;
final dynamic utr3Date;
final dynamic utr4Date;
final dynamic utr5Date;
int? freightbillId;
String? freightbillCode;
String? status;
DateTime? statusDate;
String? plantCode;
String? plantDesc;
String? materialCode;
String? materialDescription;
String? fromLocation;
dynamic billingNetQty;
dynamic uom;
double? shipmentGrossCost;
double? cgst;
double? sgst;
int? igst;
double? totalGst;
double? shipmentNetCost;
DateTime? createdOn;
dynamic transporterInvoiceNo;
dynamic transporterInvoiceNoDate;
dynamic utr1No;
dynamic utr2No;
dynamic utr3No;
dynamic utr4No;
dynamic utr5No;
dynamic utr1PaymentAmount;
dynamic utr2PaymentAmount;
dynamic utr3PaymentAmount;
dynamic utr4PaymentAmount;
dynamic utr5PaymentAmount;
dynamic utr1Date;
dynamic utr2Date;
dynamic utr3Date;
dynamic utr4Date;
dynamic utr5Date;
FreightBill({
this.freightbillId,
@ -105,19 +134,21 @@ class FreightBill {
this.status,
this.statusDate,
this.plantCode,
this.plantDesc,
this.materialCode,
this.materialDescription,
this.fromLocation,
this.billingQty,
this.billingNetQty,
this.uom,
this.freightAmount,
this.shipmentGrossCost,
this.cgst,
this.sgst,
this.igst,
this.totalGst,
this.shipmentNetAmount,
this.shipmentNetCost,
this.createdOn,
this.trasnporterInvoiceNo,
this.trasnporterInvoiceNoDate,
this.transporterInvoiceNo,
this.transporterInvoiceNoDate,
this.utr1No,
this.utr2No,
this.utr3No,
@ -135,25 +166,102 @@ class FreightBill {
this.utr5Date,
});
FreightBill copyWith({
int? freightbillId,
String? freightbillCode,
String? status,
DateTime? statusDate,
String? plantCode,
String? plantDesc,
String? materialCode,
String? materialDescription,
String? fromLocation,
dynamic billingNetQty,
dynamic uom,
double? shipmentGrossCost,
double? cgst,
double? sgst,
int? igst,
double? totalGst,
double? shipmentNetCost,
DateTime? createdOn,
dynamic transporterInvoiceNo,
dynamic transporterInvoiceNoDate,
dynamic utr1No,
dynamic utr2No,
dynamic utr3No,
dynamic utr4No,
dynamic utr5No,
dynamic utr1PaymentAmount,
dynamic utr2PaymentAmount,
dynamic utr3PaymentAmount,
dynamic utr4PaymentAmount,
dynamic utr5PaymentAmount,
dynamic utr1Date,
dynamic utr2Date,
dynamic utr3Date,
dynamic utr4Date,
dynamic utr5Date,
}) =>
FreightBill(
freightbillId: freightbillId ?? this.freightbillId,
freightbillCode: freightbillCode ?? this.freightbillCode,
status: status ?? this.status,
statusDate: statusDate ?? this.statusDate,
plantCode: plantCode ?? this.plantCode,
plantDesc: plantDesc ?? this.plantDesc,
materialCode: materialCode ?? this.materialCode,
materialDescription: materialDescription ?? this.materialDescription,
fromLocation: fromLocation ?? this.fromLocation,
billingNetQty: billingNetQty ?? this.billingNetQty,
uom: uom ?? this.uom,
shipmentGrossCost: shipmentGrossCost ?? this.shipmentGrossCost,
cgst: cgst ?? this.cgst,
sgst: sgst ?? this.sgst,
igst: igst ?? this.igst,
totalGst: totalGst ?? this.totalGst,
shipmentNetCost: shipmentNetCost ?? this.shipmentNetCost,
createdOn: createdOn ?? this.createdOn,
transporterInvoiceNo: transporterInvoiceNo ?? this.transporterInvoiceNo,
transporterInvoiceNoDate: transporterInvoiceNoDate ?? this.transporterInvoiceNoDate,
utr1No: utr1No ?? this.utr1No,
utr2No: utr2No ?? this.utr2No,
utr3No: utr3No ?? this.utr3No,
utr4No: utr4No ?? this.utr4No,
utr5No: utr5No ?? this.utr5No,
utr1PaymentAmount: utr1PaymentAmount ?? this.utr1PaymentAmount,
utr2PaymentAmount: utr2PaymentAmount ?? this.utr2PaymentAmount,
utr3PaymentAmount: utr3PaymentAmount ?? this.utr3PaymentAmount,
utr4PaymentAmount: utr4PaymentAmount ?? this.utr4PaymentAmount,
utr5PaymentAmount: utr5PaymentAmount ?? this.utr5PaymentAmount,
utr1Date: utr1Date ?? this.utr1Date,
utr2Date: utr2Date ?? this.utr2Date,
utr3Date: utr3Date ?? this.utr3Date,
utr4Date: utr4Date ?? this.utr4Date,
utr5Date: utr5Date ?? this.utr5Date,
);
factory FreightBill.fromJson(Map<String, dynamic> json) => FreightBill(
freightbillId: json["freightbill_id"],
freightbillCode: json["freightbill_code"],
status: json["status"],
statusDate: json["status_date"] == null ? null : DateTime.parse(json["status_date"]),
plantCode: json["plant_code"],
plantDesc: json["plant_desc"],
materialCode: json["material_code"],
materialDescription: json["material_description"],
fromLocation: json["from_location"],
billingQty: json["billing_qty"],
billingNetQty: json["billing_net_qty"],
uom: json["uom"],
freightAmount: json["freight_amount"]?.toDouble(),
shipmentGrossCost: json["shipment_gross_cost"]?.toDouble(),
cgst: json["cgst"]?.toDouble(),
sgst: json["sgst"]?.toDouble(),
igst: json["igst"],
totalGst: json["total_gst"]?.toDouble(),
shipmentNetAmount: json["shipment_net_amount"]?.toDouble(),
shipmentNetCost: json["shipment_net_cost"]?.toDouble(),
createdOn: json["created_on"] == null ? null : DateTime.parse(json["created_on"]),
trasnporterInvoiceNo: json["trasnporter_invoice_no"],
trasnporterInvoiceNoDate: json["trasnporter_invoice_no_date"],
transporterInvoiceNo: json["transporter_invoice_no"],
transporterInvoiceNoDate: json["transporter_invoice_no_date"],
utr1No: json["utr1_no"],
utr2No: json["utr2_no"],
utr3No: json["utr3_no"],
@ -177,19 +285,21 @@ class FreightBill {
"status": status,
"status_date": "${statusDate!.year.toString().padLeft(4, '0')}-${statusDate!.month.toString().padLeft(2, '0')}-${statusDate!.day.toString().padLeft(2, '0')}",
"plant_code": plantCode,
"plant_desc": plantDesc,
"material_code": materialCode,
"material_description": materialDescription,
"from_location": fromLocation,
"billing_qty": billingQty,
"billing_net_qty": billingNetQty,
"uom": uom,
"freight_amount": freightAmount,
"shipment_gross_cost": shipmentGrossCost,
"cgst": cgst,
"sgst": sgst,
"igst": igst,
"total_gst": totalGst,
"shipment_net_amount": shipmentNetAmount,
"shipment_net_cost": shipmentNetCost,
"created_on": createdOn?.toIso8601String(),
"trasnporter_invoice_no": trasnporterInvoiceNo,
"trasnporter_invoice_no_date": trasnporterInvoiceNoDate,
"transporter_invoice_no": transporterInvoiceNo,
"transporter_invoice_no_date": transporterInvoiceNoDate,
"utr1_no": utr1No,
"utr2_no": utr2No,
"utr3_no": utr3No,
@ -209,61 +319,89 @@ class FreightBill {
}
class Pageable {
final Sort? sort;
final int? offset;
final int? pageSize;
final int? pageNumber;
final bool? unpaged;
final bool? paged;
Sort? sort;
int? pageNumber;
int? pageSize;
int? offset;
bool? paged;
bool? unpaged;
Pageable({
this.sort,
this.offset,
this.pageSize,
this.pageNumber,
this.unpaged,
this.pageSize,
this.offset,
this.paged,
this.unpaged,
});
Pageable copyWith({
Sort? sort,
int? pageNumber,
int? pageSize,
int? offset,
bool? paged,
bool? unpaged,
}) =>
Pageable(
sort: sort ?? this.sort,
pageNumber: pageNumber ?? this.pageNumber,
pageSize: pageSize ?? this.pageSize,
offset: offset ?? this.offset,
paged: paged ?? this.paged,
unpaged: unpaged ?? this.unpaged,
);
factory Pageable.fromJson(Map<String, dynamic> json) => Pageable(
sort: json["sort"] == null ? null : Sort.fromJson(json["sort"]),
offset: json["offset"],
pageSize: json["pageSize"],
pageNumber: json["pageNumber"],
unpaged: json["unpaged"],
pageSize: json["pageSize"],
offset: json["offset"],
paged: json["paged"],
unpaged: json["unpaged"],
);
Map<String, dynamic> toJson() => {
"sort": sort?.toJson(),
"offset": offset,
"pageSize": pageSize,
"pageNumber": pageNumber,
"unpaged": unpaged,
"pageSize": pageSize,
"offset": offset,
"paged": paged,
"unpaged": unpaged,
};
}
class Sort {
final bool? empty;
final bool? sorted;
final bool? unsorted;
bool? sorted;
bool? empty;
bool? unsorted;
Sort({
this.empty,
this.sorted,
this.empty,
this.unsorted,
});
Sort copyWith({
bool? sorted,
bool? empty,
bool? unsorted,
}) =>
Sort(
sorted: sorted ?? this.sorted,
empty: empty ?? this.empty,
unsorted: unsorted ?? this.unsorted,
);
factory Sort.fromJson(Map<String, dynamic> json) => Sort(
empty: json["empty"],
sorted: json["sorted"],
empty: json["empty"],
unsorted: json["unsorted"],
);
Map<String, dynamic> toJson() => {
"empty": empty,
"sorted": sorted,
"empty": empty,
"unsorted": unsorted,
};
}

View File

@ -0,0 +1,323 @@
// import 'package:flutter/material.dart';
// import 'package:get/get.dart';
// import 'package:shayog/components/common/input_field.dart';
// import 'package:shayog/components/styles/textStyles.dart';
//
// import 'package:shayog/feature/presentation/screens/transporter/view/ctrl/invoice_management_controller.dart';
// import 'package:shayog/feature/presentation/screens/transporter/view/payment_ctrl.dart';
// import '../../../../../../components/common/common_btn.dart';
// import '../../../../../../components/common/common_button.dart';
// import '../../../../../../components/common/custom_drop_down.dart';
// import '../../../../../../components/common/data_cell.dart';
// import '../../../../../../components/styles/app_colors.dart';
// import '../../../../../../components/styles/app_strings.dart';
// import '../../widgets/text_view.dart';
//
//
// class PaymentView extends StatelessWidget {
// const PaymentView({super.key});
//
// @override
// Widget build(BuildContext context) {
// final controller = Get.put(InvoiceManagementController());
// final paymentCtrl = Get.put(PaymentViewCtrl());
// return Padding(
// padding: const EdgeInsets.symmetric(horizontal: 16.0),
// child: Column(
// children: [
// Obx(
// () => controller.isPaymentFilter.value
// ? Container(
// padding: const EdgeInsets.only(
// left: 16.0, top: 8, right: 16, bottom: 16),
// color: AppColors.clrF2,
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Row(
// children: [
// Expanded(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// TextView(text: "Plant"),
// SizedBox(height: 8),
// CustomDropdown(
// backClr: AppColors.clrD9,
// borderClr: AppColors.clrGrey,
// items: paymentCtrl.plant,
// itemLabel: (item) =>
// "${item.plantCode}-${item.plantDesc}",
// onSelected: (selected) {
// paymentCtrl.selectedPlant.value =
// selected?.plantCode ?? "";
// },
// hintText: paymentCtrl.selectedPlant.value,
// ),
// ],
// ),
// ),
// SizedBox(width: 16),
// Expanded(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// TextView(text: "Freight Bill No."),
// SizedBox(height: 8),
// CustomDropdown<String>(
// backClr: AppColors.clrD9,
// borderClr: AppColors.clrGrey,
// items: paymentCtrl.freightBill,
// itemLabel: (item) =>
// "${paymentCtrl.freightBill}",
// onSelected: (selected) {
// paymentCtrl.selectedFreightBill.value =
// selected.toString();
// },
// hintText:
// paymentCtrl.selectedFreightBill.value,
// ),
// ],
// ),
// ),
// SizedBox(width: 16),
// Expanded(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// TextView(text: "Product"),
// SizedBox(height: 8),
// CustomDropdown<dynamic>(
// width: 250,
// backClr: AppColors.clrD9,
// borderClr: AppColors.clrGrey,
// items: paymentCtrl.product,
// itemLabel: (item) =>
// "${item.materialCode}-${item.materialDescription}",
// onSelected: (selected) {
// paymentCtrl.selectedPlant.value =
// selected.materialCode;
// },
// hintText: paymentCtrl.selectedPlant.value,
// ),
// ],
// ),
// ),
// ],
// ),
// SizedBox(height: 12),
// Row(
// children: [
// Expanded(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// TextView(text: "Freight Invoice Date"),
// SizedBox(height: 8),
// InputField(
// title: "Select Invoice Freight Date",
// ),
// // CustomDropdown(
// // backClr: AppColors.clrD9,
// // borderClr: AppColors.clrGrey,
// // items: paymentCtrl.plant,
// // itemLabel: (item) =>
// // "${item.plantCode}-${item.plantDesc}",
// // onSelected: (selected) {
// // paymentCtrl.selectedPlant.value =
// // selected?.plantCode ?? "";
// // },
// // hintText: paymentCtrl.selectedPlant.value,
// // ),
// ],
// ),
// ),
// SizedBox(width: 16),
// Expanded(child: Container()),
// SizedBox(width: 16),
// Expanded(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// TextView(
// text: "Freight Bill No.",
// style: 12.txtTransparent),
// SizedBox(height: 8),
// Row(
// mainAxisAlignment: MainAxisAlignment.end,
// children: [
// CommonBtn(
// height: 25,
// width: 100,
// bkClr: Colors.white,
// text: AppStrings.cancel,
// style: 12.txtSBoldBlue,
// clickAction: () {},
// ),
// SizedBox(width: 16),
// CommonButton(
// isLoading: paymentCtrl.isPayment,
// borderRadius: 4,
// height: 25,
// width: 100,
// text: AppStrings.submit,
// textStyle: 12.txtSBoldWhite,
// clickAction: () {
// paymentCtrl.getPayments();
// },
// ),
// ],
// ),
// ],
// ),
// ),
// ],
// ),
// ],
// ),
// )
// : SizedBox(),
// ),
// Container(
// margin: EdgeInsets.only(bottom: 16, top: 8),
// // height: MediaQuery.of(context).size.height * 0.4,
// decoration:
// BoxDecoration(border: Border.all(color: AppColors.clrGrey)),
// child: RawScrollbar(
// thumbColor: AppColors.clrD9,
// radius: Radius.circular(2),
// trackVisibility: true,
// thumbVisibility: true,
// thickness: 14,
// controller: paymentCtrl.verticalScrollController,
// child: SingleChildScrollView(
// controller: paymentCtrl.verticalScrollController,
// child: RawScrollbar(
// thumbColor: AppColors.clrD9,
// radius: Radius.circular(2),
// thickness: 14,
// trackVisibility: true,
// thumbVisibility: true,
// controller: paymentCtrl.horizontalScrollController,
// child: SingleChildScrollView(
// scrollDirection: Axis.horizontal,
// controller: paymentCtrl.horizontalScrollController,
// child: Container(
// margin: EdgeInsets.only(bottom: 24, right: 24),
// child: DataTable(
// dataRowHeight: 28,
// headingRowHeight: 40,
// headingRowColor:
// WidgetStateProperty.all(AppColors.clrF2),
// border: TableBorder(
// horizontalInside:
// BorderSide(color: AppColors.clrGrey),
// verticalInside: BorderSide(color: AppColors.clrGrey),
// bottom: BorderSide(color: AppColors.clrGrey),
// left: BorderSide(color: AppColors.clrGrey),
// right: BorderSide(color: AppColors.clrGrey),
// top: BorderSide(color: AppColors.clrGrey),
// ),
// columns: [
// dataColumn(AppStrings.plant),
// dataColumn(AppStrings.productName,),
// dataColumn(AppStrings.freightBillNo),
// dataColumn(AppStrings.freightBillDate),
// dataColumn(AppStrings.billingQty),
// dataColumn(AppStrings.uom),
// dataColumn(AppStrings.freightAmount),
// dataColumn(AppStrings.cGST),
// dataColumn(AppStrings.sGST),
// dataColumn(AppStrings.iGST),
// dataColumn(AppStrings.totalGst),
// dataColumn(AppStrings.totalInvoiceAmt),
// dataColumn(AppStrings.paidAmt),
// dataColumn(AppStrings.gstHold),
// dataColumn('${AppStrings.utrNo}1'),
// dataColumn('${AppStrings.utrDate}1'),
// dataColumn('${AppStrings.utrAmt}1'),
// dataColumn('${AppStrings.utrNo}2'),
// dataColumn('${AppStrings.utrDate}2'),
// dataColumn('${AppStrings.utrAmt}2'),
// dataColumn('${AppStrings.utrNo}3'),
// dataColumn('${AppStrings.utrDate}3'),
// dataColumn('${AppStrings.utrAmt}3'),
// dataColumn('${AppStrings.utrNo}4'),
// dataColumn('${AppStrings.utrDate}4'),
// dataColumn('${AppStrings.utrAmt}4'),
// dataColumn('${AppStrings.utrNo}5'),
// dataColumn('${AppStrings.utrDate}5'),
// dataColumn('${AppStrings.utrAmt}5'),
//
// ],
// rows: List<DataRow>.generate(
// paymentCtrl.payments.length, (index) {
// final stoppage = paymentCtrl.payments[index];
//
// return DataRow(
// // selected: stoppage.isSelected,
// cells: [
// editableCell(index,
// "${stoppage.plantCode}-${stoppage.plantDesc}"),
// editableCell(index, "${stoppage.materialCode}"),
// editableCell(
// index, "${stoppage.freightbillCode}"),
// editableCell(index, "${stoppage.lastUpdatedOn}"),
// editableCell(index, "${stoppage.shipmentNetQty}"),
// editableCell(index, "TON"),
// editableCell(
// index, "${stoppage.shipmentNetCost}"),
// editableCell(index, "${stoppage.cgstAmount}"),
// editableCell(index, "${stoppage.sgstAmount}"),
// editableCell(index, "${stoppage.igstAmount}"),
// editableCell(index, "${stoppage.totalGst}"),
// editableCell(
// index, "${stoppage.shipmentGrossCost}"),
// editableCell(index, "-"),
// // editableCell(index,
// // "${stoppage.utr1PaymentAmount + stoppage.utr2PaymentAmount +
// // stoppage.utr3PaymentAmount + stoppage.utr4PaymentAmount +
// // stoppage.utr5PaymentAmount}"),
// editableCell(index, "${stoppage.gstAmount}"),
// editableCell(
// index, stoppage.utr1No ?? "-"),
// editableCell(index, stoppage.utr1Date ?? "-"),
// editableCell(index, stoppage.utr1PaymentAmount ?? "-"),
//
// editableCell(
// index, stoppage.utr2No ?? "-"),
// editableCell(index, stoppage.utr2Date ?? "-"),
// editableCell(index, stoppage.utr2PaymentAmount ?? "-"),
// editableCell(
// index, stoppage.utr3No ?? "-"),
// editableCell(index, stoppage.utr3Date ?? "-"),
// editableCell(index, stoppage.utr3PaymentAmount ?? "-"),
// editableCell(
// index, stoppage.utr4No ?? "-"),
// editableCell(index, stoppage.utr4Date ?? "-"),
// editableCell(index, stoppage.utr4PaymentAmount ?? "-"),
// editableCell(
// index, stoppage.utr5No ?? "-"),
// editableCell(index, stoppage.utr5Date ?? "-"),
// editableCell(index, stoppage.utr5PaymentAmount ?? "-"),
// ],
// );
// }),
// ),
// ),
// ),
// ),
// ),
// ),
// ),
// ],
// ),
// );
// }
// }

View File

@ -1,9 +1,13 @@
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import '../../../../../../components/common/common_model.dart';
import '../../../../../../components/styles/app_strings.dart';
import '../../../../../../services/network/get_requests.dart';
import '../../../../../../services/network/post_request.dart';
import '../../model/freightbill_res_model.dart';
import '../../model/get_invoice_response.dart';
import '../../model/view_freight_bill_res_model.dart';
class InvoiceManagementController extends GetxController{
var selectedState = 0.obs;
@ -20,10 +24,39 @@ class InvoiceManagementController extends GetxController{
var pageSize = 2.obs;
var sortField = "grn_date".obs;
var sortDirection = "desc".obs;
var isLoading = false.obs;
var product = <Prodect>[].obs;
var plant = <Plant>[].obs;
var freightBill = <String>[].obs;
var fromLocation = [].obs;
final fromTextFieldKey = GlobalKey();
TextEditingController fromController = TextEditingController();
DateTime fromSelectedDate = DateTime.now(); // Initialize with a default value
RxBool dateCheck = false.obs;
String getFormattedDate(DateTime date) {
return "${date.day.toString().padLeft(2, '0')}-${date.month.toString().padLeft(2, '0')}-${date.year}";
}
RxBool showTransactionErrorViewFreight = false.obs;
var selectFreightBillValidate = ''.obs;
// RxString selectPlantViewFreight = ''.obs;
// var selectProductViewFreight = ''.obs;
// RxBool showPlantErrorViewFreight = false.obs;
// RxBool showProductErrorViewFreight = false.obs;
var freightViewLoader = false.obs;
var freightBillData = <FreightBill>[].obs;
void toggleContainer() {
isSelected.value = true;
print("isSelected.value..${isSelected.value}");
}
@override
void onInit() {
getInvoiceView();
getFreightBills();
super.onInit();
}
getInvoiceView() async {
try {
invoiceViewLoader.value = true;
@ -34,7 +67,8 @@ class InvoiceManagementController extends GetxController{
"invFromDate":"",
"invToDate":"",
"freightFromDate":"",
"freightToDate":""
"freightToDate":"",
"status":""
};
var response = await PostRequests.getInvoice(requestBody);
@ -42,9 +76,10 @@ class InvoiceManagementController extends GetxController{
List<GetInvoiceContent> flattenedContent =
response.content!.expand((list) => list).toList();
getInvoiceData.assignAll(flattenedContent);
// print("response from${getInvoiceData[0].freightbillCode.runtimeType} view freight bill ${freightBillData[0].plantCode.runtimeType} and ${freightBillData[0].materialCode.runtimeType} and}");
// print("response from${getInvoiceData[0].freightbillCode.runtimeType} view freight bill ${freightBillData[0].plantCode.runtimeType} and ${freightBillData[0].materialCode.runtimeType} and}");
totalPages.value = response.totalPages ?? 0;
totalElements.value = response.totalElements ?? 0;
print('res from invoice ${response.toString()}');
}
} finally {
invoiceViewLoader.value = false;
@ -59,5 +94,105 @@ class InvoiceManagementController extends GetxController{
}
// viewFreightView(page: 0);
}
RxBool showPlantErrorFreight = false.obs;
RxBool showProductErrorFreight = false.obs;
RxString selectPlantFreight = ''.obs;
getFreightBills() async {
try {
isLoading.value = true;
var response = await GetRequests.getFreightBill();
if (response != null) {
plant.assignAll(response.plant ?? []);
product.assignAll(response.prodect ?? []);
freightBill.assignAll(response.freightBill ?? []);
fromLocation.assignAll(response.fromLocation ?? []);
}
} finally {
isLoading.value = false;
}
}
// void clearFiltersViewFreight() {
// selectPlantViewFreight.value = '';
// selectProductViewFreight.value = '';
// selectFreightBillValidate.value = '';
// fromController.clear();
// showPlantErrorViewFreight.value = false;
// showProductErrorViewFreight.value = false;
// showTransactionErrorViewFreight.value = false;
// }
// void handleFilterSubmitViewFreightBill() {
// print('submit call');
// validateFieldsViewFreightBill();
// if (selectPlantViewFreight.value.isEmpty ||
// selectProductViewFreight.value.isEmpty
// // ||
// // selectTransactionTypeViewFreight.value.isEmpty
// ) {
// print('submit call 22');
// } else {
// print('submit call 1');
// displayFilteredDataFromViewFreight();
// }
// }
// void validateFieldsViewFreightBill() {
// showPlantErrorViewFreight.value = selectPlantViewFreight.value.isEmpty;
// showTransactionErrorViewFreight.value =
// selectFreightBillValidate.value.isEmpty;
// showProductErrorViewFreight.value = selectProductViewFreight.value.isEmpty;
// }
//
// void displayFilteredDataFromViewFreight() async {
// try {
// freightViewLoader.value = true;
// Map<String, String> requestBody = {
// "plant": selectPlantViewFreight.value,
// "productNane": selectProductViewFreight.value,
// "freightBillNo": selectFreightBillValidate.value,
// "transactionType": "",
// "fromLocation": "",
// "grnFromDate": "",
// "grnToDate": "",
// };
//
// var response = await PostRequests.viewFreightBill(requestBody);
//
// if (response != null) {
// List<FreightBill> flattenedContent =
// response.content!.expand((list) => list).toList();
//
// List<FreightBill> filteredData = flattenedContent.where((item) {
// // Plant filter
// bool plantMatch = selectPlantViewFreight.value.isEmpty ||
// item.plantCode.toString().toLowerCase() ==
// selectPlantViewFreight.value.toLowerCase();
//
// // Product filter
// bool productMatch = selectProductViewFreight.value.isEmpty ||
// item.materialCode.toString().toLowerCase() ==
// selectProductViewFreight.value.toLowerCase();
//
// // Freight bill filter
// bool freightBillMatch = selectFreightBillValidate.value.isEmpty ||
// item.freightbillCode.toString().toLowerCase() ==
// selectFreightBillValidate.value.toLowerCase();
//
//
// return plantMatch && productMatch && freightBillMatch;
// }).toList();
// freightBillData.assignAll(filteredData);
//
// // Update pagination values
// totalPages.value = response.totalPages ?? 0;
// totalElements.value = response.totalElements ?? 0;
// } else {
// freightBillData.clear();
// }
// } catch (e) {
// freightBillData.clear();
// } finally {
// freightViewLoader.value = false;
// }
// }
}

View File

@ -3,13 +3,18 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:sizer/sizer.dart';
import 'package:vph_web_date_picker/vph_web_date_picker.dart';
import '../../../../../../components/common/common_btn.dart';
import '../../../../../../components/common/common_button.dart';
import '../../../../../../components/common/custom_drop_down.dart';
import '../../../../../../components/common/data_cell.dart';
import '../../../../../../components/common/input_field.dart';
import '../../../../../../components/styles/app_colors.dart';
import '../../../../../../components/styles/app_images.dart';
import '../../../../../../components/styles/app_strings.dart';
import '../../../../widgets/text_view.dart';
import '../ctrl/invoice_management_controller.dart';
import 'package:file_picker/file_picker.dart';
import 'package:path_provider/path_provider.dart';
@ -47,7 +52,7 @@ class _TransportViewState extends State<InvoiceManagement> {
shrinkWrap: true,
itemBuilder: (context, index) {
return Obx(
() => InkWell(
() => InkWell(
onTap: () {
ctrl.selectedState.value = index;
},
@ -57,7 +62,7 @@ class _TransportViewState extends State<InvoiceManagement> {
border: Border(
bottom: BorderSide(
color: ctrl.selectedState.value ==
index
index
? Colors.white
: AppColors.primaryClr,
width: 3))),
@ -93,7 +98,7 @@ class _TransportViewState extends State<InvoiceManagement> {
),
),
InkWell(
onTap: ctrl.toggleContainer,
onTap:(){ctrl.toggleContainer;} ,
child: Image.asset(AppImages.filter,
height: 12, width: 12)),
Padding(
@ -113,196 +118,230 @@ class _TransportViewState extends State<InvoiceManagement> {
),
),
Obx(
() => ctrl.isSelected.value
() => ctrl.isSelected.value
? Container(
padding: EdgeInsets.all(16),
color: AppColors.clrF2,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
padding: EdgeInsets.all(8),
color: AppColors.clrF2,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_commonText(
"Invoice No.",
),
SizedBox(height: 8),
InputField(
title: "Select Invoice No. ",
),
// Obx(
// () => Container(
// padding: EdgeInsets.only(left: 8),
// height: 35,
// decoration: BoxDecoration(
// borderRadius:
// BorderRadius.circular(4.0),
// color: AppColors.clrD9,
// border: Border.all(
// color: AppColors.clrGrey)),
// child: DropdownButton<String>(
// icon: Icon(
// Icons
// .keyboard_arrow_down_outlined,
// size: 20,
// color: AppColors.darkGrey),
//
// isExpanded: true,
// underline: SizedBox(),
//
// value: ctrl
// .selectedInvoice.value,
// // Use the selected value
// onChanged: (String? newValue) {
// if (newValue != null) {
// ctrl.selectedInvoice.value =
// newValue; // Update the selected value
// }
// },
// items: ctrl.invoiceNoItems
// .map((String value) {
// return DropdownMenuItem<String>(
// value: value.toString(),
// child: Text(
// value,
// style: TextStyle(
// fontSize: 12,
// color:
// AppColors.darkGrey),
// ),
// );
// }).toList(),
// ),
// ),
// ),
],
)),
SizedBox(width: 16),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_commonText(
"Invoice date",
),
SizedBox(height: 8),
InputField(
title: "Select Invoice Date",
),
],
)),
SizedBox(width: 16),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_commonText(
"Freight Bill No.",
),
SizedBox(height: 8),
InputField(
title: "Select Freight Bill No. ",
),
// Obx(
// () => Container(
// padding: EdgeInsets.only(left: 8),
// height: 35,
// decoration: BoxDecoration(
// borderRadius:
// BorderRadius.circular(4.0),
// color: AppColors.clrD9,
// border: Border.all(
// color: AppColors.clrGrey)),
// child: DropdownButton<String>(
// icon: Icon(
// Icons
// .keyboard_arrow_down_outlined,
// size: 20,
// color: AppColors.darkGrey),
//
// isExpanded: true,
// underline: SizedBox(),
//
// value: ctrl
// .selectedFreightNo.value,
// // Use the selected value
// onChanged: (String? newValue) {
// if (newValue != null) {
// ctrl
// .selectedFreightNo.value =
// newValue; // Update the selected value
// }
// },
// items: ctrl.getInvoiceNoItems
// .map((String value) {
// return DropdownMenuItem<String>(
// value: value.toString(),
// child: Text(
// value,
// style: TextStyle(
// fontSize: 12,
// color:
// AppColors.darkGrey),
// ),
// );
// }).toList(),
// ),
// ),
// ),
],
)),
TextView(text: "Plant", isRequired: true),
SizedBox(height: 8),
CustomDropdown(
backClr: AppColors.clrD9,
borderClr: AppColors.clrGrey,
items: ctrl.plant,
itemLabel: (item) =>
"${item.plantCode} - ${item.plantDesc}",
onSelected: (selected) {
if (selected != null) {
ctrl.selectPlantFreight.value =
selected.plantCode ?? "";
ctrl.showPlantErrorFreight.value =
false;
}
},
hintText: "Select Plant",
),
Obx(() =>
ctrl.showPlantErrorFreight.value
? Text(
'Required',
style: TextStyle(
color: Colors.red,
fontSize: 12),
)
: Text('')),
],
),
Padding(
padding:
const EdgeInsets.only(top: 16.0, left: 0, right: 8),
child: Row(
children: [
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_commonText(
"Freight Bill Date",
),
SizedBox(width: 16),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(text: "Freight Bill Date"),
Container(
margin: EdgeInsets.only(top: 8),
height: 35,
child: TextFormField(
key: ctrl.fromTextFieldKey,
controller: ctrl.fromController,
onTap: () async {
final pickedDate =
await showWebDatePicker(
width: 20.w,
context: ctrl
.fromTextFieldKey.currentContext!,
initialDate:
ctrl.fromSelectedDate,
firstDate: DateTime(2000),
lastDate: DateTime.now(),
);
if (pickedDate != null) {
ctrl.fromSelectedDate =
pickedDate;
String formattedDate = ctrl
.getFormattedDate(pickedDate);
ctrl.fromController.text =
formattedDate;
ctrl.dateCheck.value = true;
}
},
decoration: InputDecoration(
fillColor: AppColors.clrD9,
filled: true,
hintText: 'Select Freight Bill Date ',
hintStyle: TextStyle(
fontSize: 12,
overflow: TextOverflow.ellipsis),
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(2.0),
borderSide:
BorderSide(color: AppColors.black),
),
SizedBox(height: 8),
InputField(
title: "Select Bill Date",
enabledBorder: OutlineInputBorder(
borderRadius:
BorderRadius.circular(2.0),
borderSide: BorderSide(
color: AppColors.clrGrey),
),
],
)),
],
),
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
CommonBtn(
bkClr: Colors.white,
text: AppStrings.cancel,
clickAction: () {},
focusedBorder: OutlineInputBorder(
borderRadius:
BorderRadius.circular(2.0),
borderSide: BorderSide(
color: AppColors.clrGrey),
),
disabledBorder: OutlineInputBorder(
borderRadius:
BorderRadius.circular(2.0),
borderSide: BorderSide(
color: AppColors.clrGrey),
),
suffixIcon: ctrl.dateCheck.value
? InkWell(
onTap: () {
ctrl.dateCheck.value =
false;
ctrl.fromController
.clear();
ctrl.fromSelectedDate =
DateTime.now();
},
child: Icon(Icons.close,
size: 1.2.w),
)
: null,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 12.0, vertical: 0.0),
),
),
SizedBox(width: 16),
CommonBtn(
text: AppStrings.submit,
clickAction: () {},
),
],
),
),
],
),
],
),
)
),
SizedBox(width: 16),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(
text: "Freight Bill No.", isRequired: true),
SizedBox(height: 8),
CustomDropdown<String>(
backClr: AppColors.clrD9,
borderClr: AppColors.clrGrey,
items: ctrl.freightBill,
itemLabel: (item) => item,
onSelected: (selected) {
if (selected != null) {
ctrl.selectFreightBillValidate.value =
selected;
ctrl.showTransactionErrorViewFreight
.value = false;
}
},
hintText: "Select Freight Bill No.",
),
Obx(() => ctrl
.showTransactionErrorViewFreight.value
? Text(
'Required',
style: TextStyle(
color: Colors.red, fontSize: 12),
)
: Text('')),
],
),
),
],
),
// Padding(
// padding:
// const EdgeInsets.only(top: 16.0, left: 0, right: 8),
// child: Row(
// children: [
// Expanded(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// _commonText(
// "Freight Bill Date",
// ),
// SizedBox(height: 8),
// InputField(
// title: "Select Bill Date",
// ),
// ],
// )),
// ],
// ),
// ),
Expanded(
//flex: 2,
child: Column(
children: [
TextView(
text: "",
),
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
CommonBtn(
bkClr: Colors.white,
text: AppStrings.cancel,
clickAction: () {},
),
SizedBox(width: 16),
CommonBtn(
text: AppStrings.submit,
clickAction: () {},
),
],
),
),
],
))
],
),
)
: SizedBox(),
),
Obx(() {
@ -310,11 +349,11 @@ class _TransportViewState extends State<InvoiceManagement> {
case 0:
return _tableView();
case 1:
return _tableView();
return Center(child: Text('No Data Found'),);
case 2:
return _tableView();
return Center(child: Text('No Data Found'),);
default:
return _tableView();
return Center(child: Text('No Data Found'),);
}
}),
],
@ -322,159 +361,158 @@ class _TransportViewState extends State<InvoiceManagement> {
}
_tableView() {
return Column(
children: [
Scrollbar(
thumbVisibility: true,
controller: verticalScrollController,
child: SingleChildScrollView(
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
children: [
Scrollbar(
thumbVisibility: true,
controller: verticalScrollController,
child: Scrollbar(
thumbVisibility: true,
controller: horizontalScrollController,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: SingleChildScrollView(
controller: verticalScrollController,
child: Scrollbar(
thumbVisibility: true,
controller: horizontalScrollController,
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey.shade400,
width: 1.0,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
controller: horizontalScrollController,
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey.shade400,
width: 1.0,
),
),
),
child: DataTable(
dataRowHeight: 40,
headingRowHeight: 40,
headingRowColor: WidgetStateProperty.all(AppColors.clrF2),
border: TableBorder(
horizontalInside: BorderSide(color: AppColors.clrGrey),
verticalInside: BorderSide(color: AppColors.clrGrey),
bottom: BorderSide(color: AppColors.clrGrey),
left: BorderSide(color: AppColors.clrGrey),
right: BorderSide(color: AppColors.clrGrey),
top: BorderSide(color: AppColors.clrGrey),
),
columns: [
dataColumn("Refrence No."),
//dataColumn(AppStrings.productName, onSort: (_, __) => ctrl.changeSort(AppStrings.productName.toLowerCase())),
dataColumn("Freight Bill No."),
//dataColumn(AppStrings.getInvoiceDate),
dataColumn("Freight Bill date"),
dataColumn("Invoice No."),
dataColumn("Invoice Date"),
dataColumn("Invoice Amount"),
dataColumn("CCN Amount"),
dataColumn("View CCN"),
dataColumn("Product Type"),
dataColumn("View Invoice"),
dataColumn("Add Signature"),
],
rows: List<DataRow>.generate(ctrl.getInvoiceData.length,
(index) {
final getInvoice = ctrl.getInvoiceData[index];
return DataRow(
cells: [
editableCell(index, "${getInvoice.invoiceId}"),
editableCell(index, getInvoice.freightbillCode),
editableCell(
index,
DateFormat("dd MMMM yyyy").format(
DateTime.parse('${getInvoice.createdOn}'))),
editableCell(
index, "${getInvoice.sapReferenceno ?? "-"}"),
editableCell(
index,
DateFormat("d MMMM yyyy").format(DateTime.parse(
'${getInvoice.shipmentCostDate}'))),
editableCell(
index, "${getInvoice.shipmentCost ?? "-"}"),
editableCell(index, "-"),
editableCell(index, "-"),
editableCell(index, "-", isLink: true),
editableCell(index, "-"),
editableCell(index, "-", isLink: true),
DataCell(
Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
borderRadius: BorderRadius.circular(4),
),
child: InkWell(
onTap: () { },
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.download,
size: 16, color: Colors.blue),
SizedBox(width: 4),
Text('Download',
style: TextStyle(
color: Colors.blue,
fontSize: 12)),
],
),
child: DataTable(
dataRowHeight: 40,
headingRowHeight: 40,
headingRowColor: WidgetStateProperty.all(AppColors.clrF2),
border: TableBorder(
horizontalInside: BorderSide(color: AppColors.clrGrey),
verticalInside: BorderSide(color: AppColors.clrGrey),
bottom: BorderSide(color: AppColors.clrGrey),
left: BorderSide(color: AppColors.clrGrey),
right: BorderSide(color: AppColors.clrGrey),
top: BorderSide(color: AppColors.clrGrey),
),
columns: [
dataColumn("Refrence No."),
//dataColumn(AppStrings.productName, onSort: (_, __) => ctrl.changeSort(AppStrings.productName.toLowerCase())),
dataColumn("Freight Bill No."),
//dataColumn(AppStrings.getInvoiceDate),
dataColumn("Freight Bill date"),
dataColumn("GST Amount"),
dataColumn("Status"),
dataColumn("Freight Bill Amount"),
dataColumn("CCN Amount"),
dataColumn("View CCN"),
dataColumn("Plant Code/Plant Desc."),
dataColumn("View Invoice"),
dataColumn("Add Signature"),
],
rows: List<DataRow>.generate(ctrl.getInvoiceData.length,
(index) {
final getInvoice = ctrl.getInvoiceData[index];
return DataRow(
cells: [
editableCell(index, "${getInvoice.sapReferenceno}"),
editableCell(index, getInvoice.freightbillCode),
editableCell(
index,
DateFormat("dd MMMM yyyy").format(
DateTime.parse('${getInvoice.createdOn}'))),
editableCell(
index, "-"),
editableCell(index, getInvoice.status.toUpperCase()),
editableCell(
index, (getInvoice.shipmentCost.toString() ?? "-")),
editableCell(index,"-"),
editableCell(index, "-"),
editableCell(index, "${getInvoice.plantCode} - ${getInvoice.plantDesc}",),
editableCell(index, "View Invoice",isLink: true),
DataCell(
Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
borderRadius: BorderRadius.circular(4),
),
child: InkWell(
onTap: () { },
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.download,
size: 16, color: Colors.blue),
SizedBox(width: 4),
Text('Download',
style: TextStyle(
color: Colors.blue,
fontSize: 12)),
],
),
),
),
SizedBox(width: 8),
Container(
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
borderRadius: BorderRadius.circular(4),
),
child: InkWell(
onTap: () => handleFileUpload(index),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.upload,
size: 16, color: Colors.blue),
SizedBox(width: 4),
Text('Upload',
style: TextStyle(
color: Colors.blue,
fontSize: 12)),
],
),
),
),
//###################### This Function is used to close or cut uploaded File in Local #######################
// if (uploadedFiles.containsKey(index))
// IconButton(
// icon: Icon(Icons.close, size: 16, color: Colors.red),
// onPressed: () {
// setState(() {
// uploadedFiles.remove(index);
// });
// },
// ),
//###########################################################################################################
],
),
),
SizedBox(width: 8),
Container(
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
borderRadius: BorderRadius.circular(4),
),
child: InkWell(
onTap: () => handleFileUpload(index),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.upload,
size: 16, color: Colors.blue),
SizedBox(width: 4),
Text('Upload',
style: TextStyle(
color: Colors.blue,
fontSize: 12)),
],
),
),
),
//###################### This Function is used to close or cut uploaded File in Local #######################
// if (uploadedFiles.containsKey(index))
// IconButton(
// icon: Icon(Icons.close, size: 16, color: Colors.red),
// onPressed: () {
// setState(() {
// uploadedFiles.remove(index);
// });
// },
// ),
//###########################################################################################################
],
),
),
],
);
}),
);
}),
),
),
),
),
),
),
),
// CustomPagination(
// currentPage: controller.currentPage.value,
// totalPages: controller.totalPages.value,
// onPageChanged: (int page) {
// controller.onPageChanged(page);
// },
// ),
],
// CustomPagination(
// currentPage: controller.currentPage.value,
// totalPages: controller.totalPages.value,
// onPageChanged: (int page) {
// controller.onPageChanged(page);
// },
// ),
],
),
);
}

View File

@ -3,8 +3,8 @@ import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:shayog/components/styles/textStyles.dart';
import 'package:shayog/feature/presentation/screens/transporter/view_model/transport_controller.dart';
import 'package:shayog/feature/presentation/widgets/custom_pagination.dart';
import 'package:sizer/sizer.dart';
import 'package:syncfusion_flutter_datepicker/datepicker.dart';
import 'package:vph_web_date_picker/vph_web_date_picker.dart';
import '../../../../../../../components/common/data_cell.dart';
import '../../../../../../../components/styles/app_colors.dart';
@ -16,22 +16,12 @@ import '../../../../widgets/text_view.dart';
import '../../widgets/common_card.dart';
import '../../widgets/freightbill_dialog.dart';
class PendingGeneration extends StatefulWidget {
class PendingGeneration extends StatelessWidget {
PendingGeneration({super.key});
@override
State<PendingGeneration> createState() => _PendingGenerationState();
}
class _PendingGenerationState extends State<PendingGeneration> {
final ScrollController horizontalScrollController = ScrollController();
final ScrollController verticalScrollController = ScrollController();
final controller = Get.put(TransportController());
final TextEditingController _dateController = TextEditingController();
DateTime? _startDate;
DateTime? _endDate;
@override
Widget build(BuildContext context) {
@ -171,14 +161,45 @@ class _PendingGenerationState extends State<PendingGeneration> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(text: "MRN Date Range"),
// SizedBox(height: 8),
// CustomDropdown<String>(
// borderClr: AppColors.clrGrey,
// items: controller.date,
// itemLabel: (item) => item,
// onSelected: (selected) {
// if (selected != null) {
// controller.selectPlant.value = selected;
// }
// },
// hintText: "Select MRN Date Range",
// ),
Container(
margin: EdgeInsets.only(top: 8),
height: 35,
child: TextFormField(
key: controller.fromTextFieldKey,
controller: _dateController,
controller: controller.fromController,
onTap: () async {
await _showDateRangePicker(context);
final pickedDate =
await showWebDatePicker(
width: 20.w,
context: controller
.fromTextFieldKey.currentContext!,
initialDate:
controller.fromSelectedDate,
firstDate: DateTime(2000),
lastDate: DateTime.now(),
);
if (pickedDate != null) {
controller.fromSelectedDate =
pickedDate;
String formattedDate = controller
.getFormattedDate(pickedDate);
controller.fromController.text =
formattedDate;
controller.dateCheck.value = true;
}
},
decoration: InputDecoration(
fillColor: AppColors.clrD9,
@ -236,29 +257,30 @@ class _PendingGenerationState extends State<PendingGeneration> {
),
),
SizedBox(width: 16),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(text: "From Location"),
SizedBox(height: 8),
CustomDropdown<dynamic>(
backClr: AppColors.clrD9,
borderClr: AppColors.clrGrey,
items: controller.fromLocation,
itemLabel: (item) => item,
onSelected: (selected) {
if (selected != null) {
controller.selectLocation.value =
selected;
}
},
hintText: "Select From Location",
),
],
),
),
// Expanded(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// TextView(text: "From Location"),
// SizedBox(height: 8),
// CustomDropdown<dynamic>(
// backClr: AppColors.clrD9,
// borderClr: AppColors.clrGrey,
// items: controller.fromLocation,
// itemLabel: (item) => item,
// onSelected: (selected) {
// if (selected != null) {
// controller.selectLocation.value =
// selected;
// }
// },
// hintText: "Select From Location",
// ),
// ],
// ),
// ),
Expanded(child: SizedBox.shrink()),
SizedBox(
width: 16,
),
@ -317,7 +339,7 @@ class _PendingGenerationState extends State<PendingGeneration> {
Obx(() {
if (controller.grnPendingLoader.value) {
return SizedBox(
height: MediaQuery.sizeOf(context).height,
height: MediaQuery.sizeOf(context).height * 0.6,
width: MediaQuery.sizeOf(context).width,
child: Center(
child: CircularProgressIndicator(
@ -328,14 +350,16 @@ class _PendingGenerationState extends State<PendingGeneration> {
if (controller.errorMessage.isNotEmpty) {
return SizedBox(
height: MediaQuery.sizeOf(context).height,
height: MediaQuery.sizeOf(context).height * 0.6,
width: MediaQuery.sizeOf(context).width,
child: Center(child: Text(controller.errorMessage.value)));
}
if (controller.grnPendingData.isEmpty) {
return SizedBox(
height: MediaQuery.sizeOf(context).height,
height: controller.isFilterVisiblePendingGeneration.value
? MediaQuery.sizeOf(context).height * 0.4
: MediaQuery.sizeOf(context).height * 0.6,
width: MediaQuery.sizeOf(context).width,
child: Center(
child: Text(
@ -347,218 +371,167 @@ class _PendingGenerationState extends State<PendingGeneration> {
SizedBox(
height: 20,
),
Scrollbar(
thumbVisibility: true,
controller: controller.verticalScrollController,
child: SingleChildScrollView(
Container(
margin: EdgeInsets.only(bottom: 16, top: 16),
height:
controller.isFilterVisiblePendingGeneration.value == true
? MediaQuery.of(context).size.height * 0.3
: MediaQuery.of(context).size.height * 0.64,
child: RawScrollbar(
thumbColor: AppColors.clrD9,
radius: Radius.circular(2),
trackVisibility: true,
thumbVisibility: true,
thickness: 14,
controller: controller.verticalScrollController,
child: Scrollbar(
thumbVisibility: true,
controller: controller.horizontalScrollController,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: SingleChildScrollView(
controller: controller.verticalScrollController,
child: RawScrollbar(
thumbColor: AppColors.clrD9,
radius: Radius.circular(2),
thickness: 14,
trackVisibility: true,
thumbVisibility: true,
controller: controller.horizontalScrollController,
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey.shade400,
width: 1.0,
),
),
child: DataTable(
dataRowHeight: 40,
headingRowHeight: 40,
headingRowColor:
WidgetStateProperty.all(AppColors.clrF2),
border: TableBorder(
horizontalInside:
BorderSide(color: AppColors.clrGrey),
verticalInside:
BorderSide(color: AppColors.clrGrey),
bottom: BorderSide(color: AppColors.clrGrey),
left: BorderSide(color: AppColors.clrGrey),
right: BorderSide(color: AppColors.clrGrey),
top: BorderSide(color: AppColors.clrGrey),
),
columns: [
DataColumn(
label: Transform.scale(
scale: 0.80,
child: Checkbox(
value: controller.selectAllField.value,
onChanged: (value) {
controller.selectAll(value ?? false);
},
activeColor: AppColors.primaryClr,
checkColor: Colors.white,
materialTapTargetSize:
MaterialTapTargetSize.shrinkWrap,
),
),
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
controller: controller.horizontalScrollController,
child: Container(
margin: EdgeInsets.only(bottom: 24, right: 24),
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey.shade400,
width: 1.0,
),
// dataColumn(AppStrings.srNo),
dataColumn(AppStrings.viewGrnDetails),
dataColumn(AppStrings.plantName),
dataColumn(AppStrings.productName),
dataColumn(AppStrings.date),
dataColumn(AppStrings.fromLocation),
dataColumn(AppStrings.vehicleNo),
dataColumn(AppStrings.transporterLrNo),
dataColumn(AppStrings.transporterLrNoDate),
dataColumn(AppStrings.dispQty),
dataColumn(AppStrings.netQty),
dataColumn(AppStrings.billingQty),
dataColumn(AppStrings.uom),
dataColumn(AppStrings.freightRate),
dataColumn(AppStrings.freightAmount),
dataColumn(AppStrings.remark),
],
rows: List<DataRow>.generate(
controller.grnPendingData.length, (index) {
final stoppage = controller.grnPendingData[index];
print(
'stoppage.remark?.toString()${stoppage.remark?.toString()}');
return DataRow(
selected: stoppage.isSelected,
cells: [
DataCell(
Transform.scale(
scale: 0.80,
child: Checkbox(
value: stoppage.isSelected,
onChanged: (value) {
controller.toggleSelection(
index, value ?? false);
},
activeColor: AppColors.primaryClr,
checkColor: Colors.white,
materialTapTargetSize:
MaterialTapTargetSize.shrinkWrap,
),
),
),
// editableCell(index, "0${index + 1}"),
editableCell(index, stoppage.grnNo ?? ""),
editableCell(index, stoppage.plantCode ?? ""),
editableCell(
index, stoppage.materialCode ?? ""),
),
child: DataTable(
dataRowHeight: 40,
headingRowHeight: 40,
headingRowColor:
WidgetStateProperty.all(AppColors.clrF2),
border: TableBorder(
horizontalInside:
BorderSide(color: AppColors.clrGrey),
verticalInside:
BorderSide(color: AppColors.clrGrey),
bottom: BorderSide(color: AppColors.clrGrey),
left: BorderSide(color: AppColors.clrGrey),
right: BorderSide(color: AppColors.clrGrey),
top: BorderSide(color: AppColors.clrGrey),
),
columns: [
// DataColumn(
// label: Transform.scale(
// scale: 0.80,
// child: Checkbox(
// value: controller.selectAllField.value,
// onChanged: (value) {
// controller.selectAll(value ?? false);
// },
// activeColor: AppColors.primaryClr,
// checkColor: Colors.white,
// materialTapTargetSize:
// MaterialTapTargetSize.shrinkWrap,
// ),
// ),
// ),
// dataColumn(AppStrings.srNo),
dataColumn(AppStrings.viewGrnDetails),
dataColumn(AppStrings.plantName),
dataColumn(AppStrings.productName),
dataColumn(AppStrings.date),
dataColumn(AppStrings.fromLocation),
dataColumn(AppStrings.vehicleNo),
dataColumn(AppStrings.transporterLrNo),
dataColumn(AppStrings.transporterLrNoDate),
dataColumn(AppStrings.dispQty),
dataColumn(AppStrings.netQty),
dataColumn(AppStrings.billingQty),
dataColumn(AppStrings.uom),
dataColumn(AppStrings.freightRate),
dataColumn(AppStrings.freightAmount),
dataColumn(AppStrings.remark),
],
rows: List<DataRow>.generate(
controller.grnPendingData.length, (index) {
final stoppage = controller.grnPendingData[index];
print(
'stoppage.remark?.toString()${stoppage.remark?.toString()}');
return DataRow(
selected: stoppage.isSelected,
cells: [
// DataCell(
// Transform.scale(
// scale: 0.80,
// child: Checkbox(
// value: stoppage.isSelected,
// onChanged: (value) {
// controller.toggleSelection(
// index, value ?? false);
// },
// activeColor: AppColors.primaryClr,
// checkColor: Colors.white,
// materialTapTargetSize:
// MaterialTapTargetSize.shrinkWrap,
// ),
// ),
// ),
// editableCell(index, "0${index + 1}"),
editableCell(index, stoppage.grnNo ?? ""),
editableCell(index, stoppage.plantCode ?? ""),
editableCell(
index, stoppage.materialCode ?? ""),
editableCell(
index,
DateFormat('yyyy-MM-dd').format(
stoppage.grnDate ?? DateTime.now())),
editableCell(
index, stoppage.fromLocation ?? ""),
editableCell(index, stoppage.vehicleNo ?? ""),
editableCell(index, stoppage.lrNo ?? ""),
editableCell(
index,
DateFormat('yyyy-MM-dd').format(
stoppage.lrDate ?? DateTime.now())),
editableCell(
index, stoppage.dispQty?.toString() ?? ""),
editableCell(
index, stoppage.netQty?.toString() ?? ""),
editableCell(index,
stoppage.billingQty?.toString() ?? ""),
editableCell(index,
stoppage.codeValue?.toString() ?? ""),
editableCell(index,
stoppage.freightRate?.toString() ?? ""),
editableCell(index,
stoppage.shipmentCost?.toString() ?? ""),
editableCell(
index,
stoppage.remark?.toString() ??
"Shipment Quantity Mismatch"),
],
);
}),
editableCell(
index,
DateFormat('yyyy-MM-dd').format(
stoppage.grnDate ?? DateTime.now())),
editableCell(
index, stoppage.fromLocation ?? ""),
editableCell(index, stoppage.vehicleNo ?? ""),
editableCell(index, stoppage.lrNo ?? ""),
editableCell(
index,
DateFormat('yyyy-MM-dd').format(
stoppage.lrDate ?? DateTime.now())),
editableCell(index,
stoppage.dispQty?.toString() ?? ""),
editableCell(
index, stoppage.netQty?.toString() ?? ""),
editableCell(index,
stoppage.billingQty?.toString() ?? ""),
editableCell(index,
stoppage.codeValue?.toString() ?? ""),
editableCell(index,
stoppage.freightRate?.toString() ?? ""),
editableCell(index,
stoppage.shipmentCost?.toString() ?? ""),
editableCell(
index,
stoppage.remark ??
"Shipment Quantity Mismatch"),
],
);
}),
),
),
),
),
),
),
),
],
);
}),
// CustomPagination(
// currentPage: controller.currentPage.value,
// totalPages: controller.totalPages.value,
// onPageChanged: (int page) {
// // controller.onPageChanged(page);
// },
// ),
],
);
}
Future<void> _showDateRangePicker(BuildContext context) async {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return SingleChildScrollView(
child: Container(
padding: EdgeInsets.all(16),
height: 500, // Adjust the height as needed
child: Column(
children: [
// Display two date pickers horizontally
Row(
children: [
// First Date Picker
Expanded(
child: SfDateRangePicker(
view: DateRangePickerView.month,
selectionMode: DateRangePickerSelectionMode.range,
onSelectionChanged: (args) {
// Handle the date selection from the first calendar
if (args.value is PickerDateRange) {
setState(() {
_startDate = args.value.startDate;
_endDate = args.value.endDate;
});
}
},
),
),
SizedBox(width: 16),
// Second Date Picker
Expanded(
child: SfDateRangePicker(
view: DateRangePickerView.month,
selectionMode: DateRangePickerSelectionMode.range,
onSelectionChanged: (args) {
// Handle the date selection from the first calendar
if (args.value is PickerDateRange) {
setState(() {
_startDate = args.value.startDate;
_endDate = args.value.endDate;
});
}
},
),
),
],
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () {
if (_startDate != null && _endDate != null) {
String formattedRange =
"${_formatDate(_startDate!)} - ${_formatDate(_endDate!)}";
_dateController.text = formattedRange;
}
// You can extract the selected date range here
// Close the bottom sheet after selection
Navigator.pop(context);
},
child: Text('Done'),
),
],
),
),
);
},
);
}
String _formatDate(DateTime date) {
// Format the date as per your requirement
return "${date.month.toString().padLeft(2, '0')}/${date.day.toString().padLeft(2, '0')}/${date.year}";
}
}

View File

@ -1,6 +1,10 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:shayog/components/common/custom_drop_down.dart';
import 'package:shayog/components/common/data_cell.dart';
import 'package:shayog/components/styles/textStyles.dart';
import 'package:shayog/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart';
import 'package:shayog/feature/presentation/screens/transporter/view/sub_views/report_screen.dart';
@ -16,6 +20,9 @@ import 'sub_views/generate_fright_bill.dart';
import 'sub_views/pending_generation.dart';
import 'sub_views/view_freight_bill.dart';
import 'package:file_picker/file_picker.dart';
import 'package:path_provider/path_provider.dart';
class TransportView extends StatefulWidget {
const TransportView({super.key});
@ -24,12 +31,16 @@ class TransportView extends StatefulWidget {
}
class _TransportViewState extends State<TransportView> {
final ctrl = Get.put(TransportController());
// final ctrl = Get.put(TransportController());
final ctrl = Get.put(TransportController(), permanent: true);
final ScrollController horizontalScrollController = ScrollController();
final ScrollController verticalScrollController = ScrollController();
@override
Widget build(BuildContext context) {
return ListView(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
@ -47,6 +58,7 @@ class _TransportViewState extends State<TransportView> {
() => InkWell(
onTap: () {
ctrl.selectedIndex.value = index;
ctrl.selectedUser.value = 0;
},
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
@ -104,109 +116,330 @@ class _TransportViewState extends State<TransportView> {
);
}
_dashboardView() {
_tableView() {
return Column(
children: [
Container(
color: Colors.white,
padding: EdgeInsets.only(bottom: 16),
margin: EdgeInsets.all(16),
child: Column(
children: [
Container(
height: 50,
color: AppColors.primaryClr,
child: Row(
children: [
ListView.separated(
shrinkWrap: true,
padding: EdgeInsets.symmetric(horizontal: 16),
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return Obx(
() => InkWell(
onTap: () {
ctrl.selectedUser.value = index;
},
child: Container(
margin: EdgeInsets.only(bottom: 10, top: 10),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color:
ctrl.selectedUser.value == index
? Colors.white
: AppColors.primaryClr,
width: 3))),
child: Center(
child: TextView(
text: ctrl.userTabs[index].title ?? "",
style: 12.txtBoldWhite,
Scrollbar(
thumbVisibility: true,
controller: verticalScrollController,
child: SingleChildScrollView(
controller: verticalScrollController,
child: Scrollbar(
thumbVisibility: true,
controller: horizontalScrollController,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
controller: horizontalScrollController,
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey.shade400,
width: 1.0,
),
),
child: DataTable(
dataRowHeight: 40,
headingRowHeight: 40,
headingRowColor: WidgetStateProperty.all(AppColors.clrF2),
border: TableBorder(
horizontalInside: BorderSide(color: AppColors.clrGrey),
verticalInside: BorderSide(color: AppColors.clrGrey),
bottom: BorderSide(color: AppColors.clrGrey),
left: BorderSide(color: AppColors.clrGrey),
right: BorderSide(color: AppColors.clrGrey),
top: BorderSide(color: AppColors.clrGrey),
),
columns: [
dataColumn("Refrence No."),
//dataColumn(AppStrings.productName, onSort: (_, __) => ctrl.changeSort(AppStrings.productName.toLowerCase())),
dataColumn("Freight Bill No."),
//dataColumn(AppStrings.getInvoiceDate),
dataColumn("Freight Bill date"),
dataColumn("Invoice No."),
dataColumn("Invoice Date"),
dataColumn("Invoice Amount"),
dataColumn("CCN Amount"),
dataColumn("View CCN"),
dataColumn("Product Type"),
dataColumn("View Invoice"),
dataColumn("Add Signature"),
],
rows: List<DataRow>.generate(ctrl.getInvoiceData.length,
(index) {
final getInvoice = ctrl.getInvoiceData[index];
return DataRow(
cells: [
editableCell(index, "${getInvoice.invoiceId}"),
editableCell(index, getInvoice.freightbillCode),
editableCell(
index,
DateFormat("dd MMMM yyyy").format(
DateTime.parse('${getInvoice.createdOn}'))),
editableCell(
index, "${getInvoice.sapReferenceno ?? "-"}"),
editableCell(
index,
DateFormat("d MMMM yyyy").format(DateTime.parse(
'${getInvoice.shipmentCostDate}'))),
editableCell(
index, "${getInvoice.shipmentCost ?? "-"}"),
editableCell(index, "${getInvoice.statusId ?? "-"}"),
editableCell(index, getInvoice.materialCode ?? "-"),
editableCell(index, getInvoice.materialDescription,
isLink: true),
editableCell(index, getInvoice.status ?? "-"),
editableCell(index, getInvoice.plantCode ?? "-",
isLink: true),
DataCell(
Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
borderRadius: BorderRadius.circular(4),
),
child: InkWell(
onTap: () {},
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.download,
size: 16, color: Colors.blue),
SizedBox(width: 4),
Text('Download',
style: TextStyle(
color: Colors.blue,
fontSize: 12)),
],
),
),
),
),
SizedBox(width: 8),
Container(
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
borderRadius: BorderRadius.circular(4),
),
child: InkWell(
onTap: () => handleFileUpload(index),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.upload,
size: 16, color: Colors.blue),
SizedBox(width: 4),
Text('Upload',
style: TextStyle(
color: Colors.blue,
fontSize: 12)),
],
),
),
),
//###################### This Function is used to close or cut uploaded File in Local #######################
// if (uploadedFiles.containsKey(index))
// IconButton(
// icon: Icon(Icons.close, size: 16, color: Colors.red),
// onPressed: () {
// setState(() {
// uploadedFiles.remove(index);
// });
// },
// ),
//###########################################################################################################
],
),
),
);
},
separatorBuilder: (context, index) {
return SizedBox(width: 16);
},
itemCount: 3,
),
Spacer(),
InkWell(
child: Image.asset(AppImages.refresh,
height: 16, width: 16)),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
AppStrings.refresh,
style: 12.txtBoldWhite,
),
),
InkWell(
onTap: () {
if(ctrl.selectedUser.value == 0){
ctrl.toggleFilter();
}
else if(ctrl.selectedUser.value == 1){
ctrl.toggleViewFreight();
}
else if(ctrl.selectedUser.value == 2){
ctrl.togglePending();
}
},
child:
Image.asset(AppImages.filter, height: 16, width: 16),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextView(
text: AppStrings.filter,
style: 12.txtBoldWhite,
),
),
],
],
);
}),
),
),
),
Obx(() {
switch (ctrl.selectedUser.value) {
case 0:
return GenerateFrightBill();
case 1:
return ViewFreightBill();
case 2:
return PendingGeneration();
default :
return SizedBox.shrink();
}
}),
],
),
),
)
),
// CustomPagination(
// currentPage: controller.currentPage.value,
// totalPages: controller.totalPages.value,
// onPageChanged: (int page) {
// controller.onPageChanged(page);
// },
// ),
],
);
}
Future<void> handleFileUpload(int index) async {
try {
FilePickerResult? result = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: ['pdf', 'doc', 'docx', 'xlsx', 'xls'],
allowMultiple: false,
);
if (result != null) {
PlatformFile file = result.files.first;
// Validate file size (optional)
if (file.size > 10 * 1024 * 1024) {
// 10MB limit
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('File size must be less than 10MB'),
backgroundColor: Colors.red,
),
);
return;
}
final appDir = await getApplicationDocumentsDirectory();
final String filePath = '${appDir.path}/${file.name}';
File(file.path!).copy(filePath);
setState(() {
//uploadedFiles[index] = file.name;
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('File uploaded: ${file.name}'),
backgroundColor: Colors.green,
),
);
}
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Error uploading file: ${e.toString()}'),
backgroundColor: Colors.red,
),
);
}
}
_dashboardView() {
return RawScrollbar(
child: Column(
children: [
Container(
color: Colors.white,
padding: EdgeInsets.only(bottom: 16),
margin: EdgeInsets.all(16),
child: Column(
children: [
Container(
height: 50,
color: AppColors.primaryClr,
child: Row(
children: [
ListView.separated(
shrinkWrap: true,
padding: EdgeInsets.symmetric(horizontal: 16),
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return Obx(
() => InkWell(
onTap: () {
ctrl.selectedUser.value = index;
ctrl.refreshApis();
ctrl.isFilterVisibleViewFreight.value = false;
ctrl.isFilterVisiblePendingGeneration.value =
false;
ctrl.isFilterVisibleGenerateFreight.value =
false;
},
child: Container(
margin: EdgeInsets.only(bottom: 10, top: 10),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color:
ctrl.selectedUser.value == index
? Colors.white
: AppColors.primaryClr,
width: 3))),
child: Center(
child: TextView(
text: ctrl.userTabs[index].title ?? "",
style: 12.txtBoldWhite,
),
),
),
),
);
},
separatorBuilder: (context, index) {
return SizedBox(width: 16);
},
itemCount: 3,
),
Spacer(),
GestureDetector(
onTap: () {
ctrl.refreshApis();
},
child: Row(
children: [
InkWell(
child: Image.asset(AppImages.refresh,
height: 16, width: 16),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
AppStrings.refresh,
style: 12.txtBoldWhite,
),
),
],
),
),
GestureDetector(
onTap: () {
if (ctrl.selectedUser.value == 0) {
ctrl.toggleFilter();
} else if (ctrl.selectedUser.value == 1) {
ctrl.toggleViewFreight();
} else if (ctrl.selectedUser.value == 2) {
ctrl.togglePending();
}
},
child: Row(
children: [
Image.asset(AppImages.filter,
height: 16, width: 16),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextView(
text: AppStrings.filter,
style: 12.txtBoldWhite,
),
),
],
))
],
),
),
Obx(() {
switch (ctrl.selectedUser.value) {
case 0:
return GenerateFrightBill();
case 1:
return ViewFreightBill();
case 2:
return PendingGeneration();
default:
return SizedBox.shrink();
}
}),
],
),
)
],
),
);
}
}

View File

@ -1,15 +1,14 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:shayog/components/styles/app_images.dart';
import 'package:shayog/feature/presentation/screens/transporter/model/sub_freight_view_dialog_model.dart';
import 'package:shayog/services/network/get_requests.dart';
import '../../../../../../components/common/common_model.dart';
import '../../../../../../components/styles/app_strings.dart';
import '../../../../../../services/model/generate_freight_model.dart';
import '../../../../../../services/network/post_request.dart';
import '../model/freightbill_res_model.dart';
import '../model/get_invoice_response.dart';
import '../model/grn_panding_res_model.dart';
import '../model/view_freight_bill_res_model.dart';
@ -18,12 +17,17 @@ class TransportController extends GetxController {
final ScrollController verticalScrollController = ScrollController();
var selectedIndex = 0.obs;
var selectedUser = 0.obs;
var getInvoiceData = <GetInvoiceContent>[].obs;
var invoiceViewLoader = false.obs;
// for generate freight
RxString selectPlant = ''.obs;
var selectProduct = ''.obs;
var selectLocation = ''.obs;
var selectTransactionType = ''.obs;
var dialogCode = ''.obs;
var dialogDate = DateTime.now().obs;
RxList<Grn> grnListDialog = <Grn>[].obs;
// for generate freight bill
RxString selectPlantFreight = ''.obs;
@ -38,20 +42,20 @@ class TransportController extends GetxController {
var selectTransactionTypePending = ''.obs;
// for view FreightBill
RxString selectPlantViewFreight = ''.obs;
var selectProductViewFreight = ''.obs;
var selectLocationViewFreight = ''.obs;
var selectTransactionTypeViewFreight = ''.obs;
var selectedItem = false.obs;
var grnDetails = <Content>[].obs;
var product = <Prodect>[].obs;
var plant = <Plant>[].obs;
var freightBill = [].obs;
var freightBill = <String>[].obs;
var selectFreightBillValidate = ''.obs;
var fromLocation = [].obs;
var grnList = [].obs;
RxBool showE = false.obs;
RxBool selectAllField = false.obs;
RxString freightBillCode = "".obs;
void toggleSelection(int index, bool? value) {
grnDetails[index].isSelected = value!;
@ -91,6 +95,11 @@ class TransportController extends GetxController {
}
}
void navigateToInvoiceTab() {
selectedUser.value = 1;
refreshApis();
}
void selectAll(bool value) {
for (var item in grnDetails) {
item.isSelected = value;
@ -125,8 +134,8 @@ class TransportController extends GetxController {
void validateFieldsViewFreightBill() {
showPlantErrorViewFreight.value = selectPlantViewFreight.value.isEmpty;
// showTransactionErrorViewFreight.value =
// selectTransactionTypeViewFreight.value.isEmpty;
showTransactionErrorViewFreight.value =
selectFreightBillValidate.value.isEmpty;
showProductErrorViewFreight.value = selectProductViewFreight.value.isEmpty;
}
@ -139,12 +148,42 @@ class TransportController extends GetxController {
@override
void onInit() {
refreshApis();
getInvoiceView();
super.onInit();
}
refreshApis() {
getFreightBills();
viewFreightView();
grnPending();
getSubFreightBillsView();
postData();
}
super.onInit();
getInvoiceView() async {
try {
invoiceViewLoader.value = true;
Map<String, String> requestBody = {
"invoice_id": "",
"freightBillNo": "",
"invFromDate": "",
"invToDate": "",
"freightFromDate": "",
"freightToDate": ""
};
var response = await PostRequests.getInvoice(requestBody);
if (response != null) {
List<GetInvoiceContent> flattenedContent =
response.content.expand((list) => list).toList();
getInvoiceData.assignAll(flattenedContent);
print('res from invoice ${response.toString()}');
}
} finally {
invoiceViewLoader.value = false;
}
}
var transactionType = ['STO', 'INBOUND'];
@ -179,7 +218,6 @@ class TransportController extends GetxController {
postData() async {
try {
isLoading.value = true;
Map<String, String> requestBody = {
"plant": "",
"productNane": "",
@ -188,7 +226,6 @@ class TransportController extends GetxController {
"grnFromDate": "",
"grnToDate": ""
};
var response = await PostRequests.addFreightBill(requestBody);
if (response != null) {
List<Content> flattenedContent =
@ -244,17 +281,6 @@ class TransportController extends GetxController {
}
}
// void handleFilterSubmit() {
// validateFieldsGenerateFreight();
//
// if (showPlantError.value ||
// showProductError.value ||
// showTransactionError.value) {
// print('show errr');
// } else {
// postData();
// }
// }
void handleFilterSubmitGenerateFreight() {
validateFieldsGenerateFreight();
if (selectPlantFreight.value.isEmpty ||
@ -299,7 +325,6 @@ class TransportController extends GetxController {
showPlantError.value = false;
showProductError.value = false;
showTransactionError.value = false;
postData();
}
void clearFiltersPendingGeneration() {
@ -310,18 +335,16 @@ class TransportController extends GetxController {
showPlantErrorPending.value = false;
showProductErrorPending.value = false;
showTransactionErrorPending.value = false;
postData();
}
void clearFiltersViewFreight() {
selectPlantViewFreight.value = '';
selectProductViewFreight.value = '';
// selectTransactionTypeViewFreight.value = '';
selectFreightBillValidate.value = '';
fromController.clear();
showPlantErrorViewFreight.value = false;
showProductErrorViewFreight.value = false;
showTransactionErrorViewFreight.value = false;
postData();
}
getFreightBills() async {
@ -330,7 +353,6 @@ class TransportController extends GetxController {
var response = await GetRequests.getFreightBill();
if (response != null) {
print("gtyfhg");
plant.assignAll(response.plant ?? []);
product.assignAll(response.prodect ?? []);
freightBill.assignAll(response.freightBill ?? []);
@ -341,6 +363,27 @@ class TransportController extends GetxController {
}
}
getSubFreightBillsView() async {
try {
isLoading.value = true;
var response =
await GetRequests.subViewFreightDialog(freightBillCode.value);
if (response != null) {
dialogCode.value = response.freightBillCode ?? "";
dialogDate.value = response.freightBillDate ?? DateTime.now();
grnListDialog.assignAll(response.grn ?? []);
print(
'Response received with ${dialogCode.value} and ${dialogDate.value} ${grnListDialog.length ?? 0} GRN items');
} else {
print('No response received from subViewFreightDialog');
}
} catch (e) {
print('Error in getSubFreightBillsView: $e');
} finally {
isLoading.value = false;
}
}
final fromTextFieldKey = GlobalKey();
TextEditingController fromController = TextEditingController();
DateTime fromSelectedDate = DateTime.now(); // Initialize with a default value
@ -396,12 +439,7 @@ class TransportController extends GetxController {
"status_id": grn.statusId
})
.toList();
// Only send the selected data in the request body
var response = await PostRequests.freightBill(selectedGrns);
print("Selected GRNs>>>$selectedGrns");
if (response != null) {
freightBillNo.value = response.freightBillNo ?? "";
grnList.assignAll(response.grn ?? []);
@ -414,16 +452,17 @@ class TransportController extends GetxController {
////////////////////////////////////////// PRIYA ///////////////////////////////////////////////
var freightBillData = <FreightBill>[].obs;
var totalElements = 0.obs;
var totalElementsViewFreight = 0.obs;
var pageSize = 2.obs;
var sortField = "grn_date".obs;
var sortDirection = "desc".obs;
RxInt currentPage = 1.obs;
RxInt totalPages = 3.obs;
RxInt currentPageViewFreight = 1.obs;
RxInt totalPagesViewFreight = 3.obs;
final int limit = 10;
viewFreightView() async {
viewFreightView({int page = 0}) async {
try {
freightViewLoader.value = true;
@ -437,39 +476,22 @@ class TransportController extends GetxController {
"grnToDate": "",
};
var response = await PostRequests.viewFreightBill(requestBody);
var response = await PostRequests.viewFreightBill(
page: page, size: 4, requestBody: requestBody);
if (response != null) {
List<FreightBill> flattenedContent =
response.content!.expand((list) => list).toList();
freightBillData.assignAll(flattenedContent);
print("response from${freightBillData[0].freightbillCode.runtimeType} view freight bill ${freightBillData[0].plantCode.runtimeType} and ${freightBillData[0].materialCode.runtimeType} and}");
totalPages.value = response.totalPages ?? 0;
totalElements.value = response.totalElements ?? 0;
totalPagesViewFreight.value = response.totalPages ?? 0;
totalElementsViewFreight.value = response.totalElements ?? 0;
currentPageViewFreight.value = page;
}
} finally {
freightViewLoader.value = false;
}
}
void nextPage() {
if (currentPage.value < totalPages.value) {
currentPage.value++;
viewFreightView(); // Fetch data for the next page
}
}
void previousPage() {
if (currentPage.value > 1) {
currentPage.value--;
viewFreightView(); // Fetch data for the previous page
}
}
void onPageChanged(int page) {
currentPage.value = page;
viewFreightView(); // Fetch data for the selected page
}
void changeSort(String field) {
if (field == sortField.value) {
sortDirection.value = sortDirection.value == "asc" ? "desc" : "asc";
@ -477,13 +499,11 @@ class TransportController extends GetxController {
sortField.value = field;
sortDirection.value = "desc";
}
// viewFreightView(page: 0);
}
var grnPendingData = <GrnPending>[].obs;
grnPending() async {
print('get pending');
try {
grnPendingLoader.value = true;
@ -511,196 +531,56 @@ class TransportController extends GetxController {
}
}
// void displayFilteredDataFromViewFreight() async {
// try {
// isLoading.value = true;
// Map<String, String> requestBody = {
// "plant": selectPlantViewFreight.value,
// "productNane": selectProductViewFreight.value,
// "freightBillNo": "",
// "transactionType": "",
// "fromLocation": "",
// "grnFromDate": "",
// "grnToDate": "",
// };
// print('submit call 444');
// print('Request Body: ${jsonEncode(requestBody)}');
//
// print(
// "pending Data 122 ${selectPlantViewFreight.value} and ${selectProductViewFreight.value}freightBillData: }");
//
// var response = await PostRequests.viewFreightBill(requestBody);
//
// if (response != null) {
// List<FreightBill> flattenedContent =
// response.content!.expand((list) => list).toList();
// print(
// "pending Data 1 ${selectPlantViewFreight.value} and ${selectProductViewFreight.value}freightBillData: and ${flattenedContent.length}");
//
// List<FreightBill> filteredData = flattenedContent.where((item) {
// return (selectPlantViewFreight.value.isEmpty ||
// item.plantCode == selectPlantViewFreight.value) &&
// (selectProductViewFreight.value.isEmpty ||
// item.materialCode == selectProductViewFreight.value
// // &&
// // (selectTransactionTypeViewFreight.value.isEmpty ||
// // item.codeValue ==
// // selectTransactionTypeViewFreight.value.toUpperCase()
// );
// }).toList();
//
// print(
// "pending Data ${selectPlantViewFreight.value} and ${selectProductViewFreight.value}freightBillData: ${filteredData.length} and ${flattenedContent.length}");
//
// freightBillData.assignAll(filteredData);
//
// print(
// "✅ pending Data:freightBillData ${filteredData.length} items displayed pending.");
// } else {
// print("❌ No response from API.");
// }
// } finally {
// isLoading.value = false;
// }
// }
// void displayFilteredDataFromViewFreight() async {
// try {
// isLoading.value = true;
// Map<String, String> requestBody = {
//
// "plant":selectPlantViewFreight.value.toString(),
// "productNane": selectProductViewFreight.value.toString(),
// "freightBillNo": "",
// "transactionType": "",
// "fromLocation": "",
// "grnFromDate": "",
// "grnToDate": ""
// };
//
// print('Request Body: ${jsonEncode(requestBody)}');
//
// var response = await PostRequests.viewFreightBill(requestBody);
//
//
//
// List<FreightBill> flattenedContent = response!.content!.expand((list) => list).toList();
// print("Flattened content length: ${flattenedContent.length}");
//
// if (flattenedContent.isEmpty) {
// print("No matching records found");
//
// return;
// }
//
// // List<FreightBill> filteredData = flattenedContent.where((item) {
// // bool plantMatch = selectPlantViewFreight.value.isEmpty ||
// // item.plantCode?.trim() == selectPlantViewFreight.value.trim();
// // bool productMatch = selectProductViewFreight.value.isEmpty ||
// // item.materialCode?.trim() == selectProductViewFreight.value.trim();
// //
// // return plantMatch && productMatch;
// // }).toList();
// List<FreightBill> filteredData = flattenedContent.where((item) {
// // Print raw item data first
// print("Checking item: ${jsonEncode(item.toJson())}");
//
// // Print values being compared
// print("Comparing: Plant '${item.plantCode}' with '${selectPlantViewFreight.value}'");
// print("Comparing: Product '${item.materialCode}' with '${selectProductViewFreight.value}'");
//
// bool plantMatch = selectPlantViewFreight.value.isEmpty ||
// item.plantCode?.trim() == selectPlantViewFreight.value.trim();
// print("Plant match result: $plantMatch");
//
// bool productMatch = selectProductViewFreight.value.isEmpty ||
// item.materialCode?.trim() == selectProductViewFreight.value.trim();
// print("Product match result: $productMatch");
//
// final result = plantMatch && productMatch;
// print("Final match result: $result");
// print("------------------------");
//
// return result;
// }).toList();
//
// // Print final results
// print("Total items after filtering: ${filteredData.length}");
// if (filteredData.isNotEmpty) {
// print("First matched item: ${jsonEncode(filteredData.first.toJson())}");
// }
// freightBillData.assignAll(filteredData);
// print("Filtered Data: ${filteredData.length} items");
//
// } catch (e) {
// print("Error in displayFilteredDataFromViewFreight: $e");
//
// } finally {
// isLoading.value = false;
// }
// }
void displayFilteredDataFromViewFreight() async {
void displayFilteredDataFromViewFreight({int page = 0, int size = 4}) async {
try {
freightViewLoader.value = true;
Map<String, String> requestBody = {
"plant": selectPlantViewFreight.value,
"productNane": selectProductViewFreight.value,
"freightBillNo": "",
"freightBillNo": selectFreightBillValidate.value,
"transactionType": "",
"fromLocation": "",
"grnFromDate": "",
"grnToDate": "",
};
// Debug log for request
print("Filter request with Plant: ${selectPlantViewFreight.value}, Product: ${selectProductViewFreight.value}");
print("🔎 Filter Request - Page: $page, Size: $size, Plant: ${selectPlantViewFreight.value}, "
"Product: ${selectProductViewFreight.value}, Freight Bill: ${selectFreightBillValidate.value}");
var response = await PostRequests.viewFreightBill(requestBody);
if (response != null) {
var response = await PostRequests.viewFreightBill(
page: page, size: size, requestBody: requestBody); // Pass pagination
if (response != null && response.content != null) {
List<FreightBill> flattenedContent =
response.content!.expand((list) => list).toList();
print("Total records before filtering: ${flattenedContent.length}");
print("📌 Total records received: ${flattenedContent.length}");
// If first item exists, log its types for debugging
if (flattenedContent.isNotEmpty) {
print("Sample data types - Plant: ${flattenedContent[0].plantCode.runtimeType}, "
"Material: ${flattenedContent[0].materialCode.runtimeType}");
if (page == 0) {
freightBillData.assignAll(flattenedContent); // First page: Replace data
} else {
freightBillData.addAll(flattenedContent); // Next pages: Append data
}
List<FreightBill> filteredData = flattenedContent.where((item) {
bool plantMatch = selectPlantViewFreight.value.isEmpty ||
item.plantCode == selectPlantViewFreight.value;
bool productMatch = selectProductViewFreight.value.isEmpty ||
item.materialCode == selectProductViewFreight.value;
// Update pagination details
totalPagesViewFreight.value = response.totalPages ?? 0;
totalElementsViewFreight.value = response.totalElements ?? 0;
currentPageViewFreight.value = page;
// Debug log for matching
print("Checking - Plant: ${item.plantCode} matches: $plantMatch, "
"Product: ${item.materialCode} matches: $productMatch");
return plantMatch && productMatch;
}).toList();
print("Filtered records count: ${filteredData.length}");
freightBillData.assignAll(filteredData);
// Update pagination if available
totalPages.value = response.totalPages ?? 0;
totalElements.value = response.totalElements ?? 0;
print("✅ Freight bill data filtered: ${filteredData.length} items displayed");
print("✅ Freight bill data filtered & paginated successfully");
} else {
print("❌ No response from API.");
freightBillData.clear();
print("❌ No response received from API");
if (page == 0) freightBillData.clear();
}
} catch (e) {
print("❌ Error in displayFilteredDataFromViewFreight: $e");
freightBillData.clear();
if (page == 0) freightBillData.clear();
} finally {
freightViewLoader.value = false;
print('data');
}
}
void displayFilteredDataFromPending() async {
try {
isLoading.value = true;

View File

@ -6,42 +6,38 @@ import '../../../../../../components/common/data_cell.dart';
import '../../../../../../components/styles/app_colors.dart';
import '../../../../../../components/styles/app_strings.dart';
import '../view_model/transport_controller.dart';
class CommonDialog{
static showDialog({
required String message,
required VoidCallback onclick,
}) {
Get.dialog(
Dialog(
backgroundColor: Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
child: DialogContent(onClick: onclick,
message: message,
),
),
barrierDismissible: true
);
}
class CommonDialog {
static showDialog({
required String message,
required VoidCallback onclick,
}) {
Get.dialog(
Dialog(
backgroundColor: Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
child: DialogContent(
onClick: onclick,
message: message,
),
),
barrierDismissible: true);
}
}
class DialogContent extends StatelessWidget {
DialogContent({super.key,this.message,required this.onClick});
String? message;
VoidCallback onClick;
DialogContent({super.key, this.message, required this.onClick});
String? message;
VoidCallback onClick;
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(16),
width: 120,
child: Column(
mainAxisSize: MainAxisSize.min
,
mainAxisSize: MainAxisSize.min,
children: [
Text(
message ?? "Please Select GRN Details",
@ -61,25 +57,27 @@ String? message;
// clickAction: () {
// Get.back();
// },
text:"OK",
text: "OK",
style: TextStyle(
fontSize: 14,
color:AppColors.primaryClr,
fontWeight: FontWeight.bold),)
color: AppColors.primaryClr,
fontWeight: FontWeight.bold),
)
],
),
);
}
}
void showPopup({ required BuildContext context, String? message,required VoidCallback onClick}) {
void showPopup(
{required BuildContext context,
String? message,
required VoidCallback onClick}) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
backgroundColor: Colors.white,
backgroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8), // Border radius here
),
@ -88,10 +86,7 @@ void showPopup({ required BuildContext context, String? message,required VoidCal
padding: EdgeInsets.all(16),
width: 120,
child: Column(
mainAxisSize: MainAxisSize.min
,
mainAxisSize: MainAxisSize.min,
children: [
Text(
message ?? "Please Select GRN Details",
@ -111,13 +106,12 @@ void showPopup({ required BuildContext context, String? message,required VoidCal
// clickAction: () {
// Get.back();
// },
text:"OK",
text: "OK",
style: TextStyle(
fontSize: 14,
color:AppColors.primaryClr,
fontWeight: FontWeight.bold),)
fontSize: 14,
color: AppColors.primaryClr,
fontWeight: FontWeight.bold),
)
],
),
),
@ -129,12 +123,14 @@ void showPopup({ required BuildContext context, String? message,required VoidCal
void showFreightBill(BuildContext context) {
final controller = Get.put(TransportController());
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return AlertDialog(
backgroundColor: AppColors.primaryClr,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(0.0), // Border radius here
borderRadius: BorderRadius.circular(0.0),
),
contentPadding: EdgeInsets.zero,
content: Column(
@ -195,8 +191,8 @@ void showFreightBill(BuildContext context) {
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: Obx(() =>
Text(
child: Obx(
() => Text(
"Freight Bill No: ${controller.freightBillNo.value}",
style: TextStyle(
fontSize: 12,
@ -207,7 +203,10 @@ void showFreightBill(BuildContext context) {
),
Obx(() {
if (controller.grnListLoader.value) {
return Center(child: CircularProgressIndicator(color: AppColors.primaryClr,));
return Center(
child: CircularProgressIndicator(
color: AppColors.primaryClr,
));
}
if (controller.errorMessage.isNotEmpty) {
@ -233,16 +232,18 @@ void showFreightBill(BuildContext context) {
child: DataTable(
dataRowHeight: 28,
headingRowHeight: 38,
headingRowColor: WidgetStateProperty.all(AppColors.clrF2),
headingRowColor:
WidgetStateProperty.all(AppColors.clrF2),
border: TableBorder(
horizontalInside: BorderSide(color: AppColors.clrGrey),
verticalInside: BorderSide(color: AppColors.clrGrey),
horizontalInside:
BorderSide(color: AppColors.clrGrey),
verticalInside:
BorderSide(color: AppColors.clrGrey),
bottom: BorderSide(color: AppColors.clrGrey),
left: BorderSide(color: AppColors.clrGrey),
right: BorderSide(color: AppColors.clrGrey),
top: BorderSide(color: AppColors.clrGrey),
),
columns: [
dataColumn(AppStrings.srNo),
dataColumn(AppStrings.mrnNo),
@ -267,26 +268,20 @@ void showFreightBill(BuildContext context) {
alignment: Alignment.bottomRight,
child: CommonBtn(
style: 14.txtBoldBlue,
borderClr: AppColors.primaryClr,
bkClr: Colors.white,
margin: EdgeInsets.only(top: 24),
text: "Done",
clickAction: (){
borderClr: AppColors.primaryClr,
bkClr: Colors.white,
margin: EdgeInsets.only(top: 24),
text: "Done",
clickAction: () {
Get.back();
}),
)
],
),
)
),
],
),
);
},
);
}

View File

@ -4,7 +4,8 @@ import 'package:shayog/components/styles/textStyles.dart';
import 'dart:math' as math;
import '../../../components/styles/app_colors.dart';
class CustomPagination extends StatelessWidget {
class
CustomPagination extends StatelessWidget {
final int currentPage;
final int totalPages;
final Function(int) onPageChanged;
@ -19,7 +20,6 @@ class CustomPagination extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(vertical: 2.0),
decoration: BoxDecoration(
color: AppColors.clrF2,

View File

@ -24,3 +24,4 @@ class MyApp extends StatelessWidget {
});
}
}

View File

@ -1,11 +1,10 @@
class ApiUrls {
ApiUrls._();
static const String baseUrl = "http://46.28.44.130:9092/";
static const addFreightBill =
'bill/grndetails?page=0&size=20&sort=grn_date,desc';
static const getFreightBills = 'bill/dropdown';
static const getAllPayments = "http://46.28.44.130:9092/invoice/getPayments";
static const generateFreightBill =
'http://46.28.44.130:9092/bill/addFreightBill';
static const createUser = 'http://46.28.44.130:9093/api/users/createUser';
@ -14,7 +13,7 @@ class ApiUrls {
static const getAllUser =
'http://46.28.44.130:9093/api/users/userdetails?page=';
static const viewFreightBill =
'http://46.28.44.130:9092/bill/freightbill?page=0&size=15&sort=last_updated_on,desc';
'http://46.28.44.130:9092/bill/freightbill?page=';
static const addUserType =
'http://46.28.44.130:9093/api/user-types/createUserType';
static const dropDownList =
@ -34,42 +33,7 @@ class ApiUrls {
"http://46.28.44.130:9093/api/user-types/usertypedetails?page=0&size=15&sort=last_updated_on,desc";
static const grnPendingDetails =
"http://46.28.44.130:9092/bill/grndetailsPanding?page=0&size=20&sort=grn_date,desc";
static const viewSubDetailsOfViewFreightBill = "http://46.28.44.130:9092/bill/grndetailsByFreightBill?freightBillCode=";
static const getInvoiceDetails = "http://46.28.44.130:9092/invoice/getInvoice";
}
// class ApiUrls {
// ApiUrls._();
//
// static const String baseUrl = "http://localhost:9092/";
//
// static const addFreightBill =
// 'bill/grndetails?page=0&size=20&sort=grn_date,desc';
// static const getFreightBills = 'bill/dropdown';
// static const generateFreightBill =
// 'http://localhost:9092/bill/addFreightBill';
// static const createUser = 'http://localhost:9093/api/users/createUser';
// static const editUser =
// 'http://localhost:9093/api/users/update?userEmpTransCode=';
// static const getAllUser =
// 'http://localhost:9093/api/users/userdetails?page=';
// static const viewFreightBill =
// 'http://localhost:9092/bill/freightbill?page';
// static const addUserType =
// 'http://localhost:9093/api/user-types/createUserType';
// static const dropDownList =
// 'http://localhost:9093/api/user-roles/userrole_dropdown';
// static const plantMapping = 'http://localhost:9093/userplant/fetchPlants';
// static const checkStatus =
// 'http://localhost:9093/api/user-types/update-status/';
// static const getInternalUserDropdown =
// 'http://localhost:9093/api/user-roles/userrole_dropdown';
// static const fetchEmailsAndEmpCode =
// 'http://localhost:9093/api/user-roles/fetchRoles';
// static const selectAndAssignRole =
// "http://localhost:9093/api/user-roles/assignRoles";
// static const assignPlantRole =
// "http://localhost:9093/userplant/assignPlants";
// static const userTypeDetails =
// "http://localhost:9093/api/user-types/usertypedetails?page=0&size=15&sort=last_updated_on,desc";
// static const grnPendingDetails =
// "http://localhost:9092/bill/grndetailsPanding?page=0&size=20&sort=grn_date,desc";
// }

View File

@ -1,5 +1,5 @@
import 'package:shayog/feature/presentation/screens/admin/user_management/model/get_internal_user_model.dart';
import 'package:shayog/feature/presentation/screens/transporter/model/get_invoice_response.dart';
import 'package:shayog/feature/presentation/screens/transporter/model/sub_freight_view_dialog_model.dart';
import 'package:shayog/services/network/remote_services.dart';
import '../../feature/presentation/screens/admin/user_management/model/dropdown_res_model.dart';
@ -37,4 +37,17 @@ class GetRequests {
return null;
}
}
static Future<SubFreightViewDialogModel?> subViewFreightDialog(
String freightBillCode) async {
var apiResponse = await RemoteService.simpleGet9090(
'${ApiUrls.viewSubDetailsOfViewFreightBill}$freightBillCode');
if (apiResponse != null) {
print('valuess ${apiResponse.response}');
return subFreightViewDialogModelFromJson(apiResponse.response!);
} else {
return null;
}
}
}

View File

@ -20,6 +20,8 @@ class PostRequests {
PostRequests._();
static Future<GenerateFreightBills?> addFreightBill(
Map<String, String> requestBody) async {
var apiResponse =
await RemoteService.simplePost(requestBody, ApiUrls.addFreightBill);
@ -103,7 +105,7 @@ class PostRequests {
}
}
static Future<ViewFreightBillResModel?> viewFreightBill(
static Future<ViewFreightBillResModel?> viewFreightBillF(
Map<String, String> requestBody,
) async {
var apiResponse = await RemoteService.postUser(requestBody,
@ -115,6 +117,40 @@ class PostRequests {
return null;
}
}
static Future<ViewFreightBillResModel?> viewFreightBill({
int page = 0,
int size = 15,
String sort = 'last_updated_on,desc',
Map<String, String>? requestBody,
}) async {
// Construct dynamic URL with query parameters
String url = 'http://46.28.44.130:9092/bill/freightbill'
'?page=$page&size=$size&sort=$sort';
try {
var apiResponse = await RemoteService.postUser(
requestBody ?? {}, // Use empty map if no request body
url
);
if (apiResponse == null) return null;
if (apiResponse.response == null || apiResponse.response!.isEmpty) {
print('Empty response received');
return null;
}
try {
return viewFreightBillResModelFromJson(apiResponse.response!);
} catch (e) {
print('JSON Parsing Error: $e');
print('Problematic JSON: ${apiResponse.response}');
return null;
}
} catch (e) {
print('API Call Error: $e');
return null;
}
}
static Future<UserTypeResModel?> addUserType(
Map<String, String> requestBody) async {
@ -153,26 +189,17 @@ class PostRequests {
}
}
// static Future<FetchInternalUserModel?> fetchEmailsAndEmpCodes(
// Map<String, String> requestBody) async {
// var apiResponse = await RemoteService.postUser(
// requestBody, ApiUrls.fetchEmailsAndEmpCode);
// if (apiResponse != null) {
// return fetchInternalUserModelFromJson(apiResponse.response!);
// } else {
// return null;
// }
// }
static Future<FetchInternalUserModel?> fetchEmailsAndEmpCodes(
Map<String, String> requestBody,String message) async {
var apiResponse = await RemoteService.postMethod(
requestBody, ApiUrls.fetchEmailsAndEmpCode,message);
Map<String, String> requestBody) async {
var apiResponse = await RemoteService.postUser(
requestBody, ApiUrls.fetchEmailsAndEmpCode);
if (apiResponse != null) {
return fetchInternalUserModelFromJson(apiResponse.response!);
} else {
return null;
}
}
static Future<SelectAssignRoleModel?> selectAssignRole(
Map<String, dynamic> requestBody) async {
var apiResponse =
@ -220,6 +247,7 @@ class PostRequests {
Map<String, String> requestBody) async {
var apiResponse =
await RemoteService.postUser(requestBody, ApiUrls.getInvoiceDetails);
print('response data from invoice ${apiResponse.toString()}');
if (apiResponse != null) {
return getInvoiceResponseFromJson(apiResponse.response!);
} else {

View File

@ -250,9 +250,9 @@ class RemoteService {
var body = json.encode(requestBody);
final response =
await http.post(Uri.parse(endUrl), headers: getHeaders(), body: body);
print('${response.body}response');
print('response data${response.body}');
print(endUrl);
print('${response.statusCode}response');
print('statusCode ${response.statusCode}');
var responseCode = response.statusCode;
if (Helpers.isResponseSuccessful(responseCode)) {
@ -286,33 +286,6 @@ class RemoteService {
try {
final map = jsonDecode(response.body) as Map<String, dynamic>;
// AppAlerts.alert(message: '${map['message']}');
throw map['message'];
} catch (e) {
return null;
}
}
}
static Future<CommonResModel?> postMethod(
Map<String, dynamic> requestBody, String endUrl,String message) async {
var body = json.encode(requestBody);
final response =
await http.post(Uri.parse(endUrl), headers: getHeaders(), body: body);
print('${response.body}response');
print(endUrl);
print('${response.statusCode}response');
var responseCode = response.statusCode;
if (Helpers.isResponseSuccessful(responseCode)) {
return CommonResModel(statusCode: responseCode, response: response.body);
} else {
print(response.body);
try {
final map = jsonDecode(response.body) as Map<String, dynamic>;
message = '${map['message']}';
print("message?????${message}");
throw map['message'];
} catch (e) {
return null;

View File

@ -6,7 +6,9 @@ import FlutterMacOS
import Foundation
import file_picker
import path_provider_foundation
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
}

View File

@ -333,22 +333,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.0"
syncfusion_flutter_core:
dependency: transitive
description:
name: syncfusion_flutter_core
sha256: "3c1876b0a245de23de3b17a19e3106fed57d88f4fd2c8dc9bc1976705b1c31d5"
url: "https://pub.dev"
source: hosted
version: "28.2.4"
syncfusion_flutter_datepicker:
dependency: "direct main"
description:
name: syncfusion_flutter_datepicker
sha256: "889b716d9de344852f651ecdcc726b6eeb9e326d95c1bb54df95631a5d7ead68"
url: "https://pub.dev"
source: hosted
version: "28.2.4"
table_calendar:
dependency: "direct main"
description:

View File

@ -40,12 +40,10 @@ dependencies:
intl: ^0.20.1
vph_web_date_picker: ^0.0.6
table_calendar: ^3.2.0
syncfusion_flutter_datepicker: ^28.2.4
file_picker: ^8.3.1
path_provider: ^2.1.5
dev_dependencies:
flutter_test:
sdk: flutter