107 lines
4.3 KiB
Python
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) |