diff --git a/lib/inventree/stock.dart b/lib/inventree/stock.dart index 1aa709a7..22b5e709 100644 --- a/lib/inventree/stock.dart +++ b/lib/inventree/stock.dart @@ -1,5 +1,6 @@ import "dart:async"; +import 'package:flutter/material.dart'; import "package:intl/intl.dart"; import 'package:inventree/helpers.dart'; import "package:inventree/inventree/part.dart"; @@ -98,7 +99,7 @@ class InvenTreeStockItem extends InvenTreeModel { Color get statusColor { switch (status) { case OK: - return Color(0xFF50aa51); + return Colors.black; case ATTENTION: return Color(0xFFfdc82a); case DAMAGED: diff --git a/lib/l10n b/lib/l10n index 603e0420..74d796f7 160000 --- a/lib/l10n +++ b/lib/l10n @@ -1 +1 @@ -Subproject commit 603e0420a44996270e7cc29b278d8bdbf931e5c4 +Subproject commit 74d796f7f1174fc27d5c031e18f4adbe1e16e6a4 diff --git a/lib/widget/location_display.dart b/lib/widget/location_display.dart index 145e9982..26950a34 100644 --- a/lib/widget/location_display.dart +++ b/lib/widget/location_display.dart @@ -580,7 +580,10 @@ class _PaginatedStockListState extends State { height: 40, ), trailing: Text("${item.displayQuantity}", - style: TextStyle(fontWeight: FontWeight.bold), + style: TextStyle( + fontWeight: FontWeight.bold, + color: item.statusColor, + ), ), onTap: () { _openItem(context, item.pk); diff --git a/lib/widget/purchase_order_detail.dart b/lib/widget/purchase_order_detail.dart index b89117d9..641e5402 100644 --- a/lib/widget/purchase_order_detail.dart +++ b/lib/widget/purchase_order_detail.dart @@ -1,15 +1,25 @@ +import 'package:dropdown_search/dropdown_search.dart'; import "package:flutter/cupertino.dart"; import "package:flutter/material.dart"; import "package:font_awesome_flutter/font_awesome_flutter.dart"; import "package:inventree/api.dart"; +import 'package:inventree/api_form.dart'; import "package:inventree/app_colors.dart"; +import 'package:inventree/helpers.dart'; import "package:inventree/inventree/company.dart"; +import 'package:inventree/inventree/model.dart'; +import 'package:inventree/inventree/part.dart'; import "package:inventree/inventree/purchase_order.dart"; +import 'package:inventree/inventree/stock.dart'; import "package:inventree/widget/company_detail.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:inventree/l10.dart"; import "package:inventree/widget/location_display.dart"; +import 'package:inventree/widget/snacks.dart'; +import 'package:one_context/one_context.dart'; + +import 'dialogs.dart'; class PurchaseOrderDetailWidget extends StatefulWidget { @@ -172,15 +182,70 @@ class _PurchaseOrderDetailState extends RefreshableState fields = { + "line_item": { + "parent": "items", + "nested": true, + "hidden": true, + "value": lineItem.pk, + }, + "quantity": { + "parent": "items", + "nested": true, + "value": lineItem.outstanding, + }, + "status": { + "parent": "items", + "nested": true, + }, + "location": { + } + }; + + // TODO: Pre-fill the "location" value if the part has a default location specified + + launchApiForm( + context, + L10().receiveItem, + order.receive_url, + fields, + method: "POST", + icon: FontAwesomeIcons.signInAlt, + onSuccess: (data) async { + showSnackIcon(L10().receivedItem, success: true); + refresh(); + } + ); + } + void lineItemMenu(BuildContext context, InvenTreePOLineItem lineItem) { List children = []; - if (InvenTreeAPI().supportPoReceive()) { + children.add( + SimpleDialogOption( + onPressed: () { + OneContext().popDialog(); + + // TODO: Navigate to the "SupplierPart" display? + }, + child: ListTile( + title: Text(L10().viewSupplierPart), + leading: FaIcon(FontAwesomeIcons.eye), + ) + ) + ); + + if (order.isPlaced && InvenTreeAPI().supportPoReceive()) { children.add( SimpleDialogOption( onPressed: () { + // Hide the dialog option + OneContext().popDialog(); + receiveLine(context, lineItem); }, child: ListTile( title: Text(L10().receiveItem), @@ -219,15 +284,37 @@ class _PurchaseOrderDetailState extends RefreshableState { ListTile( title: Text(L10().quantity), leading: FaIcon(FontAwesomeIcons.cubes), - trailing: Text("${item.quantityString}"), + trailing: Text("${item.quantityString()}"), ) ); }