diff --git a/InvenTree/InvenTree/fields.py b/InvenTree/InvenTree/fields.py index b3393ef1eb..d2fb7b6ff4 100644 --- a/InvenTree/InvenTree/fields.py +++ b/InvenTree/InvenTree/fields.py @@ -43,7 +43,19 @@ def round_decimal(value, places): class RoundingDecimalFormField(forms.DecimalField): def to_python(self, value): value = super(RoundingDecimalFormField, self).to_python(value) - return round_decimal(value, self.decimal_places) + value = round_decimal(value, self.decimal_places) + return value + + def prepare_value(self, value): + """ + Override the 'prepare_value' method, to remove trailing zeros when displaying. + Why? It looks nice! + """ + + if type(value) == Decimal: + return value.normalize() + else: + return value class RoundingDecimalField(models.DecimalField): diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index d850c50f0f..0572d6005f 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-03-22 08:55+0000\n" +"POT-Creation-Date: 2020-03-31 10:33+0000\n" "PO-Revision-Date: 2020-02-02 08:07+0100\n" "Last-Translator: Christian Schlüter \n" "Language-Team: C \n" @@ -17,7 +17,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 19.12.0\n" -#: InvenTree/helpers.py:186 order/models.py:163 order/models.py:214 +#: InvenTree/helpers.py:186 order/models.py:164 order/models.py:215 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" @@ -71,7 +71,7 @@ msgstr "Französisch" msgid "Polish" msgstr "Polnisch" -#: InvenTree/status_codes.py:36 InvenTree/status_codes.py:91 +#: InvenTree/status_codes.py:36 InvenTree/status_codes.py:97 msgid "Pending" msgstr "Ausstehend" @@ -79,11 +79,11 @@ msgstr "Ausstehend" msgid "Placed" msgstr "Platziert" -#: InvenTree/status_codes.py:38 InvenTree/status_codes.py:94 +#: InvenTree/status_codes.py:38 InvenTree/status_codes.py:100 msgid "Complete" msgstr "Fertig" -#: InvenTree/status_codes.py:39 InvenTree/status_codes.py:93 +#: InvenTree/status_codes.py:39 InvenTree/status_codes.py:99 msgid "Cancelled" msgstr "Storniert" @@ -111,7 +111,7 @@ msgstr "Beschädigt" msgid "Destroyed" msgstr "Zerstört" -#: InvenTree/status_codes.py:92 build/templates/build/allocate_edit.html:28 +#: InvenTree/status_codes.py:98 build/templates/build/allocate_edit.html:28 #: build/templates/build/allocate_view.html:21 #: part/templates/part/part_base.html:106 part/templates/part/tabs.html:21 msgid "Allocated" @@ -233,6 +233,7 @@ msgstr "Zuweisung aufheben" #: build/templates/build/allocate_view.html:17 #: build/templates/build/detail.html:17 #: company/templates/company/detail_part.html:65 +#: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:25 msgid "Part" msgstr "Teil" @@ -297,6 +298,7 @@ msgstr "Titel" #: build/templates/build/detail.html:20 #: company/templates/company/supplier_part_pricing.html:27 +#: order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:29 #: stock/templates/stock/item_base.html:101 #: stock/templates/stock/stock_adjust.html:18 @@ -378,7 +380,7 @@ msgid "Outputs" msgstr "" #: build/templates/build/tabs.html:11 company/models.py:248 -#: company/templates/company/tabs.html:26 order/templates/order/tabs.html:11 +#: company/templates/company/tabs.html:26 order/templates/order/tabs.html:15 #: part/templates/part/tabs.html:58 stock/templates/stock/tabs.html:17 msgid "Notes" msgstr "Notizen" @@ -646,7 +648,7 @@ msgstr "Mindestpreis" msgid "Part packaging" msgstr "Teile-Packaging" -#: company/templates/company/company_base.html:7 order/models.py:130 +#: company/templates/company/company_base.html:7 order/models.py:131 msgid "Company" msgstr "Firma" @@ -687,6 +689,7 @@ msgstr "Kunde" #: company/templates/company/supplier_part_base.html:44 #: company/templates/company/supplier_part_detail.html:21 #: order/templates/order/order_base.html:67 +#: order/templates/order/order_wizard/select_pos.html:30 #: stock/templates/stock/item_base.html:137 msgid "Supplier" msgstr "Zulieferer" @@ -966,72 +969,72 @@ msgstr "" msgid "Delete Price Break" msgstr "Anhang löschen" -#: order/forms.py:21 +#: order/forms.py:22 msgid "Place order" msgstr "Bestellung aufgeben" -#: order/forms.py:32 +#: order/forms.py:33 msgid "Mark order as complete" msgstr "Bestellung als vollständig markieren" -#: order/forms.py:43 +#: order/forms.py:44 msgid "Cancel order" msgstr "Bestellung stornieren" -#: order/forms.py:54 +#: order/forms.py:55 msgid "Receive parts to this location" msgstr "Teile in diesen Ort empfangen" -#: order/models.py:67 +#: order/models.py:68 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:69 +#: order/models.py:70 msgid "Order description" msgstr "Bestellungs-Beschreibung" -#: order/models.py:71 +#: order/models.py:72 msgid "Link to external page" msgstr "Link auf externe Seite" -#: order/models.py:88 +#: order/models.py:89 msgid "Order notes" msgstr "Bestell-Notizen" -#: order/models.py:161 order/models.py:212 part/views.py:1119 +#: order/models.py:162 order/models.py:213 part/views.py:1119 #: stock/models.py:463 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: order/models.py:166 +#: order/models.py:167 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer des Kaufvertrags entsprechen" -#: order/models.py:207 +#: order/models.py:208 msgid "Lines can only be received against an order marked as 'Placed'" msgstr "Nur Teile aufgegebener Bestllungen können empfangen werden" -#: order/models.py:267 +#: order/models.py:268 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:269 +#: order/models.py:270 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:271 +#: order/models.py:272 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:297 stock/templates/stock/item_base.html:119 +#: order/models.py:298 stock/templates/stock/item_base.html:119 msgid "Purchase Order" msgstr "Kaufvertrag" -#: order/models.py:306 +#: order/models.py:307 msgid "Supplier part" msgstr "Zulieferer-Teil" -#: order/models.py:309 +#: order/models.py:310 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" @@ -1053,6 +1056,59 @@ msgstr "Empfangen" msgid "Order Notes" msgstr "Bestellungsbemerkungen" +#: order/templates/order/order_wizard/select_parts.html:9 +msgid "Step 1 of 2 - Select Part Suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:14 +#, fuzzy +#| msgid "Select supplier" +msgid "Select suppliers." +msgstr "Zulieferer auswählen" + +#: order/templates/order/order_wizard/select_parts.html:18 +#, fuzzy +#| msgid "Duplicate part selected" +msgid "No purchaseable parts selected." +msgstr "Teil doppelt ausgewählt" + +#: order/templates/order/order_wizard/select_parts.html:31 +#, fuzzy +#| msgid "Select supplier" +msgid "Select Supplier" +msgstr "Zulieferer auswählen" + +#: order/templates/order/order_wizard/select_parts.html:57 +#, fuzzy +#| msgid "Select supplier" +msgid "Select a supplier for" +msgstr "Zulieferer auswählen" + +#: order/templates/order/order_wizard/select_pos.html:8 +msgid "Step 2 of 2 - Select Purchase Orders" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:12 +msgid "Select existing purchase orders, or create new orders." +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:31 +#: order/templates/order/tabs.html:5 +msgid "Items" +msgstr "Positionen" + +#: order/templates/order/order_wizard/select_pos.html:32 +#, fuzzy +#| msgid "Purchase Order" +msgid "Select Purchase Order" +msgstr "Kaufvertrag" + +#: order/templates/order/order_wizard/select_pos.html:67 +#, fuzzy +#| msgid "Purchase Order" +msgid "Select a purchase order for" +msgstr "Kaufvertrag" + #: order/templates/order/po_attachments.html:11 #, fuzzy #| msgid "Purchase Order Details" @@ -1112,10 +1168,6 @@ msgstr "Bestellnummer" msgid "Reference" msgstr "Referenz" -#: order/templates/order/tabs.html:5 -msgid "Items" -msgstr "Positionen" - #: order/templates/order/tabs.html:8 part/templates/part/tabs.html:55 msgid "Attachments" msgstr "Anhänge" @@ -1419,63 +1471,63 @@ msgstr "Bemerkungen - unterstüzt Markdown-Formatierung" msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:1004 +#: part/models.py:1023 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:1009 +#: part/models.py:1028 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:1011 +#: part/models.py:1030 msgid "Parameter Units" msgstr "Parameter Einheit" -#: part/models.py:1037 +#: part/models.py:1056 msgid "Parent Part" msgstr "Ausgangsteil" -#: part/models.py:1039 +#: part/models.py:1058 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:1041 +#: part/models.py:1060 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:1065 +#: part/models.py:1084 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:1074 +#: part/models.py:1093 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:1081 +#: part/models.py:1100 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:1084 +#: part/models.py:1103 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:1087 +#: part/models.py:1106 msgid "BOM item reference" msgstr "Referenz des Objekts auf der Stückliste" -#: part/models.py:1090 +#: part/models.py:1109 msgid "BOM item notes" msgstr "Notizen zum Stücklisten-Objekt" -#: part/models.py:1092 +#: part/models.py:1111 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:1155 +#: part/models.py:1174 msgid "Part cannot be added to its own Bill of Materials" msgstr "Teil kann nicht zu seiner eigenen Stückliste hinzugefügt werden" -#: part/models.py:1162 +#: part/models.py:1181 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "Teil '{p1}' wird in Stückliste für Teil '{p2}' benutzt (rekursiv)" @@ -1695,6 +1747,18 @@ msgstr "Teil" msgid "Create New Part" msgstr "Neues Lagerobjekt hinzufügen" +#: part/templates/part/stock_count.html:7 +#, fuzzy +#| msgid "Stock" +msgid "No Stock" +msgstr "Lagerbestand" + +#: part/templates/part/stock_count.html:9 +#, fuzzy +#| msgid "Stock" +msgid "Low Stock" +msgstr "Lagerbestand" + #: part/templates/part/tabs.html:9 msgid "Parameters" msgstr "Parameter" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index 9b717613f0..26361c39c0 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-03-22 08:55+0000\n" +"POT-Creation-Date: 2020-03-31 10:33+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/helpers.py:186 order/models.py:163 order/models.py:214 +#: InvenTree/helpers.py:186 order/models.py:164 order/models.py:215 msgid "Invalid quantity provided" msgstr "" @@ -70,7 +70,7 @@ msgstr "" msgid "Polish" msgstr "" -#: InvenTree/status_codes.py:36 InvenTree/status_codes.py:91 +#: InvenTree/status_codes.py:36 InvenTree/status_codes.py:97 msgid "Pending" msgstr "" @@ -78,11 +78,11 @@ msgstr "" msgid "Placed" msgstr "" -#: InvenTree/status_codes.py:38 InvenTree/status_codes.py:94 +#: InvenTree/status_codes.py:38 InvenTree/status_codes.py:100 msgid "Complete" msgstr "" -#: InvenTree/status_codes.py:39 InvenTree/status_codes.py:93 +#: InvenTree/status_codes.py:39 InvenTree/status_codes.py:99 msgid "Cancelled" msgstr "" @@ -110,7 +110,7 @@ msgstr "" msgid "Destroyed" msgstr "" -#: InvenTree/status_codes.py:92 build/templates/build/allocate_edit.html:28 +#: InvenTree/status_codes.py:98 build/templates/build/allocate_edit.html:28 #: build/templates/build/allocate_view.html:21 #: part/templates/part/part_base.html:106 part/templates/part/tabs.html:21 msgid "Allocated" @@ -229,6 +229,7 @@ msgstr "" #: build/templates/build/allocate_view.html:17 #: build/templates/build/detail.html:17 #: company/templates/company/detail_part.html:65 +#: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:25 msgid "Part" msgstr "" @@ -288,6 +289,7 @@ msgstr "" #: build/templates/build/detail.html:20 #: company/templates/company/supplier_part_pricing.html:27 +#: order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:29 #: stock/templates/stock/item_base.html:101 #: stock/templates/stock/stock_adjust.html:18 @@ -369,7 +371,7 @@ msgid "Outputs" msgstr "" #: build/templates/build/tabs.html:11 company/models.py:248 -#: company/templates/company/tabs.html:26 order/templates/order/tabs.html:11 +#: company/templates/company/tabs.html:26 order/templates/order/tabs.html:15 #: part/templates/part/tabs.html:58 stock/templates/stock/tabs.html:17 msgid "Notes" msgstr "" @@ -605,7 +607,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/templates/company/company_base.html:7 order/models.py:130 +#: company/templates/company/company_base.html:7 order/models.py:131 msgid "Company" msgstr "" @@ -644,6 +646,7 @@ msgstr "" #: company/templates/company/supplier_part_base.html:44 #: company/templates/company/supplier_part_detail.html:21 #: order/templates/order/order_base.html:67 +#: order/templates/order/order_wizard/select_pos.html:30 #: stock/templates/stock/item_base.html:137 msgid "Supplier" msgstr "" @@ -866,72 +869,72 @@ msgstr "" msgid "Delete Price Break" msgstr "" -#: order/forms.py:21 +#: order/forms.py:22 msgid "Place order" msgstr "" -#: order/forms.py:32 +#: order/forms.py:33 msgid "Mark order as complete" msgstr "" -#: order/forms.py:43 +#: order/forms.py:44 msgid "Cancel order" msgstr "" -#: order/forms.py:54 +#: order/forms.py:55 msgid "Receive parts to this location" msgstr "" -#: order/models.py:67 +#: order/models.py:68 msgid "Order reference" msgstr "" -#: order/models.py:69 +#: order/models.py:70 msgid "Order description" msgstr "" -#: order/models.py:71 +#: order/models.py:72 msgid "Link to external page" msgstr "" -#: order/models.py:88 +#: order/models.py:89 msgid "Order notes" msgstr "" -#: order/models.py:161 order/models.py:212 part/views.py:1119 +#: order/models.py:162 order/models.py:213 part/views.py:1119 #: stock/models.py:463 msgid "Quantity must be greater than zero" msgstr "" -#: order/models.py:166 +#: order/models.py:167 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:207 +#: order/models.py:208 msgid "Lines can only be received against an order marked as 'Placed'" msgstr "" -#: order/models.py:267 +#: order/models.py:268 msgid "Item quantity" msgstr "" -#: order/models.py:269 +#: order/models.py:270 msgid "Line item reference" msgstr "" -#: order/models.py:271 +#: order/models.py:272 msgid "Line item notes" msgstr "" -#: order/models.py:297 stock/templates/stock/item_base.html:119 +#: order/models.py:298 stock/templates/stock/item_base.html:119 msgid "Purchase Order" msgstr "" -#: order/models.py:306 +#: order/models.py:307 msgid "Supplier part" msgstr "" -#: order/models.py:309 +#: order/models.py:310 msgid "Number of items received" msgstr "" @@ -953,6 +956,47 @@ msgstr "" msgid "Order Notes" msgstr "" +#: order/templates/order/order_wizard/select_parts.html:9 +msgid "Step 1 of 2 - Select Part Suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:14 +msgid "Select suppliers." +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:18 +msgid "No purchaseable parts selected." +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:31 +msgid "Select Supplier" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:57 +msgid "Select a supplier for" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:8 +msgid "Step 2 of 2 - Select Purchase Orders" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:12 +msgid "Select existing purchase orders, or create new orders." +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:31 +#: order/templates/order/tabs.html:5 +msgid "Items" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:32 +msgid "Select Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:67 +msgid "Select a purchase order for" +msgstr "" + #: order/templates/order/po_attachments.html:11 msgid "Purchase Order Attachments" msgstr "" @@ -1007,10 +1051,6 @@ msgstr "" msgid "Reference" msgstr "" -#: order/templates/order/tabs.html:5 -msgid "Items" -msgstr "" - #: order/templates/order/tabs.html:8 part/templates/part/tabs.html:55 msgid "Attachments" msgstr "" @@ -1280,63 +1320,63 @@ msgstr "" msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1004 +#: part/models.py:1023 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:1009 +#: part/models.py:1028 msgid "Parameter Name" msgstr "" -#: part/models.py:1011 +#: part/models.py:1030 msgid "Parameter Units" msgstr "" -#: part/models.py:1037 +#: part/models.py:1056 msgid "Parent Part" msgstr "" -#: part/models.py:1039 +#: part/models.py:1058 msgid "Parameter Template" msgstr "" -#: part/models.py:1041 +#: part/models.py:1060 msgid "Parameter Value" msgstr "" -#: part/models.py:1065 +#: part/models.py:1084 msgid "Select parent part" msgstr "" -#: part/models.py:1074 +#: part/models.py:1093 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:1081 +#: part/models.py:1100 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:1084 +#: part/models.py:1103 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:1087 +#: part/models.py:1106 msgid "BOM item reference" msgstr "" -#: part/models.py:1090 +#: part/models.py:1109 msgid "BOM item notes" msgstr "" -#: part/models.py:1092 +#: part/models.py:1111 msgid "BOM line checksum" msgstr "" -#: part/models.py:1155 +#: part/models.py:1174 msgid "Part cannot be added to its own Bill of Materials" msgstr "" -#: part/models.py:1162 +#: part/models.py:1181 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" @@ -1546,6 +1586,14 @@ msgstr "" msgid "Create New Part" msgstr "" +#: part/templates/part/stock_count.html:7 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 +msgid "Low Stock" +msgstr "" + #: part/templates/part/tabs.html:9 msgid "Parameters" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index 9b717613f0..26361c39c0 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-03-22 08:55+0000\n" +"POT-Creation-Date: 2020-03-31 10:33+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/helpers.py:186 order/models.py:163 order/models.py:214 +#: InvenTree/helpers.py:186 order/models.py:164 order/models.py:215 msgid "Invalid quantity provided" msgstr "" @@ -70,7 +70,7 @@ msgstr "" msgid "Polish" msgstr "" -#: InvenTree/status_codes.py:36 InvenTree/status_codes.py:91 +#: InvenTree/status_codes.py:36 InvenTree/status_codes.py:97 msgid "Pending" msgstr "" @@ -78,11 +78,11 @@ msgstr "" msgid "Placed" msgstr "" -#: InvenTree/status_codes.py:38 InvenTree/status_codes.py:94 +#: InvenTree/status_codes.py:38 InvenTree/status_codes.py:100 msgid "Complete" msgstr "" -#: InvenTree/status_codes.py:39 InvenTree/status_codes.py:93 +#: InvenTree/status_codes.py:39 InvenTree/status_codes.py:99 msgid "Cancelled" msgstr "" @@ -110,7 +110,7 @@ msgstr "" msgid "Destroyed" msgstr "" -#: InvenTree/status_codes.py:92 build/templates/build/allocate_edit.html:28 +#: InvenTree/status_codes.py:98 build/templates/build/allocate_edit.html:28 #: build/templates/build/allocate_view.html:21 #: part/templates/part/part_base.html:106 part/templates/part/tabs.html:21 msgid "Allocated" @@ -229,6 +229,7 @@ msgstr "" #: build/templates/build/allocate_view.html:17 #: build/templates/build/detail.html:17 #: company/templates/company/detail_part.html:65 +#: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:25 msgid "Part" msgstr "" @@ -288,6 +289,7 @@ msgstr "" #: build/templates/build/detail.html:20 #: company/templates/company/supplier_part_pricing.html:27 +#: order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:29 #: stock/templates/stock/item_base.html:101 #: stock/templates/stock/stock_adjust.html:18 @@ -369,7 +371,7 @@ msgid "Outputs" msgstr "" #: build/templates/build/tabs.html:11 company/models.py:248 -#: company/templates/company/tabs.html:26 order/templates/order/tabs.html:11 +#: company/templates/company/tabs.html:26 order/templates/order/tabs.html:15 #: part/templates/part/tabs.html:58 stock/templates/stock/tabs.html:17 msgid "Notes" msgstr "" @@ -605,7 +607,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/templates/company/company_base.html:7 order/models.py:130 +#: company/templates/company/company_base.html:7 order/models.py:131 msgid "Company" msgstr "" @@ -644,6 +646,7 @@ msgstr "" #: company/templates/company/supplier_part_base.html:44 #: company/templates/company/supplier_part_detail.html:21 #: order/templates/order/order_base.html:67 +#: order/templates/order/order_wizard/select_pos.html:30 #: stock/templates/stock/item_base.html:137 msgid "Supplier" msgstr "" @@ -866,72 +869,72 @@ msgstr "" msgid "Delete Price Break" msgstr "" -#: order/forms.py:21 +#: order/forms.py:22 msgid "Place order" msgstr "" -#: order/forms.py:32 +#: order/forms.py:33 msgid "Mark order as complete" msgstr "" -#: order/forms.py:43 +#: order/forms.py:44 msgid "Cancel order" msgstr "" -#: order/forms.py:54 +#: order/forms.py:55 msgid "Receive parts to this location" msgstr "" -#: order/models.py:67 +#: order/models.py:68 msgid "Order reference" msgstr "" -#: order/models.py:69 +#: order/models.py:70 msgid "Order description" msgstr "" -#: order/models.py:71 +#: order/models.py:72 msgid "Link to external page" msgstr "" -#: order/models.py:88 +#: order/models.py:89 msgid "Order notes" msgstr "" -#: order/models.py:161 order/models.py:212 part/views.py:1119 +#: order/models.py:162 order/models.py:213 part/views.py:1119 #: stock/models.py:463 msgid "Quantity must be greater than zero" msgstr "" -#: order/models.py:166 +#: order/models.py:167 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:207 +#: order/models.py:208 msgid "Lines can only be received against an order marked as 'Placed'" msgstr "" -#: order/models.py:267 +#: order/models.py:268 msgid "Item quantity" msgstr "" -#: order/models.py:269 +#: order/models.py:270 msgid "Line item reference" msgstr "" -#: order/models.py:271 +#: order/models.py:272 msgid "Line item notes" msgstr "" -#: order/models.py:297 stock/templates/stock/item_base.html:119 +#: order/models.py:298 stock/templates/stock/item_base.html:119 msgid "Purchase Order" msgstr "" -#: order/models.py:306 +#: order/models.py:307 msgid "Supplier part" msgstr "" -#: order/models.py:309 +#: order/models.py:310 msgid "Number of items received" msgstr "" @@ -953,6 +956,47 @@ msgstr "" msgid "Order Notes" msgstr "" +#: order/templates/order/order_wizard/select_parts.html:9 +msgid "Step 1 of 2 - Select Part Suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:14 +msgid "Select suppliers." +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:18 +msgid "No purchaseable parts selected." +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:31 +msgid "Select Supplier" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:57 +msgid "Select a supplier for" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:8 +msgid "Step 2 of 2 - Select Purchase Orders" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:12 +msgid "Select existing purchase orders, or create new orders." +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:31 +#: order/templates/order/tabs.html:5 +msgid "Items" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:32 +msgid "Select Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:67 +msgid "Select a purchase order for" +msgstr "" + #: order/templates/order/po_attachments.html:11 msgid "Purchase Order Attachments" msgstr "" @@ -1007,10 +1051,6 @@ msgstr "" msgid "Reference" msgstr "" -#: order/templates/order/tabs.html:5 -msgid "Items" -msgstr "" - #: order/templates/order/tabs.html:8 part/templates/part/tabs.html:55 msgid "Attachments" msgstr "" @@ -1280,63 +1320,63 @@ msgstr "" msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1004 +#: part/models.py:1023 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:1009 +#: part/models.py:1028 msgid "Parameter Name" msgstr "" -#: part/models.py:1011 +#: part/models.py:1030 msgid "Parameter Units" msgstr "" -#: part/models.py:1037 +#: part/models.py:1056 msgid "Parent Part" msgstr "" -#: part/models.py:1039 +#: part/models.py:1058 msgid "Parameter Template" msgstr "" -#: part/models.py:1041 +#: part/models.py:1060 msgid "Parameter Value" msgstr "" -#: part/models.py:1065 +#: part/models.py:1084 msgid "Select parent part" msgstr "" -#: part/models.py:1074 +#: part/models.py:1093 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:1081 +#: part/models.py:1100 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:1084 +#: part/models.py:1103 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:1087 +#: part/models.py:1106 msgid "BOM item reference" msgstr "" -#: part/models.py:1090 +#: part/models.py:1109 msgid "BOM item notes" msgstr "" -#: part/models.py:1092 +#: part/models.py:1111 msgid "BOM line checksum" msgstr "" -#: part/models.py:1155 +#: part/models.py:1174 msgid "Part cannot be added to its own Bill of Materials" msgstr "" -#: part/models.py:1162 +#: part/models.py:1181 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" @@ -1546,6 +1586,14 @@ msgstr "" msgid "Create New Part" msgstr "" +#: part/templates/part/stock_count.html:7 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 +msgid "Low Stock" +msgstr "" + #: part/templates/part/tabs.html:9 msgid "Parameters" msgstr "" diff --git a/InvenTree/order/forms.py b/InvenTree/order/forms.py index fead5d0496..05cedd9ad3 100644 --- a/InvenTree/order/forms.py +++ b/InvenTree/order/forms.py @@ -11,6 +11,7 @@ from django.utils.translation import ugettext as _ from mptt.fields import TreeNodeChoiceField from InvenTree.forms import HelperForm +from InvenTree.fields import RoundingDecimalFormField from stock.models import StockLocation from .models import PurchaseOrder, PurchaseOrderLineItem, PurchaseOrderAttachment @@ -70,7 +71,6 @@ class EditPurchaseOrderForm(HelperForm): 'supplier', 'description', 'URL', - 'notes' ] @@ -89,6 +89,8 @@ class EditPurchaseOrderAttachmentForm(HelperForm): class EditPurchaseOrderLineItemForm(HelperForm): """ Form for editing a PurchaseOrderLineItem object """ + quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) + class Meta: model = PurchaseOrderLineItem fields = [ diff --git a/InvenTree/order/migrations/0017_auto_20200331_1000.py b/InvenTree/order/migrations/0017_auto_20200331_1000.py new file mode 100644 index 0000000000..d548891aa4 --- /dev/null +++ b/InvenTree/order/migrations/0017_auto_20200331_1000.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.10 on 2020-03-31 10:00 + +import InvenTree.fields +import django.core.validators +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0016_purchaseorderattachment'), + ] + + operations = [ + migrations.AlterField( + model_name='purchaseorderlineitem', + name='quantity', + field=InvenTree.fields.RoundingDecimalField(decimal_places=5, default=1, help_text='Item quantity', max_digits=15, validators=[django.core.validators.MinValueValidator(0)]), + ), + ] diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index f14065973e..88f1a8d188 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -20,6 +20,7 @@ from datetime import datetime from stock.models import StockItem from company.models import Company, SupplierPart +from InvenTree.fields import RoundingDecimalField from InvenTree.helpers import decimal2string from InvenTree.status_codes import OrderStatus from InvenTree.models import InvenTreeAttachment @@ -264,7 +265,7 @@ class OrderLineItem(models.Model): class Meta: abstract = True - quantity = models.DecimalField(max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], default=1, help_text=_('Item quantity')) + quantity = RoundingDecimalField(max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], default=1, help_text=_('Item quantity')) reference = models.CharField(max_length=100, blank=True, help_text=_('Line item reference')) diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index c25def7054..d0e65e8f22 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -1,18 +1,21 @@ {% extends "modal_form.html" %} +{% load inventree_extras %} +{% load i18n %} + {% block form %}

- Step 1 of 2 - Select Part Suppliers + {% trans "Step 1 of 2 - Select Part Suppliers" %}

{% if parts|length > 0 %} {% else %} {% endif %} @@ -24,9 +27,9 @@ - - - + + + {% for part in parts %} @@ -51,14 +54,14 @@ {% if not part.order_supplier %} - Select a supplier for {{ part.name }} + {% trans "Select a supplier for" %} {{ part.name }} {% endif %} diff --git a/InvenTree/order/templates/order/order_wizard/select_pos.html b/InvenTree/order/templates/order/order_wizard/select_pos.html index 4988530419..bd6c30f71b 100644 --- a/InvenTree/order/templates/order/order_wizard/select_pos.html +++ b/InvenTree/order/templates/order/order_wizard/select_pos.html @@ -1,13 +1,15 @@ {% extends "modal_form.html" %} +{% load i18n %} + {% block form %}

- Step 2 of 2 - Select Purchase Orders + {% trans "Step 2 of 2 - Select Purchase Orders" %}

@@ -25,9 +27,9 @@
PartSelect SupplierQuantity{% trans "Part" %}{% trans "Select Supplier" %}{% trans "Quantity" %}
- +
- - - + + + {% for supplier in suppliers %} @@ -62,7 +64,7 @@ {% if not supplier.selected_purchase_order %} - Select a purchase order for {{ supplier.name }} + {% trans "Select a purchase order for" %} {{ supplier.name }} {% endif %}
SupplierItemsSelect Purchase Order{% trans "Supplier" %}{% trans "Items" %}{% trans "Select Purchase Order" %}