diff --git a/InvenTree/locale/de/LC_MESSAGES/django.mo b/InvenTree/locale/de/LC_MESSAGES/django.mo index 198b1d532c..2467501abb 100644 Binary files a/InvenTree/locale/de/LC_MESSAGES/django.mo and b/InvenTree/locale/de/LC_MESSAGES/django.mo differ diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index e41a24b0b6..0bf8f61634 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -7,41 +7,41 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-12-09 11:16+0000\n" +"POT-Creation-Date: 2020-01-05 22:23+0000\n" "PO-Revision-Date: 2019-12-19 17:48+0100\n" +"Last-Translator: \n" +"Language-Team: \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Last-Translator: \n" -"Language-Team: \n" "X-Generator: Poedit 2.2.4\n" -#: InvenTree/helpers.py:175 order/models.py:159 order/models.py:210 +#: InvenTree/helpers.py:186 order/models.py:159 order/models.py:210 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" -#: InvenTree/helpers.py:178 +#: InvenTree/helpers.py:189 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:199 InvenTree/helpers.py:216 +#: InvenTree/helpers.py:210 InvenTree/helpers.py:227 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Doppelte Seriennummer: {n}" -#: InvenTree/helpers.py:203 InvenTree/helpers.py:206 InvenTree/helpers.py:209 -#: InvenTree/helpers.py:220 +#: InvenTree/helpers.py:214 InvenTree/helpers.py:217 InvenTree/helpers.py:220 +#: InvenTree/helpers.py:231 #, python-brace-format msgid "Invalid group: {g}" msgstr "Ungültige Gruppe: {g}" -#: InvenTree/helpers.py:226 +#: InvenTree/helpers.py:237 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:230 +#: InvenTree/helpers.py:241 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -188,8 +188,7 @@ msgstr "Ausgewähltes Lagerobjekt nicht in BOM für Teil '{p}' gefunden" #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -"zugewiesene Anzahl ({n}) darf nicht die verfügbare ({q}) Anzahl " -"überschreiten" +"zugewiesene Anzahl ({n}) darf nicht die verfügbare ({q}) Anzahl überschreiten" #: build/models.py:401 msgid "Build to allocate parts" @@ -263,8 +262,8 @@ msgstr "Die folgende Seriennummer existiert bereits: ({sn})" #: common/models.py:65 msgid "Settings key (must be unique - case insensitive" msgstr "" -"Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung " -"wird nicht beachtet)" +"Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird " +"nicht beachtet)" #: common/models.py:67 msgid "Settings value" @@ -417,7 +416,7 @@ msgstr "Referenz" #: order/templates/order/purchase_order_detail.html:111 #: stock/templates/stock/item.html:89 -#: stock/templates/stock/stock_adjust.html:20 +#: stock/templates/stock/stock_adjust.html:18 msgid "Quantity" msgstr "Anzahl" @@ -430,24 +429,42 @@ msgstr "Notiz" msgid "Notes" msgstr "Notizen" -#: order/views.py:140 +#: order/views.py:141 msgid "Confirm order cancellation" msgstr "Bestell-Stornierung bestätigen" -#: order/views.py:173 +#: order/views.py:174 msgid "Confirm order placement" msgstr "Bestellungstätigung bestätigen" -#: order/views.py:731 +#: order/views.py:328 +#, fuzzy +#| msgid "Number of items received" +msgid "Items received" +msgstr "Empfangene Objekt-Anzahl" + +#: order/views.py:342 +msgid "No destination set" +msgstr "" + +#: order/views.py:373 +msgid "Error converting quantity to number" +msgstr "" + +#: order/views.py:379 +msgid "Receive quantity less than zero" +msgstr "" + +#: order/views.py:740 msgid "Invalid Purchase Order" msgstr "Ungültige Bestellung" -#: order/views.py:739 +#: order/views.py:748 #, fuzzy msgid "Supplier must match for Part and Order" msgstr "Zulieferer muss zum Teil und zur Bestellung passen" -#: order/views.py:744 +#: order/views.py:753 msgid "Invalid SupplierPart selection" msgstr "Ungültige Wahl des Zulieferer-Teils" @@ -479,8 +496,8 @@ msgstr "Teilekategorie wählen" #: part/forms.py:81 msgid "Perform 'deep copy' which will duplicate all BOM data for this part" msgstr "" -"Tiefe Kopie ausführen. Dies wird alle Daten der Stückliste für dieses " -"Teil duplizieren" +"Tiefe Kopie ausführen. Dies wird alle Daten der Stückliste für dieses Teil " +"duplizieren" #: part/forms.py:86 msgid "Confirm part creation" @@ -1073,8 +1090,8 @@ msgid "" "This stock item is serialized - it has a unique serial number and the " "quantity cannot be adjusted." msgstr "" -"Dieses Lagerobjekt ist serialisiert. Es hat eine eindeutige Seriennummer " -"und die Anzahl kann nicht angepasst werden." +"Dieses Lagerobjekt ist serialisiert. Es hat eine eindeutige Seriennummer und " +"die Anzahl kann nicht angepasst werden." #: stock/templates/stock/item.html:56 msgid "" @@ -1088,7 +1105,7 @@ msgid "Belongs To" msgstr "Gehört zu" #: stock/templates/stock/item.html:78 -#: stock/templates/stock/stock_adjust.html:16 +#: stock/templates/stock/stock_adjust.html:17 msgid "Location" msgstr "Standort" @@ -1153,7 +1170,7 @@ msgstr "Objekt-Details" msgid "Stock Locations" msgstr "Lagerobjekt-Standorte" -#: stock/templates/stock/stock_adjust.html:15 +#: stock/templates/stock/stock_adjust.html:16 msgid "Stock Item" msgstr "Lagerobjekt" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index 7ed7357117..5266643986 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: 2019-12-09 11:16+0000\n" +"POT-Creation-Date: 2020-01-05 22:23+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,30 +18,30 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/helpers.py:175 order/models.py:159 order/models.py:210 +#: InvenTree/helpers.py:186 order/models.py:159 order/models.py:210 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:178 +#: InvenTree/helpers.py:189 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:199 InvenTree/helpers.py:216 +#: InvenTree/helpers.py:210 InvenTree/helpers.py:227 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:203 InvenTree/helpers.py:206 InvenTree/helpers.py:209 -#: InvenTree/helpers.py:220 +#: InvenTree/helpers.py:214 InvenTree/helpers.py:217 InvenTree/helpers.py:220 +#: InvenTree/helpers.py:231 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:226 +#: InvenTree/helpers.py:237 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:230 +#: InvenTree/helpers.py:241 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -407,7 +407,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:111 #: stock/templates/stock/item.html:89 -#: stock/templates/stock/stock_adjust.html:20 +#: stock/templates/stock/stock_adjust.html:18 msgid "Quantity" msgstr "" @@ -420,23 +420,39 @@ msgstr "" msgid "Notes" msgstr "" -#: order/views.py:140 +#: order/views.py:141 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:173 +#: order/views.py:174 msgid "Confirm order placement" msgstr "" -#: order/views.py:731 +#: order/views.py:328 +msgid "Items received" +msgstr "" + +#: order/views.py:342 +msgid "No destination set" +msgstr "" + +#: order/views.py:373 +msgid "Error converting quantity to number" +msgstr "" + +#: order/views.py:379 +msgid "Receive quantity less than zero" +msgstr "" + +#: order/views.py:740 msgid "Invalid Purchase Order" msgstr "" -#: order/views.py:739 +#: order/views.py:748 msgid "Supplier must match for Part and Order" msgstr "" -#: order/views.py:744 +#: order/views.py:753 msgid "Invalid SupplierPart selection" msgstr "" @@ -1065,7 +1081,7 @@ msgid "Belongs To" msgstr "" #: stock/templates/stock/item.html:78 -#: stock/templates/stock/stock_adjust.html:16 +#: stock/templates/stock/stock_adjust.html:17 msgid "Location" msgstr "" @@ -1130,7 +1146,7 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/templates/stock/stock_adjust.html:15 +#: stock/templates/stock/stock_adjust.html:16 msgid "Stock Item" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index 7ed7357117..5266643986 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: 2019-12-09 11:16+0000\n" +"POT-Creation-Date: 2020-01-05 22:23+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,30 +18,30 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/helpers.py:175 order/models.py:159 order/models.py:210 +#: InvenTree/helpers.py:186 order/models.py:159 order/models.py:210 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:178 +#: InvenTree/helpers.py:189 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:199 InvenTree/helpers.py:216 +#: InvenTree/helpers.py:210 InvenTree/helpers.py:227 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:203 InvenTree/helpers.py:206 InvenTree/helpers.py:209 -#: InvenTree/helpers.py:220 +#: InvenTree/helpers.py:214 InvenTree/helpers.py:217 InvenTree/helpers.py:220 +#: InvenTree/helpers.py:231 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:226 +#: InvenTree/helpers.py:237 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:230 +#: InvenTree/helpers.py:241 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -407,7 +407,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:111 #: stock/templates/stock/item.html:89 -#: stock/templates/stock/stock_adjust.html:20 +#: stock/templates/stock/stock_adjust.html:18 msgid "Quantity" msgstr "" @@ -420,23 +420,39 @@ msgstr "" msgid "Notes" msgstr "" -#: order/views.py:140 +#: order/views.py:141 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:173 +#: order/views.py:174 msgid "Confirm order placement" msgstr "" -#: order/views.py:731 +#: order/views.py:328 +msgid "Items received" +msgstr "" + +#: order/views.py:342 +msgid "No destination set" +msgstr "" + +#: order/views.py:373 +msgid "Error converting quantity to number" +msgstr "" + +#: order/views.py:379 +msgid "Receive quantity less than zero" +msgstr "" + +#: order/views.py:740 msgid "Invalid Purchase Order" msgstr "" -#: order/views.py:739 +#: order/views.py:748 msgid "Supplier must match for Part and Order" msgstr "" -#: order/views.py:744 +#: order/views.py:753 msgid "Invalid SupplierPart selection" msgstr "" @@ -1065,7 +1081,7 @@ msgid "Belongs To" msgstr "" #: stock/templates/stock/item.html:78 -#: stock/templates/stock/stock_adjust.html:16 +#: stock/templates/stock/stock_adjust.html:17 msgid "Location" msgstr "" @@ -1130,7 +1146,7 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/templates/stock/stock_adjust.html:15 +#: stock/templates/stock/stock_adjust.html:16 msgid "Stock Item" msgstr "" diff --git a/InvenTree/order/views.py b/InvenTree/order/views.py index 8e3f32f907..b4cde63e18 100644 --- a/InvenTree/order/views.py +++ b/InvenTree/order/views.py @@ -12,6 +12,7 @@ from django.views.generic import DetailView, ListView from django.forms import HiddenInput import logging +from decimal import Decimal, InvalidOperation from .models import PurchaseOrder, PurchaseOrderLineItem from .admin import POLineItemResource @@ -324,6 +325,8 @@ class PurchaseOrderReceive(AjaxUpdateView): self.lines = [] self.destination = None + msg = _("Items received") + # Extract the destination for received parts if 'location' in request.POST: pk = request.POST['location'] @@ -332,7 +335,11 @@ class PurchaseOrderReceive(AjaxUpdateView): except (StockLocation.DoesNotExist, ValueError): pass - errors = self.destination is None + errors = False + + if self.destination is None: + errors = True + msg = _("No destination set") # Extract information on all submitted line items for item in request.POST: @@ -359,15 +366,17 @@ class PurchaseOrderReceive(AjaxUpdateView): receive = self.request.POST[item] try: - receive = int(receive) - except ValueError: + receive = Decimal(receive) + except InvalidOperation: # In the case on an invalid input, reset to default receive = line.remaining() + msg = _("Error converting quantity to number") errors = True if receive < 0: receive = 0 errors = True + msg = _("Receive quantity less than zero") line.receive_quantity = receive self.lines.append(line) @@ -378,7 +387,7 @@ class PurchaseOrderReceive(AjaxUpdateView): data = { 'form_valid': errors is False, - 'success': 'Items marked as received', + 'success': msg, } return self.renderJsonResponse(request, data=data, form=self.get_form()) diff --git a/InvenTree/stock/templates/stock/stock_adjust.html b/InvenTree/stock/templates/stock/stock_adjust.html index 70463d14c1..ac9fbce58d 100644 --- a/InvenTree/stock/templates/stock/stock_adjust.html +++ b/InvenTree/stock/templates/stock/stock_adjust.html @@ -1,4 +1,5 @@ {% load i18n %} +{% load inventree_extras %} {% block pre_form_content %} @@ -14,10 +15,9 @@ {% trans "Stock Item" %} {% trans "Location" %} + {% trans "Quantity" %} {% if edit_quantity %} {{ stock_action_title }} - {% else %} - {% trans "Quantity" %} {% endif %} @@ -26,6 +26,7 @@ {% include "hover_image.html" with image=item.part.image hover=True %} {{ item.part.full_name }} {{ item.part.description }} {{ item.location.pathstring }} + {% decimal item.quantity %} {% if edit_quantity %} {{ item.error }} {% endif %} {% else %} - {{ item.new_quantity }} {% endif %}