2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 05:26:47 +00:00
inventree-app/lib/widget/order/extra_line_detail.dart
Oliver 72a78291b2
Order extra lines (#632)
* Define classes for extra line item

* Display PO extra line items

- Also, some refactoring

* Support extra line items for sales order

* linting fixes

* Update release notes
2025-04-15 20:49:05 +10:00

112 lines
2.5 KiB
Dart

import "package:flutter/material.dart";
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
import "package:inventree/helpers.dart";
import "package:inventree/l10.dart";
import "package:inventree/widget/refreshable_state.dart";
import "package:inventree/widget/snacks.dart";
import "package:inventree/inventree/orders.dart";
class ExtraLineDetailWidget extends StatefulWidget {
const ExtraLineDetailWidget(this.item, {Key? key}) : super(key: key);
final InvenTreeExtraLineItem item;
@override
_ExtraLineDetailWidgetState createState() => _ExtraLineDetailWidgetState();
}
class _ExtraLineDetailWidgetState extends RefreshableState<ExtraLineDetailWidget> {
_ExtraLineDetailWidgetState();
@override
String getAppBarTitle() => L10().extraLineItem;
@override
List<Widget> appBarActions(BuildContext context) {
List<Widget> actions = [];
if (widget.item.canEdit) {
actions.add(
IconButton(
icon: Icon(TablerIcons.edit),
onPressed: () {
_editLineItem(context);
}
)
);
}
return actions;
}
// Function to request data for this page
@override
Future<void> request(BuildContext context) async {
await widget.item.reload();
}
// Callback to edit this line item
Future<void> _editLineItem(BuildContext context) async {
var fields = widget.item.formFields();
widget.item.editForm(
context,
L10().editLineItem,
fields: fields,
onSuccess: (data) async {
refresh(context);
showSnackIcon(L10().lineItemUpdated, success: true);
}
);
}
@override
List<Widget> getTiles(BuildContext context) {
List<Widget> tiles = [];
tiles.add(
ListTile(
title: Text(L10().reference),
trailing: Text(widget.item.reference),
)
);
tiles.add(
ListTile(
title: Text(L10().description),
trailing: Text(widget.item.description),
)
);
tiles.add(
ListTile(
title: Text(L10().quantity),
trailing: Text(widget.item.quantity.toString()),
)
);
tiles.add(
ListTile(
title: Text(L10().unitPrice),
trailing: Text(
renderCurrency(widget.item.price, widget.item.priceCurrency)
)
)
);
if (widget.item.notes.isNotEmpty) {
tiles.add(
ListTile(
title: Text(L10().notes),
subtitle: Text(widget.item.notes),
)
);
}
return tiles;
}
}