class EditPriceBreakForm(HelperForm): """ Form for creating / editing a supplier price break """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) cost = RoundingDecimalFormField(max_digits=10, decimal_places=5) class Meta: model = SupplierPriceBreak fields = [ 'part', 'quantity', 'cost', 'currency', ]
class EditBomItemForm(HelperForm): """ Form for editing a BomItem object """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) sub_part = PartModelChoiceField(queryset=Part.objects.all(), label=_('Sub part')) class Meta: model = BomItem fields = [ 'part', 'sub_part', 'quantity', 'reference', 'overage', 'note', 'inherited', 'optional', ] # Prevent editing of the part associated with this BomItem widgets = {'part': forms.HiddenInput()}
class SerializeStockForm(HelperForm): """ Form for serializing a StockItem. """ destination = TreeNodeChoiceField(queryset=StockLocation.objects.all(), label='Destination', required=True, help_text='Destination for serialized stock (by default, will remain in current location)') serial_numbers = forms.CharField(label='Serial numbers', required=True, help_text='Unique serial numbers (must match quantity)') note = forms.CharField(label='Notes', required=False, help_text='Add transaction note (optional)') quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) def __init__(self, *args, **kwargs): # Extract the stock item item = kwargs.pop('item', None) if item: self.field_placeholder['serial_numbers'] = item.part.getSerialNumberString(item.quantity) super().__init__(*args, **kwargs) class Meta: model = StockItem fields = [ 'quantity', 'serial_numbers', 'destination', 'note', ]
class EditPartSalePriceBreakForm(HelperForm): """ Form for creating / editing a sale price for a part """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) cost = RoundingDecimalFormField(max_digits=10, decimal_places=5) class Meta: model = PartSellPriceBreak fields = [ 'part', 'quantity', 'cost', 'currency', ]
class EditSalesOrderAllocationForm(HelperForm): quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) class Meta: model = SalesOrderAllocation fields = ['line', 'item', 'quantity']
class EditSalesOrderLineItemForm(HelperForm): """ Form for editing a SalesOrderLineItem object """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) class Meta: model = SalesOrderLineItem fields = ['order', 'part', 'quantity', 'reference', 'notes']
class EditBomItemForm(HelperForm): """ Form for editing a BomItem object """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) class Meta: model = BomItem fields = [ 'part', 'sub_part', 'quantity', 'reference', 'overage', 'note' ] # Prevent editing of the part associated with this BomItem widgets = {'part': forms.HiddenInput()}
class EditSalesOrderAllocationForm(HelperForm): """ Form for editing a SalesOrderAllocation item """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) class Meta: model = SalesOrderAllocation fields = ['line', 'item', 'quantity']
class InstallStockForm(HelperForm): """ Form for manually installing a stock item into another stock item """ part = forms.ModelChoiceField( queryset=Part.objects.all(), widget=forms.HiddenInput() ) stock_item = forms.ModelChoiceField( required=True, queryset=StockItem.objects.filter(StockItem.IN_STOCK_FILTER), help_text=_('Stock item to install') ) quantity_to_install = RoundingDecimalFormField( max_digits=10, decimal_places=5, initial=1, label=_('Quantity'), help_text=_('Stock quantity to assign'), validators=[ MinValueValidator(0.001) ] ) notes = forms.CharField( required=False, help_text=_('Notes') ) class Meta: model = StockItem fields = [ 'part', 'stock_item', 'quantity_to_install', 'notes', ] def clean(self): data = super().clean() stock_item = data.get('stock_item', None) quantity = data.get('quantity_to_install', None) if stock_item and quantity and quantity > stock_item.quantity: raise ValidationError({'quantity_to_install': _('Must not exceed available quantity')}) return data
class EditPartInternalPriceBreakForm(HelperForm): """ Form for creating / editing a internal price for a part """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) class Meta: model = PartInternalPriceBreak fields = [ 'part', 'quantity', 'price', ]
class EditPartSalePriceBreakForm(HelperForm): """Form for creating / editing a sale price for a part.""" quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) class Meta: """Metaclass defines fields for this form""" model = PartSellPriceBreak fields = [ 'part', 'quantity', 'price', ]
class CreateSalesOrderAllocationForm(HelperForm): """ Form for creating a SalesOrderAllocation item. """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) class Meta: model = SalesOrderAllocation fields = [ 'line', 'item', 'quantity', ]
class EditPurchaseOrderLineItemForm(HelperForm): """ Form for editing a PurchaseOrderLineItem object """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) class Meta: model = PurchaseOrderLineItem fields = [ 'order', 'part', 'quantity', 'reference', 'purchase_price', 'destination', 'notes', ]
class EditBuildForm(HelperForm): """ Form for editing a Build object. """ field_prefix = { 'reference': 'BO', 'link': 'fa-link', 'batch': 'fa-layer-group', 'serial-numbers': 'fa-hashtag', 'location': 'fa-map-marker-alt', 'target_date': 'fa-calendar-alt', } field_placeholder = { 'reference': _('Build Order reference'), 'target_date': _('Order target date'), } target_date = DatePickerFormField( label=_('Target Date'), help_text= _('Target date for build completion. Build will be overdue after this date.' )) quantity = RoundingDecimalFormField( max_digits=10, decimal_places=5, label=_('Quantity'), help_text=_('Number of items to build')) class Meta: model = Build fields = [ 'reference', 'title', 'part', 'quantity', 'batch', 'target_date', 'take_from', 'destination', 'parent', 'sales_order', 'link', 'issued_by', 'responsible', ]
class EditPriceBreakForm(HelperForm): """ Form for creating / editing a supplier price break """ quantity = RoundingDecimalFormField( max_digits=10, decimal_places=5, label=_('Quantity'), help_text=_('Price break quantity'), ) class Meta: model = SupplierPriceBreak fields = [ 'part', 'quantity', 'price', ]
class EditBuildItemForm(HelperForm): """ Form for creating (or editing) a BuildItem object. """ quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, help_text=_('Select quantity of stock to allocate')) part_id = forms.IntegerField(required=False, widget=forms.HiddenInput()) class Meta: model = BuildItem fields = [ 'build', 'stock_item', 'quantity', 'install_into', ]