HEX
Server: nginx/1.18.0
System: Linux mail.dakarash.co.id 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User: www-data (33)
PHP: 8.1.2-1ubuntu2.23
Disabled: NONE
Upload Files
File: /home/django/apps/cargochains/projects/forms.py
from django import forms
from . import models as m


class ProjectForm(forms.ModelForm):
    class Meta:
        model = m.Project
        fields = ["name", "ref_number", "category", "status", "start_date", "end_date", "description"]
        widgets = {
            "start_date": forms.DateInput(attrs={"type": "date", "class": "form-control"}),
            "end_date": forms.DateInput(attrs={"type": "date", "class": "form-control"}),
            "description": forms.Textarea(attrs={"rows": 3, "class": "form-control"}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for f in self.fields.values():
            if not isinstance(f.widget, (forms.CheckboxInput,)):
                f.widget.attrs.setdefault("class", "form-control")


# projects/forms.py
from django import forms
from .models import ProjectCost, Project, CostCategory

class ProjectCostForm(forms.ModelForm):
    class Meta:
        model = ProjectCost
        fields = [
            "project", "category", "title", "amount", "currency_code",
            "cost_date", "ref", "notes", "attachment",
        ]
        widgets = {
            "project": forms.Select(attrs={"class": "form-select form-select-sm"}),
            "category": forms.Select(attrs={"class": "form-select form-select-sm"}),
            "title": forms.TextInput(attrs={"class": "form-control form-control-sm", "placeholder": "Cost title"}),
            "amount": forms.NumberInput(attrs={"class": "form-control form-control-sm", "step": "0.01"}),
            "currency_code": forms.TextInput(attrs={"class": "form-control form-control-sm", "maxlength": 3}),
            "cost_date": forms.DateInput(attrs={"type": "date", "class": "form-control form-control-sm"}),
            "ref": forms.TextInput(attrs={"class": "form-control form-control-sm", "placeholder": "Reference"}),
            "notes": forms.Textarea(attrs={"class": "form-control form-control-sm", "rows": 3}),
            "attachment": forms.ClearableFileInput(attrs={"class": "form-control form-control-sm"}),
        }

    def clean_currency_code(self):
        ccy = (self.cleaned_data.get("currency_code") or "").upper().strip()
        return ccy or "IDR"