38240-vm/core/forms.py
2026-02-06 11:27:38 +00:00

107 lines
4.3 KiB
Python

from django import forms
from .models import Supplier, Faktur, Medicine, Batch, StockTransaction, Category
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = ['name', 'description']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control'}),
'description': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
}
class SupplierForm(forms.ModelForm):
class Meta:
model = Supplier
fields = ['name', 'contact_person', 'phone', 'address']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control'}),
'contact_person': forms.TextInput(attrs={'class': 'form-control'}),
'phone': forms.TextInput(attrs={'class': 'form-control'}),
'address': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
}
class MedicineForm(forms.ModelForm):
class Meta:
model = Medicine
fields = ['name', 'category', 'sku', 'unit', 'min_stock', 'main_supplier', 'alternative_supplier']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control'}),
'category': forms.Select(attrs={'class': 'form-control'}),
'sku': forms.TextInput(attrs={'class': 'form-control'}),
'unit': forms.Select(attrs={'class': 'form-control'}),
'min_stock': forms.NumberInput(attrs={'class': 'form-control'}),
'main_supplier': forms.Select(attrs={'class': 'form-control'}),
'alternative_supplier': forms.Select(attrs={'class': 'form-control'}),
}
class FakturForm(forms.ModelForm):
class Meta:
model = Faktur
fields = ['faktur_number', 'supplier', 'date', 'faktur_type', 'notes']
widgets = {
'faktur_number': forms.TextInput(attrs={'class': 'form-control'}),
'supplier': forms.Select(attrs={'class': 'form-control'}),
'date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
'faktur_type': forms.Select(attrs={'class': 'form-control'}),
'notes': forms.Textarea(attrs={'class': 'form-control', 'rows': 2}),
}
class StockInForm(forms.Form):
medicine = forms.ModelChoiceField(
queryset=Medicine.objects.all(),
label="Nama Barang",
widget=forms.Select(attrs={'class': 'form-control select2'})
)
batch_number = forms.CharField(
label="Nomor Batch/Lot",
widget=forms.TextInput(attrs={'class': 'form-control'})
)
expiry_date = forms.DateField(
label="Tanggal Kadaluarsa",
widget=forms.DateInput(attrs={'class': 'form-control', 'type': 'date'})
)
quantity = forms.IntegerField(
label="Jumlah",
widget=forms.NumberInput(attrs={'class': 'form-control'})
)
buying_price = forms.DecimalField(
label="Harga Beli",
widget=forms.NumberInput(attrs={'class': 'form-control'})
)
selling_price = forms.DecimalField(
label="Harga Jual",
widget=forms.NumberInput(attrs={'class': 'form-control'})
)
class StockOutForm(forms.Form):
medicine = forms.ModelChoiceField(
queryset=Medicine.objects.all(),
label="Pilih Barang",
widget=forms.Select(attrs={'class': 'form-control select2', 'id': 'id_medicine_out'})
)
batch = forms.ModelChoiceField(
queryset=Batch.objects.none(),
label="Pilih Batch",
widget=forms.Select(attrs={'class': 'form-control', 'id': 'id_batch_out'})
)
quantity = forms.IntegerField(
label="Jumlah Keluar",
widget=forms.NumberInput(attrs={'class': 'form-control'})
)
note = forms.CharField(
label="Keterangan",
required=False,
widget=forms.TextInput(attrs={'class': 'form-control'})
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if 'medicine' in self.data:
try:
medicine_id = int(self.data.get('medicine'))
self.fields['batch'].queryset = Batch.objects.filter(medicine_id=medicine_id, quantity__gt=0)
except (ValueError, TypeError):
pass
elif self.initial.get('medicine'):
self.fields['batch'].queryset = Batch.objects.filter(medicine_id=self.initial.get('medicine'), quantity__gt=0)