mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 20:16:44 +00:00
Merge pull request #642 from SchrodingersGat/rounding-fixes
Rounding fixes
This commit is contained in:
commit
34c3320cd5
@ -1,5 +1,6 @@
|
|||||||
function updateAllocationTotal(id, count, required) {
|
function updateAllocationTotal(id, count, required) {
|
||||||
|
|
||||||
|
count = parseFloat(count);
|
||||||
|
|
||||||
$('#allocation-total-'+id).html(count);
|
$('#allocation-total-'+id).html(count);
|
||||||
|
|
||||||
@ -27,21 +28,24 @@ function loadAllocationTable(table, part_id, part, url, required, button) {
|
|||||||
field: 'stock_item_detail',
|
field: 'stock_item_detail',
|
||||||
title: 'Stock Item',
|
title: 'Stock Item',
|
||||||
formatter: function(value, row, index, field) {
|
formatter: function(value, row, index, field) {
|
||||||
return '' + value.quantity + ' x ' + value.part_name + ' @ ' + value.location_name;
|
return '' + parseFloat(value.quantity) + ' x ' + value.part_name + ' @ ' + value.location_name;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'stock_item_detail.quantity',
|
field: 'stock_item_detail.quantity',
|
||||||
title: 'Available',
|
title: 'Available',
|
||||||
|
formatter: function(value, row, index, field) {
|
||||||
|
return parseFloat(value);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'quantity',
|
field: 'quantity',
|
||||||
title: 'Allocated',
|
title: 'Allocated',
|
||||||
formatter: function(value, row, index, field) {
|
formatter: function(value, row, index, field) {
|
||||||
var html = value;
|
var html = parseFloat(value);
|
||||||
|
|
||||||
var bEdit = "<button class='btn btn-primary item-edit-button btn-sm' type='button' title='Edit stock allocation' url='/build/item/" + row.pk + "/edit/'><span class='glyphicon glyphicon-small glyphicon-edit'></span></button>";
|
var bEdit = "<button class='btn item-edit-button btn-sm' type='button' title='Edit stock allocation' url='/build/item/" + row.pk + "/edit/'><span class='glyphicon glyphicon-small glyphicon-edit'></span></button>";
|
||||||
var bDel = "<button class='btn btn-danger item-del-button btn-sm' type='button' title='Delete stock allocation' url='/build/item/" + row.pk + "/delete/'><span class='glyphicon glyphicon-small glyphicon-trash'></span></button>";
|
var bDel = "<button class='btn item-del-button btn-sm' type='button' title='Delete stock allocation' url='/build/item/" + row.pk + "/delete/'><span class='glyphicon glyphicon-small glyphicon-trash'></span></button>";
|
||||||
|
|
||||||
html += "<div class='btn-group' style='float: right;'>" + bEdit + bDel + "</div>";
|
html += "<div class='btn-group' style='float: right;'>" + bEdit + bDel + "</div>";
|
||||||
|
|
||||||
|
@ -385,6 +385,9 @@ function loadStockTrackingTable(table, options) {
|
|||||||
cols.push({
|
cols.push({
|
||||||
field: 'quantity',
|
field: 'quantity',
|
||||||
title: 'Quantity',
|
title: 'Quantity',
|
||||||
|
formatter: function(value, row, index, field) {
|
||||||
|
return parseFloat(value);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
cols.push({
|
cols.push({
|
||||||
|
@ -20,6 +20,7 @@ from markdownx.models import MarkdownxField
|
|||||||
|
|
||||||
from InvenTree.status_codes import BuildStatus
|
from InvenTree.status_codes import BuildStatus
|
||||||
from InvenTree.fields import InvenTreeURLField
|
from InvenTree.fields import InvenTreeURLField
|
||||||
|
from InvenTree.helpers import decimal2string
|
||||||
|
|
||||||
from stock.models import StockItem
|
from stock.models import StockItem
|
||||||
from part.models import Part, BomItem
|
from part.models import Part, BomItem
|
||||||
@ -42,7 +43,7 @@ class Build(models.Model):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "Build {q} x {part}".format(q=self.quantity, part=str(self.part))
|
return "Build {q} x {part}".format(q=decimal2string(self.quantity), part=str(self.part))
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse('build-detail', kwargs={'pk': self.id})
|
return reverse('build-detail', kwargs={'pk': self.id})
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
{% block collapse_heading %}
|
{% block collapse_heading %}
|
||||||
<div class='col-sm-2'>
|
<div class='col-sm-2'>
|
||||||
<b>{{ item.sub_part.total_stock }}</b>
|
<b>{% decimal item.sub_part.total_stock %}</b>
|
||||||
</div>
|
</div>
|
||||||
<div class='col-sm-2'>
|
<div class='col-sm-2'>
|
||||||
<b>{% multiply build.quantity item.quantity %}</b>
|
<b>{% multiply build.quantity item.quantity %}</b>
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
{% extends "modal_delete_form.html" %}
|
{% extends "modal_delete_form.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load inventree_extras %}
|
||||||
|
|
||||||
{% block pre_form_content %}
|
{% block pre_form_content %}
|
||||||
Are you sure you want to unallocate these parts?
|
{% trans "Are you sure you want to unallocate these parts?" %}
|
||||||
<br>
|
<br>
|
||||||
This will remove {{ item.quantity }} parts from build '{{ item.build.title }}'.
|
This will remove {% decimal item.quantity %} parts from build '{{ item.build.title }}'.
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -1,9 +1,10 @@
|
|||||||
{% extends "modal_form.html" %}
|
{% extends "modal_form.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load inventree_extras %}
|
||||||
{% block pre_form_content %}
|
{% block pre_form_content %}
|
||||||
|
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
|
|
||||||
Are you sure you wish to unallocate all stock for this build?
|
{% trans "Are you sure you wish to unallocate all stock for this build?" %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -53,7 +53,7 @@ class BuildCancel(AjaxUpdateView):
|
|||||||
|
|
||||||
model = Build
|
model = Build
|
||||||
ajax_template_name = 'build/cancel.html'
|
ajax_template_name = 'build/cancel.html'
|
||||||
ajax_form_title = 'Cancel Build'
|
ajax_form_title = _('Cancel Build')
|
||||||
context_object_name = 'build'
|
context_object_name = 'build'
|
||||||
form_class = forms.CancelBuildForm
|
form_class = forms.CancelBuildForm
|
||||||
|
|
||||||
@ -71,12 +71,12 @@ class BuildCancel(AjaxUpdateView):
|
|||||||
if confirm:
|
if confirm:
|
||||||
build.cancelBuild(request.user)
|
build.cancelBuild(request.user)
|
||||||
else:
|
else:
|
||||||
form.errors['confirm_cancel'] = ['Confirm build cancellation']
|
form.errors['confirm_cancel'] = [_('Confirm build cancellation')]
|
||||||
valid = False
|
valid = False
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'form_valid': valid,
|
'form_valid': valid,
|
||||||
'danger': 'Build was cancelled'
|
'danger': _('Build was cancelled')
|
||||||
}
|
}
|
||||||
|
|
||||||
return self.renderJsonResponse(request, form, data=data)
|
return self.renderJsonResponse(request, form, data=data)
|
||||||
@ -92,7 +92,7 @@ class BuildAutoAllocate(AjaxUpdateView):
|
|||||||
model = Build
|
model = Build
|
||||||
form_class = forms.ConfirmBuildForm
|
form_class = forms.ConfirmBuildForm
|
||||||
context_object_name = 'build'
|
context_object_name = 'build'
|
||||||
ajax_form_title = 'Allocate Stock'
|
ajax_form_title = _('Allocate Stock')
|
||||||
ajax_template_name = 'build/auto_allocate.html'
|
ajax_template_name = 'build/auto_allocate.html'
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
@ -105,7 +105,7 @@ class BuildAutoAllocate(AjaxUpdateView):
|
|||||||
context['build'] = build
|
context['build'] = build
|
||||||
context['allocations'] = build.getAutoAllocations()
|
context['allocations'] = build.getAutoAllocations()
|
||||||
except Build.DoesNotExist:
|
except Build.DoesNotExist:
|
||||||
context['error'] = 'No matching build found'
|
context['error'] = _('No matching build found')
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
@ -124,8 +124,8 @@ class BuildAutoAllocate(AjaxUpdateView):
|
|||||||
valid = False
|
valid = False
|
||||||
|
|
||||||
if confirm is False:
|
if confirm is False:
|
||||||
form.errors['confirm'] = ['Confirm stock allocation']
|
form.errors['confirm'] = [_('Confirm stock allocation')]
|
||||||
form.non_field_errors = 'Check the confirmation box at the bottom of the list'
|
form.non_field_errors = _('Check the confirmation box at the bottom of the list')
|
||||||
else:
|
else:
|
||||||
build.autoAllocate()
|
build.autoAllocate()
|
||||||
valid = True
|
valid = True
|
||||||
@ -145,7 +145,7 @@ class BuildUnallocate(AjaxUpdateView):
|
|||||||
|
|
||||||
model = Build
|
model = Build
|
||||||
form_class = forms.ConfirmBuildForm
|
form_class = forms.ConfirmBuildForm
|
||||||
ajax_form_title = "Unallocate Stock"
|
ajax_form_title = _("Unallocate Stock")
|
||||||
ajax_template_name = "build/unallocate.html"
|
ajax_template_name = "build/unallocate.html"
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
@ -158,8 +158,8 @@ class BuildUnallocate(AjaxUpdateView):
|
|||||||
valid = False
|
valid = False
|
||||||
|
|
||||||
if confirm is False:
|
if confirm is False:
|
||||||
form.errors['confirm'] = ['Confirm unallocation of build stock']
|
form.errors['confirm'] = [_('Confirm unallocation of build stock')]
|
||||||
form.non_field_errors = 'Check the confirmation box'
|
form.non_field_errors = _('Check the confirmation box')
|
||||||
else:
|
else:
|
||||||
build.unallocateStock()
|
build.unallocateStock()
|
||||||
valid = True
|
valid = True
|
||||||
@ -182,7 +182,7 @@ class BuildComplete(AjaxUpdateView):
|
|||||||
model = Build
|
model = Build
|
||||||
form_class = forms.CompleteBuildForm
|
form_class = forms.CompleteBuildForm
|
||||||
context_object_name = "build"
|
context_object_name = "build"
|
||||||
ajax_form_title = "Complete Build"
|
ajax_form_title = _("Complete Build")
|
||||||
ajax_template_name = "build/complete.html"
|
ajax_template_name = "build/complete.html"
|
||||||
|
|
||||||
def get_form(self):
|
def get_form(self):
|
||||||
@ -255,14 +255,14 @@ class BuildComplete(AjaxUpdateView):
|
|||||||
|
|
||||||
if confirm is False:
|
if confirm is False:
|
||||||
form.errors['confirm'] = [
|
form.errors['confirm'] = [
|
||||||
'Confirm completion of build',
|
_('Confirm completion of build'),
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
location = StockLocation.objects.get(id=loc_id)
|
location = StockLocation.objects.get(id=loc_id)
|
||||||
valid = True
|
valid = True
|
||||||
except StockLocation.DoesNotExist:
|
except StockLocation.DoesNotExist:
|
||||||
form.errors['location'] = ['Invalid location selected']
|
form.errors['location'] = [_('Invalid location selected')]
|
||||||
|
|
||||||
serials = []
|
serials = []
|
||||||
|
|
||||||
@ -306,7 +306,7 @@ class BuildComplete(AjaxUpdateView):
|
|||||||
def get_data(self):
|
def get_data(self):
|
||||||
""" Provide feedback data back to the form """
|
""" Provide feedback data back to the form """
|
||||||
return {
|
return {
|
||||||
'info': 'Build marked as COMPLETE'
|
'info': _('Build marked as COMPLETE')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -382,7 +382,7 @@ class BuildCreate(AjaxCreateView):
|
|||||||
model = Build
|
model = Build
|
||||||
context_object_name = 'build'
|
context_object_name = 'build'
|
||||||
form_class = forms.EditBuildForm
|
form_class = forms.EditBuildForm
|
||||||
ajax_form_title = 'Start new Build'
|
ajax_form_title = _('Start new Build')
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
@ -405,7 +405,7 @@ class BuildCreate(AjaxCreateView):
|
|||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'success': 'Created new build',
|
'success': _('Created new build'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -415,12 +415,12 @@ class BuildUpdate(AjaxUpdateView):
|
|||||||
model = Build
|
model = Build
|
||||||
form_class = forms.EditBuildForm
|
form_class = forms.EditBuildForm
|
||||||
context_object_name = 'build'
|
context_object_name = 'build'
|
||||||
ajax_form_title = 'Edit Build Details'
|
ajax_form_title = _('Edit Build Details')
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'info': 'Edited build',
|
'info': _('Edited build'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -429,7 +429,7 @@ class BuildDelete(AjaxDeleteView):
|
|||||||
|
|
||||||
model = Build
|
model = Build
|
||||||
ajax_template_name = 'build/delete_build.html'
|
ajax_template_name = 'build/delete_build.html'
|
||||||
ajax_form_title = 'Delete Build'
|
ajax_form_title = _('Delete Build')
|
||||||
|
|
||||||
|
|
||||||
class BuildItemDelete(AjaxDeleteView):
|
class BuildItemDelete(AjaxDeleteView):
|
||||||
@ -439,12 +439,12 @@ class BuildItemDelete(AjaxDeleteView):
|
|||||||
|
|
||||||
model = BuildItem
|
model = BuildItem
|
||||||
ajax_template_name = 'build/delete_build_item.html'
|
ajax_template_name = 'build/delete_build_item.html'
|
||||||
ajax_form_title = 'Unallocate Stock'
|
ajax_form_title = _('Unallocate Stock')
|
||||||
context_object_name = 'item'
|
context_object_name = 'item'
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'danger': 'Removed parts from build allocation'
|
'danger': _('Removed parts from build allocation')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -454,7 +454,7 @@ class BuildItemCreate(AjaxCreateView):
|
|||||||
model = BuildItem
|
model = BuildItem
|
||||||
form_class = forms.EditBuildItemForm
|
form_class = forms.EditBuildItemForm
|
||||||
ajax_template_name = 'build/create_build_item.html'
|
ajax_template_name = 'build/create_build_item.html'
|
||||||
ajax_form_title = 'Allocate new Part'
|
ajax_form_title = _('Allocate new Part')
|
||||||
|
|
||||||
part = None
|
part = None
|
||||||
available_stock = None
|
available_stock = None
|
||||||
@ -570,11 +570,11 @@ class BuildItemEdit(AjaxUpdateView):
|
|||||||
model = BuildItem
|
model = BuildItem
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
form_class = forms.EditBuildItemForm
|
form_class = forms.EditBuildItemForm
|
||||||
ajax_form_title = 'Edit Stock Allocation'
|
ajax_form_title = _('Edit Stock Allocation')
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'info': 'Updated Build Item',
|
'info': _('Updated Build Item'),
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_form(self):
|
def get_form(self):
|
||||||
|
@ -5,6 +5,8 @@ Django views for interacting with common models
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from InvenTree.views import AjaxCreateView, AjaxUpdateView, AjaxDeleteView
|
from InvenTree.views import AjaxCreateView, AjaxUpdateView, AjaxDeleteView
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
@ -16,7 +18,7 @@ class CurrencyCreate(AjaxCreateView):
|
|||||||
|
|
||||||
model = models.Currency
|
model = models.Currency
|
||||||
form_class = forms.CurrencyEditForm
|
form_class = forms.CurrencyEditForm
|
||||||
ajax_form_title = 'Create new Currency'
|
ajax_form_title = _('Create new Currency')
|
||||||
|
|
||||||
|
|
||||||
class CurrencyEdit(AjaxUpdateView):
|
class CurrencyEdit(AjaxUpdateView):
|
||||||
@ -24,12 +26,12 @@ class CurrencyEdit(AjaxUpdateView):
|
|||||||
|
|
||||||
model = models.Currency
|
model = models.Currency
|
||||||
form_class = forms.CurrencyEditForm
|
form_class = forms.CurrencyEditForm
|
||||||
ajax_form_title = 'Edit Currency'
|
ajax_form_title = _('Edit Currency')
|
||||||
|
|
||||||
|
|
||||||
class CurrencyDelete(AjaxDeleteView):
|
class CurrencyDelete(AjaxDeleteView):
|
||||||
""" View for deleting an existing Currency object """
|
""" View for deleting an existing Currency object """
|
||||||
|
|
||||||
model = models.Currency
|
model = models.Currency
|
||||||
ajax_form_title = 'Delete Currency'
|
ajax_form_title = _('Delete Currency')
|
||||||
ajax_template_name = "common/delete_currency.html"
|
ajax_template_name = "common/delete_currency.html"
|
||||||
|
@ -6,6 +6,7 @@ Django views for interacting with Company app
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.utils.translation import ugettext as _
|
||||||
from django.views.generic import DetailView, ListView, UpdateView
|
from django.views.generic import DetailView, ListView, UpdateView
|
||||||
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@ -93,12 +94,12 @@ class CompanyImage(AjaxUpdateView):
|
|||||||
""" View for uploading an image for the Company """
|
""" View for uploading an image for the Company """
|
||||||
model = Company
|
model = Company
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
ajax_form_title = 'Update Company Image'
|
ajax_form_title = _('Update Company Image')
|
||||||
form_class = CompanyImageForm
|
form_class = CompanyImageForm
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'success': 'Updated company image',
|
'success': _('Updated company image'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -108,11 +109,11 @@ class CompanyEdit(AjaxUpdateView):
|
|||||||
form_class = EditCompanyForm
|
form_class = EditCompanyForm
|
||||||
context_object_name = 'company'
|
context_object_name = 'company'
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
ajax_form_title = 'Edit Company'
|
ajax_form_title = _('Edit Company')
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'info': 'Edited company information',
|
'info': _('Edited company information'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -122,11 +123,11 @@ class CompanyCreate(AjaxCreateView):
|
|||||||
context_object_name = 'company'
|
context_object_name = 'company'
|
||||||
form_class = EditCompanyForm
|
form_class = EditCompanyForm
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
ajax_form_title = "Create new Company"
|
ajax_form_title = _("Create new Company")
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'success': "Created new company",
|
'success': _("Created new company"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -136,12 +137,12 @@ class CompanyDelete(AjaxDeleteView):
|
|||||||
model = Company
|
model = Company
|
||||||
success_url = '/company/'
|
success_url = '/company/'
|
||||||
ajax_template_name = 'company/delete.html'
|
ajax_template_name = 'company/delete.html'
|
||||||
ajax_form_title = 'Delete Company'
|
ajax_form_title = _('Delete Company')
|
||||||
context_object_name = 'company'
|
context_object_name = 'company'
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'danger': 'Company was deleted',
|
'danger': _('Company was deleted'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -166,7 +167,7 @@ class SupplierPartEdit(AjaxUpdateView):
|
|||||||
context_object_name = 'part'
|
context_object_name = 'part'
|
||||||
form_class = EditSupplierPartForm
|
form_class = EditSupplierPartForm
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
ajax_form_title = 'Edit Supplier Part'
|
ajax_form_title = _('Edit Supplier Part')
|
||||||
|
|
||||||
|
|
||||||
class SupplierPartCreate(AjaxCreateView):
|
class SupplierPartCreate(AjaxCreateView):
|
||||||
@ -175,7 +176,7 @@ class SupplierPartCreate(AjaxCreateView):
|
|||||||
model = SupplierPart
|
model = SupplierPart
|
||||||
form_class = EditSupplierPartForm
|
form_class = EditSupplierPartForm
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
ajax_form_title = 'Create new Supplier Part'
|
ajax_form_title = _('Create new Supplier Part')
|
||||||
context_object_name = 'part'
|
context_object_name = 'part'
|
||||||
|
|
||||||
def get_form(self):
|
def get_form(self):
|
||||||
@ -232,7 +233,7 @@ class SupplierPartDelete(AjaxDeleteView):
|
|||||||
|
|
||||||
success_url = '/supplier/'
|
success_url = '/supplier/'
|
||||||
ajax_template_name = 'company/partdelete.html'
|
ajax_template_name = 'company/partdelete.html'
|
||||||
ajax_form_title = 'Delete Supplier Part'
|
ajax_form_title = _('Delete Supplier Part')
|
||||||
|
|
||||||
parts = []
|
parts = []
|
||||||
|
|
||||||
@ -302,7 +303,7 @@ class PriceBreakCreate(AjaxCreateView):
|
|||||||
|
|
||||||
model = SupplierPriceBreak
|
model = SupplierPriceBreak
|
||||||
form_class = EditPriceBreakForm
|
form_class = EditPriceBreakForm
|
||||||
ajax_form_title = 'Add Price Break'
|
ajax_form_title = _('Add Price Break')
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
@ -337,7 +338,7 @@ class PriceBreakEdit(AjaxUpdateView):
|
|||||||
|
|
||||||
model = SupplierPriceBreak
|
model = SupplierPriceBreak
|
||||||
form_class = EditPriceBreakForm
|
form_class = EditPriceBreakForm
|
||||||
ajax_form_title = 'Edit Price Break'
|
ajax_form_title = _('Edit Price Break')
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
|
|
||||||
def get_form(self):
|
def get_form(self):
|
||||||
@ -352,5 +353,5 @@ class PriceBreakDelete(AjaxDeleteView):
|
|||||||
""" View for deleting a supplier price break """
|
""" View for deleting a supplier price break """
|
||||||
|
|
||||||
model = SupplierPriceBreak
|
model = SupplierPriceBreak
|
||||||
ajax_form_title = "Delete Price Break"
|
ajax_form_title = _("Delete Price Break")
|
||||||
ajax_template_name = 'modal_delete_form.html'
|
ajax_template_name = 'modal_delete_form.html'
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-02-10 11:09+0000\n"
|
"POT-Creation-Date: 2020-02-11 23:25+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -104,7 +104,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: InvenTree/status_codes.py:92 build/templates/build/allocate_edit.html:28
|
#: InvenTree/status_codes.py:92 build/templates/build/allocate_edit.html:28
|
||||||
#: build/templates/build/allocate_view.html:21
|
#: build/templates/build/allocate_view.html:21
|
||||||
#: part/templates/part/part_base.html:116 part/templates/part/tabs.html:21
|
#: part/templates/part/part_base.html:106 part/templates/part/tabs.html:21
|
||||||
msgid "Allocated"
|
msgid "Allocated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -149,59 +149,59 @@ msgstr ""
|
|||||||
msgid "Confirm build completion"
|
msgid "Confirm build completion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:53
|
#: build/models.py:54
|
||||||
msgid "Brief description of the build"
|
msgid "Brief description of the build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:62
|
#: build/models.py:63
|
||||||
msgid "Select part to build"
|
msgid "Select part to build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:68
|
#: build/models.py:69
|
||||||
msgid ""
|
msgid ""
|
||||||
"Select location to take stock from for this build (leave blank to take from "
|
"Select location to take stock from for this build (leave blank to take from "
|
||||||
"any stock location)"
|
"any stock location)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:74
|
#: build/models.py:75
|
||||||
msgid "Number of parts to build"
|
msgid "Number of parts to build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:80
|
#: build/models.py:81
|
||||||
msgid "Build status"
|
msgid "Build status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:83
|
#: build/models.py:84
|
||||||
msgid "Batch code for this build output"
|
msgid "Batch code for this build output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:95
|
#: build/models.py:96
|
||||||
msgid "Link to external URL"
|
msgid "Link to external URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:97
|
#: build/models.py:98
|
||||||
msgid "Extra build notes"
|
msgid "Extra build notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:382
|
#: build/models.py:383
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Selected stock item not found in BOM for part '{p}'"
|
msgid "Selected stock item not found in BOM for part '{p}'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:385
|
#: build/models.py:386
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
|
msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:403
|
#: build/models.py:404
|
||||||
msgid "Build to allocate parts"
|
msgid "Build to allocate parts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:410
|
#: build/models.py:411
|
||||||
msgid "Stock Item to allocate to build"
|
msgid "Stock Item to allocate to build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:418
|
#: build/models.py:419
|
||||||
msgid "Stock quantity to allocate to build"
|
msgid "Stock quantity to allocate to build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -244,7 +244,7 @@ msgid "Allocate"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/templates/build/allocate_view.html:10
|
#: build/templates/build/allocate_view.html:10
|
||||||
#: company/templates/company/detail_part.html:18
|
#: company/templates/company/detail_part.html:18 order/views.py:448
|
||||||
msgid "Order Parts"
|
msgid "Order Parts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -257,10 +257,14 @@ msgid "Description"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/templates/build/allocate_view.html:22
|
#: build/templates/build/allocate_view.html:22
|
||||||
#: part/templates/part/part_base.html:122
|
#: part/templates/part/part_base.html:112
|
||||||
msgid "On Order"
|
msgid "On Order"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/templates/build/delete_build_item.html:6
|
||||||
|
msgid "Are you sure you want to unallocate these parts?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: build/templates/build/detail.html:8
|
#: build/templates/build/detail.html:8
|
||||||
msgid "Build Details"
|
msgid "Build Details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -298,7 +302,7 @@ msgstr ""
|
|||||||
#: build/templates/build/detail.html:42
|
#: build/templates/build/detail.html:42
|
||||||
#: company/templates/company/detail_part.html:90
|
#: company/templates/company/detail_part.html:90
|
||||||
#: company/templates/company/partdetail.html:54
|
#: company/templates/company/partdetail.html:54
|
||||||
#: part/templates/part/detail.html:50 part/templates/part/part_base.html:91
|
#: part/templates/part/detail.html:50 part/templates/part/part_base.html:81
|
||||||
#: stock/templates/stock/item_base.html:120
|
#: stock/templates/stock/item_base.html:120
|
||||||
msgid "URL"
|
msgid "URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -355,11 +359,107 @@ msgstr ""
|
|||||||
msgid "Assign Parts"
|
msgid "Assign Parts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/templates/build/unallocate.html:8
|
||||||
|
msgid "Are you sure you wish to unallocate all stock for this build?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:56
|
||||||
|
msgid "Cancel Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:74
|
||||||
|
msgid "Confirm build cancellation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:79
|
||||||
|
msgid "Build was cancelled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:95
|
||||||
|
msgid "Allocate Stock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:108
|
||||||
|
msgid "No matching build found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:127
|
||||||
|
msgid "Confirm stock allocation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:128
|
||||||
|
msgid "Check the confirmation box at the bottom of the list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:148 build/views.py:442
|
||||||
|
msgid "Unallocate Stock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:161
|
||||||
|
msgid "Confirm unallocation of build stock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:162
|
||||||
|
msgid "Check the confirmation box"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:185
|
||||||
|
msgid "Complete Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:258
|
||||||
|
msgid "Confirm completion of build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:265
|
||||||
|
msgid "Invalid location selected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: build/views.py:290 stock/views.py:884
|
#: build/views.py:290 stock/views.py:884
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "The following serial numbers already exist: ({sn})"
|
msgid "The following serial numbers already exist: ({sn})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:309
|
||||||
|
msgid "Build marked as COMPLETE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:385
|
||||||
|
msgid "Start new Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:408
|
||||||
|
msgid "Created new build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:418
|
||||||
|
msgid "Edit Build Details"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:423
|
||||||
|
msgid "Edited build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:432
|
||||||
|
msgid "Delete Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:447
|
||||||
|
msgid "Removed parts from build allocation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:457
|
||||||
|
msgid "Allocate new Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:573
|
||||||
|
msgid "Edit Stock Allocation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:577
|
||||||
|
msgid "Updated Build Item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: common/models.py:69
|
#: common/models.py:69
|
||||||
msgid "Settings key (must be unique - case insensitive"
|
msgid "Settings key (must be unique - case insensitive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -396,6 +496,18 @@ msgstr ""
|
|||||||
msgid "Use this currency as the base currency"
|
msgid "Use this currency as the base currency"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/views.py:21
|
||||||
|
msgid "Create new Currency"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/views.py:29
|
||||||
|
msgid "Edit Currency"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/views.py:36
|
||||||
|
msgid "Delete Currency"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: company/models.py:74
|
#: company/models.py:74
|
||||||
msgid "Company name"
|
msgid "Company name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -643,6 +755,62 @@ msgstr ""
|
|||||||
msgid "Sales Orders"
|
msgid "Sales Orders"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:97
|
||||||
|
msgid "Update Company Image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:102
|
||||||
|
msgid "Updated company image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:112
|
||||||
|
msgid "Edit Company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:116
|
||||||
|
msgid "Edited company information"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:126
|
||||||
|
msgid "Create new Company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:130
|
||||||
|
msgid "Created new company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:140
|
||||||
|
msgid "Delete Company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:145
|
||||||
|
msgid "Company was deleted"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:170
|
||||||
|
msgid "Edit Supplier Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:179
|
||||||
|
msgid "Create new Supplier Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:236
|
||||||
|
msgid "Delete Supplier Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:306
|
||||||
|
msgid "Add Price Break"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:341
|
||||||
|
msgid "Edit Price Break"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:356
|
||||||
|
msgid "Delete Price Break"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: order/forms.py:21
|
#: order/forms.py:21
|
||||||
msgid "Place order"
|
msgid "Place order"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -675,7 +843,7 @@ msgstr ""
|
|||||||
msgid "Order notes"
|
msgid "Order notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: order/models.py:159 order/models.py:210 part/views.py:1080
|
#: order/models.py:159 order/models.py:210 part/views.py:1109
|
||||||
#: stock/models.py:440
|
#: stock/models.py:440
|
||||||
msgid "Quantity must be greater than zero"
|
msgid "Quantity must be greater than zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -730,7 +898,7 @@ msgstr ""
|
|||||||
msgid "Order Notes"
|
msgid "Order Notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: order/templates/order/purchase_order_detail.html:15
|
#: order/templates/order/purchase_order_detail.html:15 order/views.py:747
|
||||||
msgid "Add Line Item"
|
msgid "Add Line Item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -754,14 +922,38 @@ msgstr ""
|
|||||||
msgid "Items"
|
msgid "Items"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:99
|
||||||
|
msgid "Create Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:129
|
||||||
|
msgid "Edit Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:149
|
||||||
|
msgid "Cancel Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: order/views.py:164
|
#: order/views.py:164
|
||||||
msgid "Confirm order cancellation"
|
msgid "Confirm order cancellation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:182
|
||||||
|
msgid "Issue Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: order/views.py:197
|
#: order/views.py:197
|
||||||
msgid "Confirm order placement"
|
msgid "Confirm order placement"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:218
|
||||||
|
msgid "Complete Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:284
|
||||||
|
msgid "Receive Parts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: order/views.py:351
|
#: order/views.py:351
|
||||||
msgid "Items received"
|
msgid "Items received"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -794,220 +986,248 @@ msgstr ""
|
|||||||
msgid "Invalid SupplierPart selection"
|
msgid "Invalid SupplierPart selection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/bom.py:107
|
#: order/views.py:862
|
||||||
|
msgid "Edit Line Item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:878
|
||||||
|
msgid "Delete Line Item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:883
|
||||||
|
msgid "Deleted line item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:140
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Unsupported file format: {f}"
|
msgid "Unsupported file format: {f}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/bom.py:112
|
#: part/bom.py:145
|
||||||
msgid "Error reading BOM file (invalid data)"
|
msgid "Error reading BOM file (invalid data)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/bom.py:114
|
#: part/bom.py:147
|
||||||
msgid "Error reading BOM file (incorrect row size)"
|
msgid "Error reading BOM file (incorrect row size)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:37
|
#: part/forms.py:37 stock/forms.py:91
|
||||||
|
msgid "File Format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:37 stock/forms.py:91
|
||||||
|
msgid "Select output file format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:39
|
||||||
|
msgid "Cascading"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:39
|
||||||
|
msgid "Download cascading / multi-level BOM"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:58
|
||||||
msgid "Confirm that the BOM is correct"
|
msgid "Confirm that the BOM is correct"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:49
|
#: part/forms.py:70
|
||||||
msgid "Select BOM file to upload"
|
msgid "Select BOM file to upload"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:73
|
#: part/forms.py:94
|
||||||
msgid "Select part category"
|
msgid "Select part category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:81
|
#: part/forms.py:102
|
||||||
msgid "Perform 'deep copy' which will duplicate all BOM data for this part"
|
msgid "Perform 'deep copy' which will duplicate all BOM data for this part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:86
|
#: part/forms.py:107
|
||||||
msgid "Confirm part creation"
|
msgid "Confirm part creation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:172
|
#: part/forms.py:193
|
||||||
msgid "Input quantity for price calculation"
|
msgid "Input quantity for price calculation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:175
|
#: part/forms.py:196
|
||||||
msgid "Select currency for price calculation"
|
msgid "Select currency for price calculation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:57
|
#: part/models.py:59
|
||||||
msgid "Default location for parts in this category"
|
msgid "Default location for parts in this category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:60
|
#: part/models.py:62
|
||||||
msgid "Default keywords for parts in this category"
|
msgid "Default keywords for parts in this category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:309
|
#: part/models.py:323
|
||||||
msgid "Part must be unique for name, IPN and revision"
|
msgid "Part must be unique for name, IPN and revision"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:323
|
#: part/models.py:337
|
||||||
msgid "Part cannot be a template part if it is a variant of another part"
|
msgid "Part cannot be a template part if it is a variant of another part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:324
|
#: part/models.py:338
|
||||||
msgid "Part cannot be a variant of another part if it is already a template"
|
msgid "Part cannot be a variant of another part if it is already a template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:328 part/templates/part/detail.html:17
|
#: part/models.py:342 part/templates/part/detail.html:17
|
||||||
msgid "Part name"
|
msgid "Part name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:332
|
#: part/models.py:346
|
||||||
msgid "Is this part a template part?"
|
msgid "Is this part a template part?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:341
|
#: part/models.py:355
|
||||||
msgid "Is this part a variant of another part?"
|
msgid "Is this part a variant of another part?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:343
|
#: part/models.py:357
|
||||||
msgid "Part description"
|
msgid "Part description"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:345
|
#: part/models.py:359
|
||||||
msgid "Part keywords to improve visibility in search results"
|
msgid "Part keywords to improve visibility in search results"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:350
|
#: part/models.py:364
|
||||||
msgid "Part category"
|
msgid "Part category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:352
|
#: part/models.py:366
|
||||||
msgid "Internal Part Number"
|
msgid "Internal Part Number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:354
|
#: part/models.py:368
|
||||||
msgid "Part revision or version number"
|
msgid "Part revision or version number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:356
|
#: part/models.py:370
|
||||||
msgid "Link to extenal URL"
|
msgid "Link to extenal URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:362
|
#: part/models.py:376
|
||||||
msgid "Where is this item normally stored?"
|
msgid "Where is this item normally stored?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:406
|
#: part/models.py:420
|
||||||
msgid "Default supplier part"
|
msgid "Default supplier part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:409
|
#: part/models.py:423
|
||||||
msgid "Minimum allowed stock level"
|
msgid "Minimum allowed stock level"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:411
|
#: part/models.py:425
|
||||||
msgid "Stock keeping units for this part"
|
msgid "Stock keeping units for this part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:413
|
#: part/models.py:427
|
||||||
msgid "Can this part be built from other parts?"
|
msgid "Can this part be built from other parts?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:415
|
#: part/models.py:429
|
||||||
msgid "Can this part be used to build other parts?"
|
msgid "Can this part be used to build other parts?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:417
|
#: part/models.py:431
|
||||||
msgid "Does this part have tracking for unique items?"
|
msgid "Does this part have tracking for unique items?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:419
|
#: part/models.py:433
|
||||||
msgid "Can this part be purchased from external suppliers?"
|
msgid "Can this part be purchased from external suppliers?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:421
|
#: part/models.py:435
|
||||||
msgid "Can this part be sold to customers?"
|
msgid "Can this part be sold to customers?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:423
|
#: part/models.py:437
|
||||||
msgid "Is this part active?"
|
msgid "Is this part active?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:425
|
#: part/models.py:439
|
||||||
msgid "Is this a virtual part, such as a software product or license?"
|
msgid "Is this a virtual part, such as a software product or license?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:427
|
#: part/models.py:441
|
||||||
msgid "Part notes - supports Markdown formatting"
|
msgid "Part notes - supports Markdown formatting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:429
|
#: part/models.py:443
|
||||||
msgid "Stored BOM checksum"
|
msgid "Stored BOM checksum"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:936
|
#: part/models.py:948
|
||||||
msgid "Select file to attach"
|
msgid "Select file to attach"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:938
|
#: part/models.py:950
|
||||||
msgid "File comment"
|
msgid "File comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:993
|
#: part/models.py:1005
|
||||||
msgid "Parameter template name must be unique"
|
msgid "Parameter template name must be unique"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:998
|
#: part/models.py:1010
|
||||||
msgid "Parameter Name"
|
msgid "Parameter Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1000
|
#: part/models.py:1012
|
||||||
msgid "Parameter Units"
|
msgid "Parameter Units"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1026
|
#: part/models.py:1038
|
||||||
msgid "Parent Part"
|
msgid "Parent Part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1028
|
#: part/models.py:1040
|
||||||
msgid "Parameter Template"
|
msgid "Parameter Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1030
|
#: part/models.py:1042
|
||||||
msgid "Parameter Value"
|
msgid "Parameter Value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1054
|
#: part/models.py:1066
|
||||||
msgid "Select parent part"
|
msgid "Select parent part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1062
|
#: part/models.py:1074
|
||||||
msgid "Select part to be used in BOM"
|
msgid "Select part to be used in BOM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1068
|
#: part/models.py:1080
|
||||||
msgid "BOM quantity for this BOM item"
|
msgid "BOM quantity for this BOM item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1071
|
#: part/models.py:1083
|
||||||
msgid "Estimated build wastage quantity (absolute or percentage)"
|
msgid "Estimated build wastage quantity (absolute or percentage)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1074
|
#: part/models.py:1086
|
||||||
msgid "BOM item reference"
|
msgid "BOM item reference"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1077
|
#: part/models.py:1089
|
||||||
msgid "BOM item notes"
|
msgid "BOM item notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1079
|
#: part/models.py:1091
|
||||||
msgid "BOM line checksum"
|
msgid "BOM line checksum"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1142
|
#: part/models.py:1154
|
||||||
msgid "Part cannot be added to its own Bill of Materials"
|
msgid "Part cannot be added to its own Bill of Materials"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1149
|
#: part/models.py:1161
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
|
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1028,7 +1248,7 @@ msgstr ""
|
|||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/attachments.html:34
|
#: part/templates/part/attachments.html:34 part/views.py:118
|
||||||
msgid "Edit attachment"
|
msgid "Edit attachment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1077,7 +1297,7 @@ msgstr ""
|
|||||||
msgid "Part Details"
|
msgid "Part Details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/detail.html:22 part/templates/part/part_base.html:85
|
#: part/templates/part/detail.html:22 part/templates/part/part_base.html:75
|
||||||
msgid "IPN"
|
msgid "IPN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1181,34 +1401,42 @@ msgstr ""
|
|||||||
msgid "This part is not active"
|
msgid "This part is not active"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:47
|
#: part/templates/part/part_base.html:37
|
||||||
msgid "Star this part"
|
msgid "Star this part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:53
|
#: part/templates/part/part_base.html:43
|
||||||
msgid "Show pricing information"
|
msgid "Show pricing information"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:105
|
#: part/templates/part/part_base.html:95
|
||||||
msgid "Available Stock"
|
msgid "Available Stock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:110
|
#: part/templates/part/part_base.html:100
|
||||||
msgid "In Stock"
|
msgid "In Stock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:131
|
#: part/templates/part/part_base.html:121
|
||||||
msgid "Build Status"
|
msgid "Build Status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:135
|
#: part/templates/part/part_base.html:125
|
||||||
msgid "Can Build"
|
msgid "Can Build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:140
|
#: part/templates/part/part_base.html:130
|
||||||
msgid "Underway"
|
msgid "Underway"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/templates/part/part_thumb.html:16
|
||||||
|
msgid "Select from existing images"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/templates/part/part_thumb.html:17
|
||||||
|
msgid "Upload new image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/tabs.html:9
|
#: part/templates/part/tabs.html:9
|
||||||
msgid "Parameters"
|
msgid "Parameters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1242,151 +1470,175 @@ msgstr ""
|
|||||||
msgid "Attachments"
|
msgid "Attachments"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:77
|
#: part/views.py:75
|
||||||
|
msgid "Add part attachment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:80
|
||||||
msgid "Added attachment"
|
msgid "Added attachment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:119
|
#: part/views.py:122
|
||||||
msgid "Part attachment updated"
|
msgid "Part attachment updated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:196
|
#: part/views.py:137
|
||||||
|
msgid "Delete Part Attachment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:143
|
||||||
|
msgid "Deleted part attachment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:151
|
||||||
|
msgid "Set Part Category"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:199
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Set category for {n} parts"
|
msgid "Set category for {n} parts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:306
|
#: part/views.py:234
|
||||||
|
msgid "Create Variant"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:304
|
||||||
|
msgid "Duplicate Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:309
|
||||||
msgid "Copied part"
|
msgid "Copied part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:414
|
#: part/views.py:417
|
||||||
msgid "Create new part"
|
msgid "Create new part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:419
|
#: part/views.py:422
|
||||||
msgid "Created new part"
|
msgid "Created new part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:609
|
#: part/views.py:595
|
||||||
|
msgid "Part QR Code"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:612
|
||||||
msgid "Upload Part Image"
|
msgid "Upload Part Image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:614
|
#: part/views.py:617 part/views.py:652
|
||||||
msgid "Updated part image"
|
msgid "Updated part image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:623
|
#: part/views.py:626
|
||||||
msgid "Select Part Image"
|
msgid "Select Part Image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:627
|
#: part/views.py:655
|
||||||
msgid "Selected part image"
|
msgid "Part image not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:637
|
#: part/views.py:666
|
||||||
msgid "Edit Part Properties"
|
msgid "Edit Part Properties"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:659
|
#: part/views.py:688
|
||||||
msgid "Validate BOM"
|
msgid "Validate BOM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:821
|
#: part/views.py:850
|
||||||
msgid "No BOM file provided"
|
msgid "No BOM file provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1082
|
#: part/views.py:1111
|
||||||
msgid "Enter a valid quantity"
|
msgid "Enter a valid quantity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1106 part/views.py:1109
|
#: part/views.py:1135 part/views.py:1138
|
||||||
msgid "Select valid part"
|
msgid "Select valid part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1115
|
#: part/views.py:1144
|
||||||
msgid "Duplicate part selected"
|
msgid "Duplicate part selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1143
|
#: part/views.py:1172
|
||||||
msgid "Select a part"
|
msgid "Select a part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1147
|
#: part/views.py:1176
|
||||||
msgid "Specify quantity"
|
msgid "Specify quantity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1324
|
#: part/views.py:1356
|
||||||
|
msgid "Export Bill of Materials"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1396
|
||||||
msgid "Confirm Part Deletion"
|
msgid "Confirm Part Deletion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1331
|
#: part/views.py:1403
|
||||||
msgid "Part was deleted"
|
msgid "Part was deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1340
|
#: part/views.py:1412
|
||||||
msgid "Part Pricing"
|
msgid "Part Pricing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1462
|
#: part/views.py:1534
|
||||||
msgid "Create Part Parameter Template"
|
msgid "Create Part Parameter Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1470
|
#: part/views.py:1542
|
||||||
msgid "Edit Part Parameter Template"
|
msgid "Edit Part Parameter Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1477
|
#: part/views.py:1549
|
||||||
msgid "Delete Part Parameter Template"
|
msgid "Delete Part Parameter Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1485
|
#: part/views.py:1557
|
||||||
msgid "Create Part Parameter"
|
msgid "Create Part Parameter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1535
|
#: part/views.py:1607
|
||||||
msgid "Edit Part Parameter"
|
msgid "Edit Part Parameter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1549
|
#: part/views.py:1621
|
||||||
msgid "Delete Part Parameter"
|
msgid "Delete Part Parameter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1565
|
#: part/views.py:1637
|
||||||
msgid "Edit Part Category"
|
msgid "Edit Part Category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1600
|
#: part/views.py:1672
|
||||||
msgid "Delete Part Category"
|
msgid "Delete Part Category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1606
|
#: part/views.py:1678
|
||||||
msgid "Part category was deleted"
|
msgid "Part category was deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1614
|
#: part/views.py:1686
|
||||||
msgid "Create new part category"
|
msgid "Create new part category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1665
|
#: part/views.py:1737
|
||||||
msgid "Create BOM item"
|
msgid "Create BOM item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1731
|
#: part/views.py:1803
|
||||||
msgid "Edit BOM item"
|
msgid "Edit BOM item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1779
|
#: part/views.py:1851
|
||||||
msgid "Confim BOM item deletion"
|
msgid "Confim BOM item deletion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: stock/forms.py:91
|
|
||||||
msgid "File Format"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: stock/forms.py:91
|
|
||||||
msgid "Select output file format"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: stock/forms.py:93
|
#: stock/forms.py:93
|
||||||
msgid "Include stock items in sub locations"
|
msgid "Include stock items in sub locations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-02-10 11:09+0000\n"
|
"POT-Creation-Date: 2020-02-11 23:25+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -104,7 +104,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: InvenTree/status_codes.py:92 build/templates/build/allocate_edit.html:28
|
#: InvenTree/status_codes.py:92 build/templates/build/allocate_edit.html:28
|
||||||
#: build/templates/build/allocate_view.html:21
|
#: build/templates/build/allocate_view.html:21
|
||||||
#: part/templates/part/part_base.html:116 part/templates/part/tabs.html:21
|
#: part/templates/part/part_base.html:106 part/templates/part/tabs.html:21
|
||||||
msgid "Allocated"
|
msgid "Allocated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -149,59 +149,59 @@ msgstr ""
|
|||||||
msgid "Confirm build completion"
|
msgid "Confirm build completion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:53
|
#: build/models.py:54
|
||||||
msgid "Brief description of the build"
|
msgid "Brief description of the build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:62
|
#: build/models.py:63
|
||||||
msgid "Select part to build"
|
msgid "Select part to build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:68
|
#: build/models.py:69
|
||||||
msgid ""
|
msgid ""
|
||||||
"Select location to take stock from for this build (leave blank to take from "
|
"Select location to take stock from for this build (leave blank to take from "
|
||||||
"any stock location)"
|
"any stock location)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:74
|
#: build/models.py:75
|
||||||
msgid "Number of parts to build"
|
msgid "Number of parts to build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:80
|
#: build/models.py:81
|
||||||
msgid "Build status"
|
msgid "Build status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:83
|
#: build/models.py:84
|
||||||
msgid "Batch code for this build output"
|
msgid "Batch code for this build output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:95
|
#: build/models.py:96
|
||||||
msgid "Link to external URL"
|
msgid "Link to external URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:97
|
#: build/models.py:98
|
||||||
msgid "Extra build notes"
|
msgid "Extra build notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:382
|
#: build/models.py:383
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Selected stock item not found in BOM for part '{p}'"
|
msgid "Selected stock item not found in BOM for part '{p}'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:385
|
#: build/models.py:386
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
|
msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:403
|
#: build/models.py:404
|
||||||
msgid "Build to allocate parts"
|
msgid "Build to allocate parts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:410
|
#: build/models.py:411
|
||||||
msgid "Stock Item to allocate to build"
|
msgid "Stock Item to allocate to build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/models.py:418
|
#: build/models.py:419
|
||||||
msgid "Stock quantity to allocate to build"
|
msgid "Stock quantity to allocate to build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -244,7 +244,7 @@ msgid "Allocate"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/templates/build/allocate_view.html:10
|
#: build/templates/build/allocate_view.html:10
|
||||||
#: company/templates/company/detail_part.html:18
|
#: company/templates/company/detail_part.html:18 order/views.py:448
|
||||||
msgid "Order Parts"
|
msgid "Order Parts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -257,10 +257,14 @@ msgid "Description"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build/templates/build/allocate_view.html:22
|
#: build/templates/build/allocate_view.html:22
|
||||||
#: part/templates/part/part_base.html:122
|
#: part/templates/part/part_base.html:112
|
||||||
msgid "On Order"
|
msgid "On Order"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/templates/build/delete_build_item.html:6
|
||||||
|
msgid "Are you sure you want to unallocate these parts?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: build/templates/build/detail.html:8
|
#: build/templates/build/detail.html:8
|
||||||
msgid "Build Details"
|
msgid "Build Details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -298,7 +302,7 @@ msgstr ""
|
|||||||
#: build/templates/build/detail.html:42
|
#: build/templates/build/detail.html:42
|
||||||
#: company/templates/company/detail_part.html:90
|
#: company/templates/company/detail_part.html:90
|
||||||
#: company/templates/company/partdetail.html:54
|
#: company/templates/company/partdetail.html:54
|
||||||
#: part/templates/part/detail.html:50 part/templates/part/part_base.html:91
|
#: part/templates/part/detail.html:50 part/templates/part/part_base.html:81
|
||||||
#: stock/templates/stock/item_base.html:120
|
#: stock/templates/stock/item_base.html:120
|
||||||
msgid "URL"
|
msgid "URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -355,11 +359,107 @@ msgstr ""
|
|||||||
msgid "Assign Parts"
|
msgid "Assign Parts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/templates/build/unallocate.html:8
|
||||||
|
msgid "Are you sure you wish to unallocate all stock for this build?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:56
|
||||||
|
msgid "Cancel Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:74
|
||||||
|
msgid "Confirm build cancellation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:79
|
||||||
|
msgid "Build was cancelled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:95
|
||||||
|
msgid "Allocate Stock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:108
|
||||||
|
msgid "No matching build found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:127
|
||||||
|
msgid "Confirm stock allocation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:128
|
||||||
|
msgid "Check the confirmation box at the bottom of the list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:148 build/views.py:442
|
||||||
|
msgid "Unallocate Stock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:161
|
||||||
|
msgid "Confirm unallocation of build stock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:162
|
||||||
|
msgid "Check the confirmation box"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:185
|
||||||
|
msgid "Complete Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:258
|
||||||
|
msgid "Confirm completion of build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:265
|
||||||
|
msgid "Invalid location selected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: build/views.py:290 stock/views.py:884
|
#: build/views.py:290 stock/views.py:884
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "The following serial numbers already exist: ({sn})"
|
msgid "The following serial numbers already exist: ({sn})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:309
|
||||||
|
msgid "Build marked as COMPLETE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:385
|
||||||
|
msgid "Start new Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:408
|
||||||
|
msgid "Created new build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:418
|
||||||
|
msgid "Edit Build Details"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:423
|
||||||
|
msgid "Edited build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:432
|
||||||
|
msgid "Delete Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:447
|
||||||
|
msgid "Removed parts from build allocation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:457
|
||||||
|
msgid "Allocate new Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:573
|
||||||
|
msgid "Edit Stock Allocation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build/views.py:577
|
||||||
|
msgid "Updated Build Item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: common/models.py:69
|
#: common/models.py:69
|
||||||
msgid "Settings key (must be unique - case insensitive"
|
msgid "Settings key (must be unique - case insensitive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -396,6 +496,18 @@ msgstr ""
|
|||||||
msgid "Use this currency as the base currency"
|
msgid "Use this currency as the base currency"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/views.py:21
|
||||||
|
msgid "Create new Currency"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/views.py:29
|
||||||
|
msgid "Edit Currency"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/views.py:36
|
||||||
|
msgid "Delete Currency"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: company/models.py:74
|
#: company/models.py:74
|
||||||
msgid "Company name"
|
msgid "Company name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -643,6 +755,62 @@ msgstr ""
|
|||||||
msgid "Sales Orders"
|
msgid "Sales Orders"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:97
|
||||||
|
msgid "Update Company Image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:102
|
||||||
|
msgid "Updated company image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:112
|
||||||
|
msgid "Edit Company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:116
|
||||||
|
msgid "Edited company information"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:126
|
||||||
|
msgid "Create new Company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:130
|
||||||
|
msgid "Created new company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:140
|
||||||
|
msgid "Delete Company"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:145
|
||||||
|
msgid "Company was deleted"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:170
|
||||||
|
msgid "Edit Supplier Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:179
|
||||||
|
msgid "Create new Supplier Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:236
|
||||||
|
msgid "Delete Supplier Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:306
|
||||||
|
msgid "Add Price Break"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:341
|
||||||
|
msgid "Edit Price Break"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: company/views.py:356
|
||||||
|
msgid "Delete Price Break"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: order/forms.py:21
|
#: order/forms.py:21
|
||||||
msgid "Place order"
|
msgid "Place order"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -675,7 +843,7 @@ msgstr ""
|
|||||||
msgid "Order notes"
|
msgid "Order notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: order/models.py:159 order/models.py:210 part/views.py:1080
|
#: order/models.py:159 order/models.py:210 part/views.py:1109
|
||||||
#: stock/models.py:440
|
#: stock/models.py:440
|
||||||
msgid "Quantity must be greater than zero"
|
msgid "Quantity must be greater than zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -730,7 +898,7 @@ msgstr ""
|
|||||||
msgid "Order Notes"
|
msgid "Order Notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: order/templates/order/purchase_order_detail.html:15
|
#: order/templates/order/purchase_order_detail.html:15 order/views.py:747
|
||||||
msgid "Add Line Item"
|
msgid "Add Line Item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -754,14 +922,38 @@ msgstr ""
|
|||||||
msgid "Items"
|
msgid "Items"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:99
|
||||||
|
msgid "Create Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:129
|
||||||
|
msgid "Edit Purchase Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:149
|
||||||
|
msgid "Cancel Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: order/views.py:164
|
#: order/views.py:164
|
||||||
msgid "Confirm order cancellation"
|
msgid "Confirm order cancellation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:182
|
||||||
|
msgid "Issue Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: order/views.py:197
|
#: order/views.py:197
|
||||||
msgid "Confirm order placement"
|
msgid "Confirm order placement"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:218
|
||||||
|
msgid "Complete Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:284
|
||||||
|
msgid "Receive Parts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: order/views.py:351
|
#: order/views.py:351
|
||||||
msgid "Items received"
|
msgid "Items received"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -794,220 +986,248 @@ msgstr ""
|
|||||||
msgid "Invalid SupplierPart selection"
|
msgid "Invalid SupplierPart selection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/bom.py:107
|
#: order/views.py:862
|
||||||
|
msgid "Edit Line Item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:878
|
||||||
|
msgid "Delete Line Item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: order/views.py:883
|
||||||
|
msgid "Deleted line item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/bom.py:140
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Unsupported file format: {f}"
|
msgid "Unsupported file format: {f}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/bom.py:112
|
#: part/bom.py:145
|
||||||
msgid "Error reading BOM file (invalid data)"
|
msgid "Error reading BOM file (invalid data)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/bom.py:114
|
#: part/bom.py:147
|
||||||
msgid "Error reading BOM file (incorrect row size)"
|
msgid "Error reading BOM file (incorrect row size)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:37
|
#: part/forms.py:37 stock/forms.py:91
|
||||||
|
msgid "File Format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:37 stock/forms.py:91
|
||||||
|
msgid "Select output file format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:39
|
||||||
|
msgid "Cascading"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:39
|
||||||
|
msgid "Download cascading / multi-level BOM"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/forms.py:58
|
||||||
msgid "Confirm that the BOM is correct"
|
msgid "Confirm that the BOM is correct"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:49
|
#: part/forms.py:70
|
||||||
msgid "Select BOM file to upload"
|
msgid "Select BOM file to upload"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:73
|
#: part/forms.py:94
|
||||||
msgid "Select part category"
|
msgid "Select part category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:81
|
#: part/forms.py:102
|
||||||
msgid "Perform 'deep copy' which will duplicate all BOM data for this part"
|
msgid "Perform 'deep copy' which will duplicate all BOM data for this part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:86
|
#: part/forms.py:107
|
||||||
msgid "Confirm part creation"
|
msgid "Confirm part creation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:172
|
#: part/forms.py:193
|
||||||
msgid "Input quantity for price calculation"
|
msgid "Input quantity for price calculation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/forms.py:175
|
#: part/forms.py:196
|
||||||
msgid "Select currency for price calculation"
|
msgid "Select currency for price calculation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:57
|
#: part/models.py:59
|
||||||
msgid "Default location for parts in this category"
|
msgid "Default location for parts in this category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:60
|
#: part/models.py:62
|
||||||
msgid "Default keywords for parts in this category"
|
msgid "Default keywords for parts in this category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:309
|
#: part/models.py:323
|
||||||
msgid "Part must be unique for name, IPN and revision"
|
msgid "Part must be unique for name, IPN and revision"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:323
|
#: part/models.py:337
|
||||||
msgid "Part cannot be a template part if it is a variant of another part"
|
msgid "Part cannot be a template part if it is a variant of another part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:324
|
#: part/models.py:338
|
||||||
msgid "Part cannot be a variant of another part if it is already a template"
|
msgid "Part cannot be a variant of another part if it is already a template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:328 part/templates/part/detail.html:17
|
#: part/models.py:342 part/templates/part/detail.html:17
|
||||||
msgid "Part name"
|
msgid "Part name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:332
|
#: part/models.py:346
|
||||||
msgid "Is this part a template part?"
|
msgid "Is this part a template part?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:341
|
#: part/models.py:355
|
||||||
msgid "Is this part a variant of another part?"
|
msgid "Is this part a variant of another part?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:343
|
#: part/models.py:357
|
||||||
msgid "Part description"
|
msgid "Part description"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:345
|
#: part/models.py:359
|
||||||
msgid "Part keywords to improve visibility in search results"
|
msgid "Part keywords to improve visibility in search results"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:350
|
#: part/models.py:364
|
||||||
msgid "Part category"
|
msgid "Part category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:352
|
#: part/models.py:366
|
||||||
msgid "Internal Part Number"
|
msgid "Internal Part Number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:354
|
#: part/models.py:368
|
||||||
msgid "Part revision or version number"
|
msgid "Part revision or version number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:356
|
#: part/models.py:370
|
||||||
msgid "Link to extenal URL"
|
msgid "Link to extenal URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:362
|
#: part/models.py:376
|
||||||
msgid "Where is this item normally stored?"
|
msgid "Where is this item normally stored?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:406
|
#: part/models.py:420
|
||||||
msgid "Default supplier part"
|
msgid "Default supplier part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:409
|
#: part/models.py:423
|
||||||
msgid "Minimum allowed stock level"
|
msgid "Minimum allowed stock level"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:411
|
#: part/models.py:425
|
||||||
msgid "Stock keeping units for this part"
|
msgid "Stock keeping units for this part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:413
|
#: part/models.py:427
|
||||||
msgid "Can this part be built from other parts?"
|
msgid "Can this part be built from other parts?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:415
|
#: part/models.py:429
|
||||||
msgid "Can this part be used to build other parts?"
|
msgid "Can this part be used to build other parts?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:417
|
#: part/models.py:431
|
||||||
msgid "Does this part have tracking for unique items?"
|
msgid "Does this part have tracking for unique items?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:419
|
#: part/models.py:433
|
||||||
msgid "Can this part be purchased from external suppliers?"
|
msgid "Can this part be purchased from external suppliers?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:421
|
#: part/models.py:435
|
||||||
msgid "Can this part be sold to customers?"
|
msgid "Can this part be sold to customers?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:423
|
#: part/models.py:437
|
||||||
msgid "Is this part active?"
|
msgid "Is this part active?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:425
|
#: part/models.py:439
|
||||||
msgid "Is this a virtual part, such as a software product or license?"
|
msgid "Is this a virtual part, such as a software product or license?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:427
|
#: part/models.py:441
|
||||||
msgid "Part notes - supports Markdown formatting"
|
msgid "Part notes - supports Markdown formatting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:429
|
#: part/models.py:443
|
||||||
msgid "Stored BOM checksum"
|
msgid "Stored BOM checksum"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:936
|
#: part/models.py:948
|
||||||
msgid "Select file to attach"
|
msgid "Select file to attach"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:938
|
#: part/models.py:950
|
||||||
msgid "File comment"
|
msgid "File comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:993
|
#: part/models.py:1005
|
||||||
msgid "Parameter template name must be unique"
|
msgid "Parameter template name must be unique"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:998
|
#: part/models.py:1010
|
||||||
msgid "Parameter Name"
|
msgid "Parameter Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1000
|
#: part/models.py:1012
|
||||||
msgid "Parameter Units"
|
msgid "Parameter Units"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1026
|
#: part/models.py:1038
|
||||||
msgid "Parent Part"
|
msgid "Parent Part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1028
|
#: part/models.py:1040
|
||||||
msgid "Parameter Template"
|
msgid "Parameter Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1030
|
#: part/models.py:1042
|
||||||
msgid "Parameter Value"
|
msgid "Parameter Value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1054
|
#: part/models.py:1066
|
||||||
msgid "Select parent part"
|
msgid "Select parent part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1062
|
#: part/models.py:1074
|
||||||
msgid "Select part to be used in BOM"
|
msgid "Select part to be used in BOM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1068
|
#: part/models.py:1080
|
||||||
msgid "BOM quantity for this BOM item"
|
msgid "BOM quantity for this BOM item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1071
|
#: part/models.py:1083
|
||||||
msgid "Estimated build wastage quantity (absolute or percentage)"
|
msgid "Estimated build wastage quantity (absolute or percentage)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1074
|
#: part/models.py:1086
|
||||||
msgid "BOM item reference"
|
msgid "BOM item reference"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1077
|
#: part/models.py:1089
|
||||||
msgid "BOM item notes"
|
msgid "BOM item notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1079
|
#: part/models.py:1091
|
||||||
msgid "BOM line checksum"
|
msgid "BOM line checksum"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1142
|
#: part/models.py:1154
|
||||||
msgid "Part cannot be added to its own Bill of Materials"
|
msgid "Part cannot be added to its own Bill of Materials"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/models.py:1149
|
#: part/models.py:1161
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
|
msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1028,7 +1248,7 @@ msgstr ""
|
|||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/attachments.html:34
|
#: part/templates/part/attachments.html:34 part/views.py:118
|
||||||
msgid "Edit attachment"
|
msgid "Edit attachment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1077,7 +1297,7 @@ msgstr ""
|
|||||||
msgid "Part Details"
|
msgid "Part Details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/detail.html:22 part/templates/part/part_base.html:85
|
#: part/templates/part/detail.html:22 part/templates/part/part_base.html:75
|
||||||
msgid "IPN"
|
msgid "IPN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1181,34 +1401,42 @@ msgstr ""
|
|||||||
msgid "This part is not active"
|
msgid "This part is not active"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:47
|
#: part/templates/part/part_base.html:37
|
||||||
msgid "Star this part"
|
msgid "Star this part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:53
|
#: part/templates/part/part_base.html:43
|
||||||
msgid "Show pricing information"
|
msgid "Show pricing information"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:105
|
#: part/templates/part/part_base.html:95
|
||||||
msgid "Available Stock"
|
msgid "Available Stock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:110
|
#: part/templates/part/part_base.html:100
|
||||||
msgid "In Stock"
|
msgid "In Stock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:131
|
#: part/templates/part/part_base.html:121
|
||||||
msgid "Build Status"
|
msgid "Build Status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:135
|
#: part/templates/part/part_base.html:125
|
||||||
msgid "Can Build"
|
msgid "Can Build"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/part_base.html:140
|
#: part/templates/part/part_base.html:130
|
||||||
msgid "Underway"
|
msgid "Underway"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/templates/part/part_thumb.html:16
|
||||||
|
msgid "Select from existing images"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/templates/part/part_thumb.html:17
|
||||||
|
msgid "Upload new image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: part/templates/part/tabs.html:9
|
#: part/templates/part/tabs.html:9
|
||||||
msgid "Parameters"
|
msgid "Parameters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1242,151 +1470,175 @@ msgstr ""
|
|||||||
msgid "Attachments"
|
msgid "Attachments"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:77
|
#: part/views.py:75
|
||||||
|
msgid "Add part attachment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:80
|
||||||
msgid "Added attachment"
|
msgid "Added attachment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:119
|
#: part/views.py:122
|
||||||
msgid "Part attachment updated"
|
msgid "Part attachment updated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:196
|
#: part/views.py:137
|
||||||
|
msgid "Delete Part Attachment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:143
|
||||||
|
msgid "Deleted part attachment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:151
|
||||||
|
msgid "Set Part Category"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:199
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Set category for {n} parts"
|
msgid "Set category for {n} parts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:306
|
#: part/views.py:234
|
||||||
|
msgid "Create Variant"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:304
|
||||||
|
msgid "Duplicate Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:309
|
||||||
msgid "Copied part"
|
msgid "Copied part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:414
|
#: part/views.py:417
|
||||||
msgid "Create new part"
|
msgid "Create new part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:419
|
#: part/views.py:422
|
||||||
msgid "Created new part"
|
msgid "Created new part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:609
|
#: part/views.py:595
|
||||||
|
msgid "Part QR Code"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:612
|
||||||
msgid "Upload Part Image"
|
msgid "Upload Part Image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:614
|
#: part/views.py:617 part/views.py:652
|
||||||
msgid "Updated part image"
|
msgid "Updated part image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:623
|
#: part/views.py:626
|
||||||
msgid "Select Part Image"
|
msgid "Select Part Image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:627
|
#: part/views.py:655
|
||||||
msgid "Selected part image"
|
msgid "Part image not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:637
|
#: part/views.py:666
|
||||||
msgid "Edit Part Properties"
|
msgid "Edit Part Properties"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:659
|
#: part/views.py:688
|
||||||
msgid "Validate BOM"
|
msgid "Validate BOM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:821
|
#: part/views.py:850
|
||||||
msgid "No BOM file provided"
|
msgid "No BOM file provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1082
|
#: part/views.py:1111
|
||||||
msgid "Enter a valid quantity"
|
msgid "Enter a valid quantity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1106 part/views.py:1109
|
#: part/views.py:1135 part/views.py:1138
|
||||||
msgid "Select valid part"
|
msgid "Select valid part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1115
|
#: part/views.py:1144
|
||||||
msgid "Duplicate part selected"
|
msgid "Duplicate part selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1143
|
#: part/views.py:1172
|
||||||
msgid "Select a part"
|
msgid "Select a part"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1147
|
#: part/views.py:1176
|
||||||
msgid "Specify quantity"
|
msgid "Specify quantity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1324
|
#: part/views.py:1356
|
||||||
|
msgid "Export Bill of Materials"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: part/views.py:1396
|
||||||
msgid "Confirm Part Deletion"
|
msgid "Confirm Part Deletion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1331
|
#: part/views.py:1403
|
||||||
msgid "Part was deleted"
|
msgid "Part was deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1340
|
#: part/views.py:1412
|
||||||
msgid "Part Pricing"
|
msgid "Part Pricing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1462
|
#: part/views.py:1534
|
||||||
msgid "Create Part Parameter Template"
|
msgid "Create Part Parameter Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1470
|
#: part/views.py:1542
|
||||||
msgid "Edit Part Parameter Template"
|
msgid "Edit Part Parameter Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1477
|
#: part/views.py:1549
|
||||||
msgid "Delete Part Parameter Template"
|
msgid "Delete Part Parameter Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1485
|
#: part/views.py:1557
|
||||||
msgid "Create Part Parameter"
|
msgid "Create Part Parameter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1535
|
#: part/views.py:1607
|
||||||
msgid "Edit Part Parameter"
|
msgid "Edit Part Parameter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1549
|
#: part/views.py:1621
|
||||||
msgid "Delete Part Parameter"
|
msgid "Delete Part Parameter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1565
|
#: part/views.py:1637
|
||||||
msgid "Edit Part Category"
|
msgid "Edit Part Category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1600
|
#: part/views.py:1672
|
||||||
msgid "Delete Part Category"
|
msgid "Delete Part Category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1606
|
#: part/views.py:1678
|
||||||
msgid "Part category was deleted"
|
msgid "Part category was deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1614
|
#: part/views.py:1686
|
||||||
msgid "Create new part category"
|
msgid "Create new part category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1665
|
#: part/views.py:1737
|
||||||
msgid "Create BOM item"
|
msgid "Create BOM item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1731
|
#: part/views.py:1803
|
||||||
msgid "Edit BOM item"
|
msgid "Edit BOM item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: part/views.py:1779
|
#: part/views.py:1851
|
||||||
msgid "Confim BOM item deletion"
|
msgid "Confim BOM item deletion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: stock/forms.py:91
|
|
||||||
msgid "File Format"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: stock/forms.py:91
|
|
||||||
msgid "Select output file format"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: stock/forms.py:93
|
#: stock/forms.py:93
|
||||||
msgid "Include stock items in sub locations"
|
msgid "Include stock items in sub locations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -96,7 +96,7 @@ class PurchaseOrderCreate(AjaxCreateView):
|
|||||||
""" View for creating a new PurchaseOrder object using a modal form """
|
""" View for creating a new PurchaseOrder object using a modal form """
|
||||||
|
|
||||||
model = PurchaseOrder
|
model = PurchaseOrder
|
||||||
ajax_form_title = "Create Purchase Order"
|
ajax_form_title = _("Create Purchase Order")
|
||||||
form_class = order_forms.EditPurchaseOrderForm
|
form_class = order_forms.EditPurchaseOrderForm
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
@ -126,7 +126,7 @@ class PurchaseOrderEdit(AjaxUpdateView):
|
|||||||
""" View for editing a PurchaseOrder using a modal form """
|
""" View for editing a PurchaseOrder using a modal form """
|
||||||
|
|
||||||
model = PurchaseOrder
|
model = PurchaseOrder
|
||||||
ajax_form_title = 'Edit Purchase Order'
|
ajax_form_title = _('Edit Purchase Order')
|
||||||
form_class = order_forms.EditPurchaseOrderForm
|
form_class = order_forms.EditPurchaseOrderForm
|
||||||
|
|
||||||
def get_form(self):
|
def get_form(self):
|
||||||
@ -146,7 +146,7 @@ class PurchaseOrderCancel(AjaxUpdateView):
|
|||||||
""" View for cancelling a purchase order """
|
""" View for cancelling a purchase order """
|
||||||
|
|
||||||
model = PurchaseOrder
|
model = PurchaseOrder
|
||||||
ajax_form_title = 'Cancel Order'
|
ajax_form_title = _('Cancel Order')
|
||||||
ajax_template_name = 'order/order_cancel.html'
|
ajax_template_name = 'order/order_cancel.html'
|
||||||
form_class = order_forms.CancelPurchaseOrderForm
|
form_class = order_forms.CancelPurchaseOrderForm
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ class PurchaseOrderIssue(AjaxUpdateView):
|
|||||||
""" View for changing a purchase order from 'PENDING' to 'ISSUED' """
|
""" View for changing a purchase order from 'PENDING' to 'ISSUED' """
|
||||||
|
|
||||||
model = PurchaseOrder
|
model = PurchaseOrder
|
||||||
ajax_form_title = 'Issue Order'
|
ajax_form_title = _('Issue Order')
|
||||||
ajax_template_name = "order/order_issue.html"
|
ajax_template_name = "order/order_issue.html"
|
||||||
form_class = order_forms.IssuePurchaseOrderForm
|
form_class = order_forms.IssuePurchaseOrderForm
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ class PurchaseOrderComplete(AjaxUpdateView):
|
|||||||
form_class = order_forms.CompletePurchaseOrderForm
|
form_class = order_forms.CompletePurchaseOrderForm
|
||||||
model = PurchaseOrder
|
model = PurchaseOrder
|
||||||
ajax_template_name = "order/order_complete.html"
|
ajax_template_name = "order/order_complete.html"
|
||||||
ajax_form_title = "Complete Order"
|
ajax_form_title = _("Complete Order")
|
||||||
context_object_name = 'order'
|
context_object_name = 'order'
|
||||||
|
|
||||||
def get_context_data(self):
|
def get_context_data(self):
|
||||||
@ -281,7 +281,7 @@ class PurchaseOrderReceive(AjaxUpdateView):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
form_class = order_forms.ReceivePurchaseOrderForm
|
form_class = order_forms.ReceivePurchaseOrderForm
|
||||||
ajax_form_title = "Receive Parts"
|
ajax_form_title = _("Receive Parts")
|
||||||
ajax_template_name = "order/receive_parts.html"
|
ajax_template_name = "order/receive_parts.html"
|
||||||
|
|
||||||
# Where the parts will be going (selected in POST request)
|
# Where the parts will be going (selected in POST request)
|
||||||
@ -445,7 +445,7 @@ class OrderParts(AjaxView):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ajax_form_title = "Order Parts"
|
ajax_form_title = _("Order Parts")
|
||||||
ajax_template_name = 'order/order_wizard/select_parts.html'
|
ajax_template_name = 'order/order_wizard/select_parts.html'
|
||||||
|
|
||||||
# List of Parts we wish to order
|
# List of Parts we wish to order
|
||||||
@ -744,7 +744,7 @@ class POLineItemCreate(AjaxCreateView):
|
|||||||
model = PurchaseOrderLineItem
|
model = PurchaseOrderLineItem
|
||||||
context_object_name = 'line'
|
context_object_name = 'line'
|
||||||
form_class = order_forms.EditPurchaseOrderLineItemForm
|
form_class = order_forms.EditPurchaseOrderLineItemForm
|
||||||
ajax_form_title = 'Add Line Item'
|
ajax_form_title = _('Add Line Item')
|
||||||
|
|
||||||
def post(self, request, *arg, **kwargs):
|
def post(self, request, *arg, **kwargs):
|
||||||
|
|
||||||
@ -859,7 +859,7 @@ class POLineItemEdit(AjaxUpdateView):
|
|||||||
model = PurchaseOrderLineItem
|
model = PurchaseOrderLineItem
|
||||||
form_class = order_forms.EditPurchaseOrderLineItemForm
|
form_class = order_forms.EditPurchaseOrderLineItemForm
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
ajax_form_title = 'Edit Line Item'
|
ajax_form_title = _('Edit Line Item')
|
||||||
|
|
||||||
def get_form(self):
|
def get_form(self):
|
||||||
form = super().get_form()
|
form = super().get_form()
|
||||||
@ -875,10 +875,10 @@ class POLineItemDelete(AjaxDeleteView):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
model = PurchaseOrderLineItem
|
model = PurchaseOrderLineItem
|
||||||
ajax_form_title = 'Delete Line Item'
|
ajax_form_title = _('Delete Line Item')
|
||||||
ajax_template_name = 'order/po_lineitem_delete.html'
|
ajax_template_name = 'order/po_lineitem_delete.html'
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'danger': 'Deleted line item',
|
'danger': _('Deleted line item'),
|
||||||
}
|
}
|
||||||
|
@ -131,11 +131,13 @@ class BomItemResource(ModelResource):
|
|||||||
|
|
||||||
level = Field(attribute='level', readonly=True)
|
level = Field(attribute='level', readonly=True)
|
||||||
|
|
||||||
part = Field(attribute='part', widget=widgets.ForeignKeyWidget(Part))
|
bom_id = Field(attribute='pk')
|
||||||
|
|
||||||
|
parent_part_id = Field(attribute='part', widget=widgets.ForeignKeyWidget(Part))
|
||||||
|
|
||||||
parent_part_name = Field(attribute='part__full_name', readonly=True)
|
parent_part_name = Field(attribute='part__full_name', readonly=True)
|
||||||
|
|
||||||
id = Field(attribute='sub_part', widget=widgets.ForeignKeyWidget(Part))
|
sub_part_id = Field(attribute='sub_part', widget=widgets.ForeignKeyWidget(Part))
|
||||||
|
|
||||||
sub_part_name = Field(attribute='sub_part__full_name', readonly=True)
|
sub_part_name = Field(attribute='sub_part__full_name', readonly=True)
|
||||||
|
|
||||||
@ -147,7 +149,12 @@ class BomItemResource(ModelResource):
|
|||||||
report_skipped = False
|
report_skipped = False
|
||||||
clean_model_instances = True
|
clean_model_instances = True
|
||||||
|
|
||||||
exclude = ['checksum', ]
|
exclude = [
|
||||||
|
'checksum',
|
||||||
|
'id',
|
||||||
|
'part',
|
||||||
|
'sub_part',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class BomItemAdmin(ImportExportModelAdmin):
|
class BomItemAdmin(ImportExportModelAdmin):
|
||||||
|
@ -53,12 +53,18 @@ def ExportBom(part, fmt='csv', cascade=False):
|
|||||||
|
|
||||||
bom_items = []
|
bom_items = []
|
||||||
|
|
||||||
|
uids = []
|
||||||
|
|
||||||
def add_items(items, level):
|
def add_items(items, level):
|
||||||
# Add items at a given layer
|
# Add items at a given layer
|
||||||
for item in items:
|
for item in items:
|
||||||
|
|
||||||
item.level = '-' * level
|
item.level = '-' * level
|
||||||
|
|
||||||
|
# Avoid circular BOM references
|
||||||
|
if item.pk in uids:
|
||||||
|
continue
|
||||||
|
|
||||||
bom_items.append(item)
|
bom_items.append(item)
|
||||||
|
|
||||||
if item.sub_part.assembly:
|
if item.sub_part.assembly:
|
||||||
|
@ -35,6 +35,7 @@ from InvenTree import helpers
|
|||||||
from InvenTree import validators
|
from InvenTree import validators
|
||||||
from InvenTree.models import InvenTreeTree
|
from InvenTree.models import InvenTreeTree
|
||||||
from InvenTree.fields import InvenTreeURLField
|
from InvenTree.fields import InvenTreeURLField
|
||||||
|
from InvenTree.helpers import decimal2string
|
||||||
|
|
||||||
from InvenTree.status_codes import BuildStatus, StockStatus, OrderStatus
|
from InvenTree.status_codes import BuildStatus, StockStatus, OrderStatus
|
||||||
|
|
||||||
@ -1242,11 +1243,11 @@ class BomItem(models.Model):
|
|||||||
|
|
||||||
pmin, pmax = prange
|
pmin, pmax = prange
|
||||||
|
|
||||||
# remove trailing zeros
|
|
||||||
pmin = pmin.normalize()
|
|
||||||
pmax = pmax.normalize()
|
|
||||||
|
|
||||||
if pmin == pmax:
|
if pmin == pmax:
|
||||||
return str(pmin)
|
return decimal2string(pmin)
|
||||||
|
|
||||||
|
# Convert to better string representation
|
||||||
|
pmin = decimal2string(pmin)
|
||||||
|
pmax = decimal2string(pmax)
|
||||||
|
|
||||||
return "{pmin} to {pmax}".format(pmin=pmin, pmax=pmax)
|
return "{pmin} to {pmax}".format(pmin=pmin, pmax=pmax)
|
||||||
|
@ -39,6 +39,9 @@
|
|||||||
{
|
{
|
||||||
title: 'Allocated',
|
title: 'Allocated',
|
||||||
sortable: false,
|
sortable: false,
|
||||||
|
formatter: function(value, row, index, field) {
|
||||||
|
return parseFloat(value);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Status',
|
title: 'Status',
|
||||||
|
@ -53,6 +53,9 @@
|
|||||||
sortable: true,
|
sortable: true,
|
||||||
field: 'quantity',
|
field: 'quantity',
|
||||||
title: 'Uses',
|
title: 'Uses',
|
||||||
|
formatter: function(value, row, index, field) {
|
||||||
|
return parseFloat(value);
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
],
|
],
|
||||||
|
@ -27,7 +27,7 @@ def inrange(n, *args, **kwargs):
|
|||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
def multiply(x, y, *args, **kwargs):
|
def multiply(x, y, *args, **kwargs):
|
||||||
""" Multiply two numbers together """
|
""" Multiply two numbers together """
|
||||||
return x * y
|
return decimal2string(x * y)
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
@ -40,7 +40,7 @@ def add(x, y, *args, **kwargs):
|
|||||||
def part_allocation_count(build, part, *args, **kwargs):
|
def part_allocation_count(build, part, *args, **kwargs):
|
||||||
""" Return the total number of <part> allocated to <build> """
|
""" Return the total number of <part> allocated to <build> """
|
||||||
|
|
||||||
return build.getAllocatedQuantity(part)
|
return decimal2string(build.getAllocatedQuantity(part))
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# Tests for the Part model
|
# Tests for the Part model
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
@ -16,7 +17,7 @@ class TemplateTagTest(TestCase):
|
|||||||
""" Tests for the custom template tag code """
|
""" Tests for the custom template tag code """
|
||||||
|
|
||||||
def test_multiply(self):
|
def test_multiply(self):
|
||||||
self.assertEqual(inventree_extras.multiply(3, 5), 15)
|
self.assertEqual(int(inventree_extras.multiply(3, 5)), 15)
|
||||||
|
|
||||||
def test_version(self):
|
def test_version(self):
|
||||||
self.assertEqual(type(inventree_extras.inventree_version()), str)
|
self.assertEqual(type(inventree_extras.inventree_version()), str)
|
||||||
|
@ -72,7 +72,7 @@ class PartAttachmentCreate(AjaxCreateView):
|
|||||||
"""
|
"""
|
||||||
model = PartAttachment
|
model = PartAttachment
|
||||||
form_class = part_forms.EditPartAttachmentForm
|
form_class = part_forms.EditPartAttachmentForm
|
||||||
ajax_form_title = "Add part attachment"
|
ajax_form_title = _("Add part attachment")
|
||||||
ajax_template_name = "modal_form.html"
|
ajax_template_name = "modal_form.html"
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
@ -115,7 +115,7 @@ class PartAttachmentEdit(AjaxUpdateView):
|
|||||||
model = PartAttachment
|
model = PartAttachment
|
||||||
form_class = part_forms.EditPartAttachmentForm
|
form_class = part_forms.EditPartAttachmentForm
|
||||||
ajax_template_name = 'modal_form.html'
|
ajax_template_name = 'modal_form.html'
|
||||||
ajax_form_title = 'Edit attachment'
|
ajax_form_title = _('Edit attachment')
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
@ -134,13 +134,13 @@ class PartAttachmentDelete(AjaxDeleteView):
|
|||||||
""" View for deleting a PartAttachment """
|
""" View for deleting a PartAttachment """
|
||||||
|
|
||||||
model = PartAttachment
|
model = PartAttachment
|
||||||
ajax_form_title = "Delete Part Attachment"
|
ajax_form_title = _("Delete Part Attachment")
|
||||||
ajax_template_name = "part/attachment_delete.html"
|
ajax_template_name = "part/attachment_delete.html"
|
||||||
context_object_name = "attachment"
|
context_object_name = "attachment"
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return {
|
return {
|
||||||
'danger': 'Deleted part attachment'
|
'danger': _('Deleted part attachment')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ class PartSetCategory(AjaxUpdateView):
|
|||||||
""" View for settings the part category for multiple parts at once """
|
""" View for settings the part category for multiple parts at once """
|
||||||
|
|
||||||
ajax_template_name = 'part/set_category.html'
|
ajax_template_name = 'part/set_category.html'
|
||||||
ajax_form_title = 'Set Part Category'
|
ajax_form_title = _('Set Part Category')
|
||||||
form_class = part_forms.SetPartCategoryForm
|
form_class = part_forms.SetPartCategoryForm
|
||||||
|
|
||||||
category = None
|
category = None
|
||||||
@ -231,7 +231,7 @@ class MakePartVariant(AjaxCreateView):
|
|||||||
model = Part
|
model = Part
|
||||||
form_class = part_forms.EditPartForm
|
form_class = part_forms.EditPartForm
|
||||||
|
|
||||||
ajax_form_title = 'Create Variant'
|
ajax_form_title = _('Create Variant')
|
||||||
ajax_template_name = 'part/variant_part.html'
|
ajax_template_name = 'part/variant_part.html'
|
||||||
|
|
||||||
def get_part_template(self):
|
def get_part_template(self):
|
||||||
@ -301,7 +301,7 @@ class PartDuplicate(AjaxCreateView):
|
|||||||
model = Part
|
model = Part
|
||||||
form_class = part_forms.EditPartForm
|
form_class = part_forms.EditPartForm
|
||||||
|
|
||||||
ajax_form_title = "Duplicate Part"
|
ajax_form_title = _("Duplicate Part")
|
||||||
ajax_template_name = "part/copy_part.html"
|
ajax_template_name = "part/copy_part.html"
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
@ -592,7 +592,7 @@ class PartDetail(DetailView):
|
|||||||
class PartQRCode(QRCodeView):
|
class PartQRCode(QRCodeView):
|
||||||
""" View for displaying a QR code for a Part object """
|
""" View for displaying a QR code for a Part object """
|
||||||
|
|
||||||
ajax_form_title = "Part QR Code"
|
ajax_form_title = _("Part QR Code")
|
||||||
|
|
||||||
def get_qr_data(self):
|
def get_qr_data(self):
|
||||||
""" Generate QR code data for the Part """
|
""" Generate QR code data for the Part """
|
||||||
|
@ -35,7 +35,9 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<div class='panel panel-default'>
|
<div class='panel panel-default'>
|
||||||
<div class='panel-content'>
|
<div class='panel-content'>
|
||||||
|
{% if item.notes %}
|
||||||
{{ item.notes | markdownify }}
|
{{ item.notes | markdownify }}
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
{% extends "stock/stock_app_base.html" %}
|
|
||||||
{% load static %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<h3>Stock list here!</h3>
|
|
||||||
|
|
||||||
<table class='table table-striped table-condensed' data-toolbar='#button-toolbar' id='tracking-table'>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block js_ready %}
|
|
||||||
{{ block.super }}
|
|
||||||
|
|
||||||
loadStockTrackingTable($("#tracking-table"), {
|
|
||||||
params: function(p) {
|
|
||||||
return {
|
|
||||||
ordering: '-date',
|
|
||||||
};
|
|
||||||
},
|
|
||||||
partColumn: true,
|
|
||||||
url: "{% url 'api-stock-track' %}",
|
|
||||||
});
|
|
||||||
|
|
||||||
{% endblock %}
|
|
Loading…
x
Reference in New Issue
Block a user