Push After Pull from dev_priya and resolve merge conflicts

feature_dev_ankit
Ankit Sharma 2025-02-07 01:53:29 +05:30
commit 2382a8eaa9
11 changed files with 485 additions and 450 deletions

View File

@ -57,8 +57,7 @@ class AppStrings {
static const String cCNDate = "CCN Date";
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";

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

@ -12,6 +12,7 @@ import '../../../../../../../components/common/common_btn.dart';
import '../../../../../../../components/common/custom_drop_down.dart';
import '../../../../../../../components/common/data_cell.dart';
import '../../../../../../../components/styles/app_strings.dart';
import '../../../../widgets/custom_pagination.dart';
import '../../view_model/transport_controller.dart';
import '../../widgets/common_card.dart';
import '../../widgets/freightbill_dialog.dart';
@ -298,32 +299,9 @@ class GenerateFrightBill extends StatelessWidget {
height: 30,
width: 100,
text: AppStrings.submit,
// clickAction: () {
// // controller.postData();
// controller.handleFilterSubmit();
// },
clickAction: () => controller
.handleFilterSubmitGenerateFreight(),
),
// CommonButton(
// borderRadius: 4,
// height: 30,
// width: 100,
// text: AppStrings.submit,
// clickAction: () {
// controller.validateFields();
//
// if (controller.showPlantError.value ||
// controller.showProductError.value ||
// controller.showTransactionError.value
// ) {
// print('controller.showProductError.value ${controller.showProductError.value}');
//
// } else {
// controller.postData();
// }
// },
// ),
],
),
),
@ -348,14 +326,12 @@ class GenerateFrightBill extends StatelessWidget {
color: AppColors.primaryClr,
)));
}
if (controller.errorMessage.isNotEmpty) {
return SizedBox(
height: MediaQuery.sizeOf(context).height * 0.6,
width: MediaQuery.sizeOf(context).width,
child: Center(child: Text(controller.errorMessage.value)));
}
if (controller.grnDetails.isEmpty) {
return SizedBox(
height: controller.isFilterVisibleGenerateFreight.value
@ -368,6 +344,8 @@ class GenerateFrightBill extends StatelessWidget {
);
}
return Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 10),
@ -416,7 +394,8 @@ class GenerateFrightBill extends StatelessWidget {
),
Container(
margin: EdgeInsets.only(bottom: 16, top: 16),
height: controller.isFilterVisibleGenerateFreight.value == true
height:
controller.isFilterVisibleGenerateFreight.value == true
? MediaQuery.of(context).size.height * 0.3
: MediaQuery.of(context).size.height * 0.64,
child: RawScrollbar(
@ -439,7 +418,7 @@ class GenerateFrightBill extends StatelessWidget {
scrollDirection: Axis.horizontal,
controller: controller.horizontalScrollController,
child: Container(
margin: EdgeInsets.only(bottom: 24, right: 24),
margin: EdgeInsets.only(bottom: 24),
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey.shade400,
@ -465,17 +444,15 @@ class GenerateFrightBill extends StatelessWidget {
DataColumn(
label: Transform.scale(
scale: 0.80,
// Adjust this scale to make the checkbox bigger or smaller
child: Checkbox(
value: controller.selectAllField.value,
onChanged: (value) {
controller.selectAll(value ?? false);
},
activeColor: AppColors.primaryClr,
checkColor: Colors.white,
materialTapTargetSize: MaterialTapTargetSize
.shrinkWrap, // Avoids large tap area
.shrinkWrap,
),
),
),
@ -498,7 +475,6 @@ class GenerateFrightBill extends StatelessWidget {
rows: List<DataRow>.generate(
controller.grnDetails.length, (index) {
final stoppage = controller.grnDetails[index];
return DataRow(
selected: stoppage.isSelected,
cells: [
@ -520,16 +496,19 @@ class GenerateFrightBill extends StatelessWidget {
),
// editableCell(index, "0${index + 1}"),
editableCell(index, stoppage.grnNo ?? ""),
editableCell(index, stoppage.plantCode ?? ""),
editableCell(
index, stoppage.plantCode ?? ""),
editableCell(
index, stoppage.materialCode ?? ""),
editableCell(
index,
DateFormat('yyyy-MM-dd').format(
stoppage.grnDate ?? DateTime.now())),
stoppage.grnDate ??
DateTime.now())),
editableCell(
index, stoppage.fromLocation ?? ""),
editableCell(index, stoppage.vehicleNo ?? ""),
editableCell(
index, stoppage.vehicleNo ?? ""),
editableCell(index, stoppage.lrNo ?? ""),
editableCell(
index,
@ -537,15 +516,17 @@ class GenerateFrightBill extends StatelessWidget {
stoppage.lrDate ?? DateTime.now())),
editableCell(index,
stoppage.dispQty?.toString() ?? ""),
editableCell(
index, stoppage.netQty?.toString() ?? ""),
editableCell(index,
stoppage.netQty?.toString() ?? ""),
editableCell(index,
stoppage.billingQty?.toString() ?? ""),
editableCell(index, "-"),
editableCell(index,
stoppage.freightRate?.toString() ?? ""),
editableCell(index,
stoppage.shipmentCost?.toString() ?? ""),
editableCell(
index,
stoppage.shipmentCost?.toString() ??
""),
],
);
}),
@ -556,6 +537,13 @@ class GenerateFrightBill extends StatelessWidget {
),
),
),
CustomPagination(
currentPage: controller.currentPageViewFreight.value + 1,
totalPages: controller.totalPagesViewFreight.value,
onPageChanged: (page) {
controller.viewFreightView(page: page - 1);
},
),
],
);
}),

View File

@ -3,6 +3,7 @@ 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:vph_web_date_picker/vph_web_date_picker.dart';
import '../../../../../../../components/common/data_cell.dart';
@ -519,9 +520,17 @@ class PendingGeneration extends StatelessWidget {
),
),
),
],
);
}),
// CustomPagination(
// currentPage: controller.currentPage.value,
// totalPages: controller.totalPages.value,
// onPageChanged: (int page) {
// // controller.onPageChanged(page);
// },
// ),
],
);
}

View File

@ -1,9 +1,7 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shayog/components/common/common_btn.dart';
import 'package:shayog/components/styles/textStyles.dart';
import 'package:shayog/feature/presentation/screens/transporter/model/sub_freight_view_dialog_model.dart';
import 'package:shayog/feature/presentation/screens/transporter/model/view_freight_bill_res_model.dart';
import 'package:shayog/feature/presentation/widgets/custom_pagination.dart';
import 'package:sizer/sizer.dart';
import 'package:vph_web_date_picker/vph_web_date_picker.dart';
import '../../../../../../../components/common/data_cell.dart';
@ -11,11 +9,8 @@ import '../../../../../../../components/styles/app_colors.dart';
import '../../../../../../../components/styles/app_strings.dart';
import '../../../../../../components/common/common_button.dart';
import '../../../../../../components/common/custom_drop_down.dart';
import '../../../../widgets/custom_pagination.dart';
import '../../../../widgets/text_view.dart';
import '../../view_model/transport_controller.dart';
import '../../widgets/common_card.dart';
import '../../widgets/freightbill_dialog.dart';
class ViewFreightBill extends StatelessWidget {
ViewFreightBill({super.key});
@ -27,10 +22,12 @@ class ViewFreightBill extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Obx(() => controller.isFilterVisibleViewFreight.value
? Container(
padding: EdgeInsets.all(16),
padding: EdgeInsets.symmetric(vertical: 10,horizontal: 16),
color: AppColors.clrF2,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
@ -57,8 +54,6 @@ class ViewFreightBill extends StatelessWidget {
selected.plantCode ?? "";
controller.showPlantErrorViewFreight.value =
false;
print(
"selectPlant${controller.selectPlant.value}");
}
},
hintText: "Select Plant",
@ -151,7 +146,7 @@ class ViewFreightBill extends StatelessWidget {
),
Padding(
padding:
const EdgeInsets.only(top: 16.0, left: 0, right: 8),
const EdgeInsets.only(top: 0.0, left: 0, right: 8),
child: Row(
children: [
Expanded(
@ -294,19 +289,6 @@ class ViewFreightBill extends StatelessWidget {
width: 100,
text: AppStrings.submit,
clickAction: () {
// if (controller.showPlantErrorFreight
// .value ||
// controller.showProductErrorFreight
// .value ||
// controller.showTransactionErrorFreight
// .value
// ) {
// print(
// 'controller.showProductError.value ${controller
// .showProductError.value}');
// } else {
// controller.postData();
// }
controller
.handleFilterSubmitViewFreightBill();
},
@ -323,11 +305,10 @@ class ViewFreightBill extends StatelessWidget {
),
)
: SizedBox.shrink()),
Obx(() {
if (controller.freightViewLoader.value) {
return SizedBox(
height: MediaQuery.sizeOf(context).height * 0.6,
height: MediaQuery.sizeOf(context).height * 0.64,
width: MediaQuery.sizeOf(context).width,
child: Center(
child: CircularProgressIndicator(
@ -339,7 +320,7 @@ class ViewFreightBill extends StatelessWidget {
if (controller.errorMessage.isNotEmpty) {
return SizedBox(
height: MediaQuery.sizeOf(context).height * 0.6,
height: MediaQuery.sizeOf(context).height * 0.64,
width: MediaQuery.sizeOf(context).width,
child: Center(child: Text(controller.errorMessage.value)));
}
@ -347,10 +328,9 @@ class ViewFreightBill extends StatelessWidget {
if (controller.freightBillData.isEmpty ||
controller.freightBillData == []) {
return SizedBox(
height: controller.isFilterVisibleViewFreight.value
? MediaQuery.sizeOf(context).height * 0.4
: MediaQuery.sizeOf(context).height * 0.6,
: MediaQuery.sizeOf(context).height * 0.64,
width: MediaQuery.sizeOf(context).width,
child: Center(
child: Text(
@ -366,7 +346,7 @@ class ViewFreightBill extends StatelessWidget {
Container(
margin: EdgeInsets.only(bottom: 16, top: 16),
height: controller.isFilterVisibleViewFreight.value == true
? MediaQuery.of(context).size.height * 0.4
? MediaQuery.of(context).size.height * 0.36
: MediaQuery.of(context).size.height * 0.64,
child: RawScrollbar(
thumbColor: AppColors.clrD9,
@ -388,7 +368,7 @@ class ViewFreightBill extends StatelessWidget {
scrollDirection: Axis.horizontal,
controller: controller.horizontalScrollController,
child: Container(
margin: EdgeInsets.only(bottom: 24, right: 24),
margin: EdgeInsets.only(bottom: 24),
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey.shade400,
@ -460,14 +440,12 @@ class ViewFreightBill extends StatelessWidget {
controller.freightBillCode.value =
freightBill.freightbillCode ?? "";
print(
'freightBill.trasnporterInvoiceNo ${freightBill.trasnporterInvoiceNo}');
return DataRow(
cells: [
editableCell(
index, "${freightBill.plantCode}"),
editableCell(
index, "${freightBill.materialCode}"),
editableCell(index,
"${freightBill.plantCode}-${freightBill.plantDesc}"),
editableCell(index,
"${freightBill.materialCode}-${freightBill.materialDescription}"),
editableCell(
index,
freightBill.freightbillCode ?? "-",
@ -484,15 +462,15 @@ class ViewFreightBill extends StatelessWidget {
editableCell(
index, "${freightBill.createdOn ?? "-"}"),
editableCell(index,
"${freightBill.trasnporterInvoiceNo ?? "-"}"),
"${freightBill.transporterInvoiceNo ?? "-"}"),
editableCell(index,
"${freightBill.trasnporterInvoiceNoDate ?? "-"}"),
"${freightBill.transporterInvoiceNoDate ?? "-"}"),
editableCell(index,
"${freightBill.billingQty ?? "-"}"),
"${freightBill.billingNetQty ?? "-"}"),
editableCell(
index, "${freightBill.uom ?? "-"}"),
editableCell(index,
"${freightBill.freightAmount ?? "-"}"),
"${freightBill.shipmentGrossCost ?? "-"}"),
editableCell(
index, "${freightBill.cgst ?? "-"}"),
editableCell(
@ -504,21 +482,21 @@ class ViewFreightBill extends StatelessWidget {
editableCell(
index, "${freightBill.totalGst ?? "-"}"),
editableCell(index,
"${freightBill.freightAmount ?? "-"}"),
"${freightBill.shipmentNetCost ?? "-"}"),
editableCell(index,
"${freightBill.trasnporterInvoiceNoDate ?? "-"}"),
"${freightBill.transporterInvoiceNoDate ?? "-"}"),
editableCell(
index, "${freightBill.status ?? "-"}"),
index, freightBill.status ?? "-"),
editableCell(
index, "${freightBill.totalGst ?? "-"}"),
editableCell(index,
"${freightBill.trasnporterInvoiceNoDate ?? "-"}"),
"${freightBill.transporterInvoiceNoDate ?? "-"}"),
editableCell(
index, "${freightBill.utr5No ?? "-"}"),
editableCell(
index, "${freightBill.utr1Date ?? "-"}"),
editableCell(index,
"${freightBill.freightAmount ?? "-"}"),
"${freightBill.shipmentNetCost ?? "-"}"),
editableCell(
index, "${freightBill.utr1No ?? "-"}"),
editableCell(
@ -558,24 +536,17 @@ class ViewFreightBill extends StatelessWidget {
),
),
),
// CustomPagination(
// currentPage: controller.currentPage.value,
// totalPages: controller.totalPages.value,
// onPageChanged: (int page) {
// controller.onPageChanged(page);
// },
// ),
),
CustomPagination(
currentPage: controller.currentPageViewFreight.value + 1,
totalPages: controller.totalPagesViewFreight.value,
onPageChanged: (page) {
controller.viewFreightView(page: page - 1);
},
),
],
);
}),
CustomPagination(
currentPage: controller.currentPage.value,
totalPages: controller.totalPages.value,
onPageChanged: (int page) {
controller.onPageChanged(page);
},
),
],
);
}
@ -612,8 +583,7 @@ class ViewFreightBill extends StatelessWidget {
),
),
Expanded(
child: contr.grnListDialog == null ||
contr.grnListDialog.isEmpty
child: contr.grnListDialog.isEmpty
? Center(child: Text('No data available.'))
: Column(
mainAxisSize: MainAxisSize.min,
@ -706,12 +676,20 @@ class ViewFreightBill extends StatelessWidget {
),
editableCell(index,
"${freightBill.grnDate ?? "-"}"),
editableCell(index,
"${freightBill.fromLocation ?? "-"}"),
editableCell(index,
"${freightBill.vehicleNo ?? "-"}"),
editableCell(index,
"${freightBill.transporterCode ?? "-"}"),
editableCell(
index,
freightBill
.fromLocation ??
"-"),
editableCell(
index,
freightBill.vehicleNo ??
"-"),
editableCell(
index,
freightBill
.transporterCode ??
"-"),
editableCell(index,
"${freightBill.lrDate ?? "-"}"),
editableCell(index,

View File

@ -22,6 +22,7 @@ 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});
@ -57,7 +58,7 @@ class _TransportViewState extends State<TransportView> {
() => InkWell(
onTap: () {
ctrl.selectedIndex.value = index;
ctrl.selectedUser.value =0;
ctrl.selectedUser.value = 0;
},
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
@ -182,11 +183,13 @@ class _TransportViewState extends State<TransportView> {
'${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),
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,
@ -198,7 +201,7 @@ class _TransportViewState extends State<TransportView> {
borderRadius: BorderRadius.circular(4),
),
child: InkWell(
onTap: () { },
onTap: () {},
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
@ -284,7 +287,8 @@ class _TransportViewState extends State<TransportView> {
PlatformFile file = result.files.first;
// Validate file size (optional)
if (file.size > 10 * 1024 * 1024) { // 10MB limit
if (file.size > 10 * 1024 * 1024) {
// 10MB limit
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('File size must be less than 10MB'),
@ -316,14 +320,6 @@ class _TransportViewState extends State<TransportView> {
}
}
_commonText(String title) {
return Text(
title,
style: TextStyle(
fontSize: 13, color: Colors.black, fontWeight: FontWeight.w900),
);
}
_dashboardView() {
return RawScrollbar(
child: Column(
@ -350,8 +346,10 @@ class _TransportViewState extends State<TransportView> {
ctrl.selectedUser.value = index;
ctrl.refreshApis();
ctrl.isFilterVisibleViewFreight.value = false;
ctrl.isFilterVisiblePendingGeneration.value = false;
ctrl.isFilterVisibleGenerateFreight.value = false;
ctrl.isFilterVisiblePendingGeneration.value =
false;
ctrl.isFilterVisibleGenerateFreight.value =
false;
},
child: Container(
margin: EdgeInsets.only(bottom: 10, top: 10),

View File

@ -1,5 +1,3 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:shayog/components/styles/app_images.dart';
@ -7,7 +5,6 @@ import 'package:shayog/feature/presentation/screens/transporter/model/sub_freigh
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';
@ -45,7 +42,6 @@ class TransportController extends GetxController {
var selectTransactionTypePending = ''.obs;
// for view FreightBill
RxString selectPlantViewFreight = ''.obs;
var selectProductViewFreight = ''.obs;
var selectLocationViewFreight = ''.obs;
@ -165,28 +161,24 @@ class TransportController extends GetxController {
postData();
}
getInvoiceView() async {
try {
invoiceViewLoader.value = true;
Map<String, String> requestBody = {
"invoice_id":"",
"freightBillNo":"",
"invFromDate":"",
"invToDate":"",
"freightFromDate":"",
"freightToDate":""
"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();
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}");
totalPages.value = response.totalPages ?? 0;
totalElements.value = response.totalElements ?? 0;
print('res from invoice ${response.toString()}');
}
} finally {
@ -226,7 +218,6 @@ class TransportController extends GetxController {
postData() async {
try {
isLoading.value = true;
Map<String, String> requestBody = {
"plant": "",
"productNane": "",
@ -235,7 +226,6 @@ class TransportController extends GetxController {
"grnFromDate": "",
"grnToDate": ""
};
var response = await PostRequests.addFreightBill(requestBody);
if (response != null) {
List<Content> flattenedContent =
@ -291,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 ||
@ -387,8 +366,6 @@ class TransportController extends GetxController {
getSubFreightBillsView() async {
try {
isLoading.value = true;
print('Getting details for freight bill: ${freightBillCode.value}');
var response =
await GetRequests.subViewFreightDialog(freightBillCode.value);
if (response != null) {
@ -462,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 ?? []);
@ -480,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;
@ -503,40 +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";
@ -544,7 +499,6 @@ class TransportController extends GetxController {
sortField.value = field;
sortDirection.value = "desc";
}
}
var grnPendingData = <GrnPending>[].obs;
@ -577,9 +531,10 @@ class TransportController extends GetxController {
}
}
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,
@ -590,66 +545,37 @@ class TransportController extends GetxController {
"grnToDate": "",
};
print("Filter request - Plant: ${selectPlantViewFreight.value}, "
"Product: ${selectProductViewFreight.value}, "
"Freight Bill: ${selectFreightBillValidate.value}");
print("🔎 Filter Request - Page: $page, Size: $size, Plant: ${selectPlantViewFreight.value}, "
"Product: ${selectProductViewFreight.value}, Freight Bill: ${selectFreightBillValidate.value}");
var response = await PostRequests.viewFreightBill(requestBody);
var response = await PostRequests.viewFreightBill(
page: page, size: size, requestBody: requestBody); // Pass pagination
if (response != null) {
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}");
// Log sample data for debugging if available
if (flattenedContent.isNotEmpty) {
print("Sample data - Plant: ${flattenedContent[0].plantCode}, "
"Material: ${flattenedContent[0].materialCode}, "
"Freight Bill: ${flattenedContent[0].freightbillCode}");
if (page == 0) {
freightBillData.assignAll(flattenedContent); // First page: Replace data
} else {
freightBillData.addAll(flattenedContent); // Next pages: Append data
}
List<FreightBill> filteredData = flattenedContent.where((item) {
// Plant filter
bool plantMatch = selectPlantViewFreight.value.isEmpty ||
item.plantCode.toString().toLowerCase() ==
selectPlantViewFreight.value.toLowerCase();
// Update pagination details
totalPagesViewFreight.value = response.totalPages ?? 0;
totalElementsViewFreight.value = response.totalElements ?? 0;
currentPageViewFreight.value = page;
// 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();
// Debug logging for filter matches
print("Filter matches for item ${item.freightbillCode}:"
"\nPlant Match: $plantMatch (${item.plantCode} vs ${selectPlantViewFreight.value})"
"\nProduct Match: $productMatch (${item.materialCode} vs ${selectProductViewFreight.value})"
"\nFreight Bill Match: $freightBillMatch (${item.freightbillCode} vs ${selectFreightBillValidate.value})");
return plantMatch && productMatch && freightBillMatch;
}).toList();
print("Filtered records count: ${filteredData.length}");
freightBillData.assignAll(filteredData);
// Update pagination values
totalPages.value = response.totalPages ?? 0;
totalElements.value = response.totalElements ?? 0;
print("✅ Freight bill data filtered successfully");
print("✅ Freight bill data filtered & paginated successfully");
} else {
print("❌ No response received from API");
freightBillData.clear();
if (page == 0) freightBillData.clear();
}
} catch (e) {
print("❌ Error in displayFilteredDataFromViewFreight: $e");
freightBillData.clear();
if (page == 0) freightBillData.clear();
} finally {
freightViewLoader.value = false;
}

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,8 +1,6 @@
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';
@ -15,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 =
@ -38,40 +36,4 @@ class ApiUrls {
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

@ -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 {