This commit is contained in:
gitea 2025-01-06 07:57:23 +00:00
parent febfb03b56
commit 0b2eb83bf6
7 changed files with 80 additions and 29 deletions

View File

@ -367,6 +367,18 @@ class CarSelectionTable(tables.Table):
class WizardForm1(forms.Form): class WizardForm1(forms.Form):
username = forms.CharField(
widget=forms.TextInput(
attrs={
"class": "form-control",
"placeholder": "Username",
"required": "required",
}
),
error_messages={
"required": _("You must add a username."),
},
)
email = forms.EmailField( email = forms.EmailField(
widget=forms.EmailInput( widget=forms.EmailInput(
attrs={ attrs={

View File

@ -64,20 +64,20 @@ def create_car_location(sender, instance, created, **kwargs):
print(f"Failed to create CarLocation for car {instance.vin}: {e}") print(f"Failed to create CarLocation for car {instance.vin}: {e}")
@receiver(post_save, sender=models.CarReservation) # @receiver(post_save, sender=models.CarReservation)
def update_car_status_on_reservation(sender, instance, created, **kwargs): # def update_car_status_on_reservation(sender, instance, created, **kwargs):
if created: # if created:
car = instance.car # car = instance.car
car.status = models.CarStatusChoices.RESERVED # car.status = models.CarStatusChoices.RESERVED
car.save() # car.save()
@receiver(post_delete, sender=models.CarReservation) # @receiver(post_delete, sender=models.CarReservation)
def update_car_status_on_reservation_delete(sender, instance, **kwargs): # def update_car_status_on_reservation_delete(sender, instance, **kwargs):
car = instance.car # car = instance.car
if not car.is_reserved(): # if not car.is_reserved():
car.status = models.CarStatusChoices.AVAILABLE # car.status = models.CarStatusChoices.AVAILABLE
car.save() # car.save()
# Create Entity # Create Entity
@ -103,17 +103,18 @@ def create_ledger_entity(sender, instance, created, **kwargs):
print(f"Ledger entity created for Dealer: {instance.name}") print(f"Ledger entity created for Dealer: {instance.name}")
# Create Cash Account # Create Cash Account
entity.create_account( asset_ca_cash = entity.create_account(
coa_model=coa, coa_model=coa,
code="1101", code="1010",
role=roles.ASSET_CA_CASH, role=roles.ASSET_CA_CASH,
name=_("Cash"), name=_("Cash"),
balance_type="debit", balance_type="debit",
active=True, active=True,
) )
asset_ca_cash.role_default = True
asset_ca_cash.save()
# Create Accounts Receivable Account # Create Accounts Receivable Account
entity.create_account( asset_ca_receivables = entity.create_account(
coa_model=coa, coa_model=coa,
code="1102", code="1102",
role=roles.ASSET_CA_RECEIVABLES, role=roles.ASSET_CA_RECEIVABLES,
@ -121,9 +122,11 @@ def create_ledger_entity(sender, instance, created, **kwargs):
balance_type="debit", balance_type="debit",
active=True, active=True,
) )
asset_ca_receivables.role_default = True
asset_ca_receivables.save()
# Create Inventory Account # Create Inventory Account
entity.create_account( asset_ca_inventory = entity.create_account(
coa_model=coa, coa_model=coa,
code="1103", code="1103",
role=roles.ASSET_CA_INVENTORY, role=roles.ASSET_CA_INVENTORY,
@ -132,8 +135,10 @@ def create_ledger_entity(sender, instance, created, **kwargs):
active=True, active=True,
) )
asset_ca_inventory.role_default = True
asset_ca_inventory.save()
# Create Accounts Payable Account # Create Accounts Payable Account
entity.create_account( asset_ca_accounts_payable = entity.create_account(
coa_model=coa, coa_model=coa,
code="2101", code="2101",
role=roles.LIABILITY_CL_ACC_PAYABLE, role=roles.LIABILITY_CL_ACC_PAYABLE,
@ -141,8 +146,10 @@ def create_ledger_entity(sender, instance, created, **kwargs):
balance_type="credit", balance_type="credit",
active=True, active=True,
) )
asset_ca_accounts_payable.role_default = True
asset_ca_accounts_payable.save()
# Create Equity Account # Create Equity Account
entity.create_account( asset_ca_equity = entity.create_account(
coa_model=coa, coa_model=coa,
code="3101", code="3101",
role=roles.EQUITY_CAPITAL, role=roles.EQUITY_CAPITAL,
@ -150,9 +157,11 @@ def create_ledger_entity(sender, instance, created, **kwargs):
balance_type="credit", balance_type="credit",
active=True, active=True,
) )
asset_ca_equity.role_default = True
asset_ca_equity.save()
# Create Sales Revenue Account # Create Sales Revenue Account
entity.create_account( asset_ca_revenue = entity.create_account(
coa_model=coa, coa_model=coa,
code="4101", code="4101",
role=roles.INCOME_OPERATIONAL, role=roles.INCOME_OPERATIONAL,
@ -160,9 +169,11 @@ def create_ledger_entity(sender, instance, created, **kwargs):
balance_type="credit", balance_type="credit",
active=True, active=True,
) )
asset_ca_revenue.role_default = True
asset_ca_revenue.save()
# Create Cost of Goods Sold Account # Create Cost of Goods Sold Account
entity.create_account( asset_ca_cogs = entity.create_account(
coa_model=coa, coa_model=coa,
code="5101", code="5101",
role=roles.COGS, role=roles.COGS,
@ -170,9 +181,11 @@ def create_ledger_entity(sender, instance, created, **kwargs):
balance_type="debit", balance_type="debit",
active=True, active=True,
) )
asset_ca_cogs.role_default = True
asset_ca_cogs.save()
# Create Rent Expense Account # Create Rent Expense Account
entity.create_account( expense = entity.create_account(
coa_model=coa, coa_model=coa,
code="6101", code="6101",
role=roles.EXPENSE_OPERATIONAL, role=roles.EXPENSE_OPERATIONAL,
@ -180,6 +193,8 @@ def create_ledger_entity(sender, instance, created, **kwargs):
balance_type="debit", balance_type="debit",
active=True, active=True,
) )
expense.role_default = True
expense.save()
# Create Utilities Expense Account # Create Utilities Expense Account
entity.create_account( entity.create_account(
@ -257,11 +272,12 @@ def create_item_model(sender, instance, created, **kwargs):
# print(f"UOM created: {uom_name}") # print(f"UOM created: {uom_name}")
# else: # else:
# print(f"Using existing UOM: {uom_name}") # print(f"Using existing UOM: {uom_name}")
name = instance.dealer.name
entity = EntityModel.objects.first() entity = EntityModel.objects.filter(name=name).first()
uom = entity.get_uom_all().first() uom = entity.get_uom_all().first()
coa = entity.get_default_coa() coa = entity.get_default_coa()
entity.get_items_all().filter(item_id=instance.vin)
entity.create_item_product( entity.create_item_product(
name=f"{instance.vin}", name=f"{instance.vin}",
item_type=ItemModel.ITEM_TYPE_OTHER, item_type=ItemModel.ITEM_TYPE_OTHER,

View File

@ -70,6 +70,8 @@ from .utils import get_calculations, send_email, get_user_type
from django.contrib.auth.models import User from django.contrib.auth.models import User
from allauth.account import views from allauth.account import views
from django.db.models import Count, F, Value from django.db.models import Count, F, Value
from django.contrib.auth import authenticate
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
@ -117,6 +119,7 @@ def dealer_signup(request, *args, **kwargs):
wf1 = data.get("wizardValidationForm1") wf1 = data.get("wizardValidationForm1")
wf2 = data.get("wizardValidationForm2") wf2 = data.get("wizardValidationForm2")
wf3 = data.get("wizardValidationForm3") wf3 = data.get("wizardValidationForm3")
username = wf1.get("username")
email = wf1.get("email") email = wf1.get("email")
password = wf1.get("password") password = wf1.get("password")
password_confirm = wf1.get("confirm_password") password_confirm = wf1.get("confirm_password")
@ -132,7 +135,9 @@ def dealer_signup(request, *args, **kwargs):
try: try:
with transaction.atomic(): with transaction.atomic():
user = User.objects.create(email=email, password=password) user = User.objects.create(username=username, email=email)
user.set_password(password)
user.save()
models.Dealer.objects.create( models.Dealer.objects.create(
user=user, user=user,
@ -143,7 +148,12 @@ def dealer_signup(request, *args, **kwargs):
phone_number=phone, phone_number=phone,
address=address, address=address,
) )
return JsonResponse({"message": "User created successfully."}, status=200) user = authenticate(request, username=username, password=password)
if user is not None:
return JsonResponse({"message": "User created successfully."}, status=200)
else:
return JsonResponse({"error": "User creation failed."}, status=400)
except Exception as e: except Exception as e:
return JsonResponse({"error": str(e)}, status=400) return JsonResponse({"error": str(e)}, status=400)
@ -475,7 +485,7 @@ def inventory_stats_view(request):
]["total_cars"] += 1 ]["total_cars"] += 1
except Exception as e: except Exception as e:
print(e) print(e)
result = { result = {
"total_cars": cars.count(), "total_cars": cars.count(),
"makes": [ "makes": [
{ {
@ -653,7 +663,10 @@ def manage_reservation(request, reservation_id):
return redirect("car_detail", pk=reservation.car.pk) return redirect("car_detail", pk=reservation.car.pk)
elif action == "cancel": elif action == "cancel":
car = reservation.car
reservation.delete() reservation.delete()
car.status = models.CarStatusChoices.AVAILABLE
car.save()
messages.success(request, _("Reservation canceled successfully.")) messages.success(request, _("Reservation canceled successfully."))
return redirect("car_detail", pk=reservation.car.pk) return redirect("car_detail", pk=reservation.car.pk)
@ -1685,6 +1698,9 @@ class EstimateListView(LoginRequiredMixin, ListView):
template_name = "sales/estimates/estimate_list.html" template_name = "sales/estimates/estimate_list.html"
context_object_name = "estimates" context_object_name = "estimates"
def get_queryset(self):
entity = self.request.user.dealer.entity
return entity.get_estimates()
# class EstimateCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): # class EstimateCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView):
# model = EstimateModel # model = EstimateModel
@ -1810,9 +1826,10 @@ def create_estimate(request):
) )
form = EstimateModelCreateForm(entity_slug=entity.slug, user_model=entity.admin) form = EstimateModelCreateForm(entity_slug=entity.slug, user_model=entity.admin)
car_list = models.Car.objects.filter(dealer=dealer,finances__selling_price__gt=0).exclude(status='reserved').values_list("vin", flat=True)
context = { context = {
"form": form, "form": form,
"items": entity.get_items_all().filter(item_role=ItemModel.ITEM_ROLE_PRODUCT), "items": entity.get_items_all().filter(item_role=ItemModel.ITEM_ROLE_PRODUCT,name__in=[car_list]),
} }
return render(request, "sales/estimates/estimate_form.html", context) return render(request, "sales/estimates/estimate_form.html", context)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

View File

@ -117,6 +117,9 @@ const url = "{% url 'account_signup' %}";
const data = await response.json(); const data = await response.json();
if (response.ok) { if (response.ok) {
notify("success","Account created successfully"); notify("success","Account created successfully");
setTimeout(() => {
window.location.href = "{% url 'account_login' %}";
}, 1000);
} else { } else {
notify("error",data.error); notify("error",data.error);
} }

View File

@ -212,6 +212,7 @@
<label for="{{ form.receiving_date.id_for_label }}" class="form-label"> <label for="{{ form.receiving_date.id_for_label }}" class="form-label">
{% trans 'Receiving Date' %}: {% trans 'Receiving Date' %}:
</label> </label>
{{ form.receiving_date }}
<input <input
class="form-control form-control-sm datetimepicker flatpickr-input" class="form-control form-control-sm datetimepicker flatpickr-input"
id="{{ form.receiving_date.id_for_label }}" id="{{ form.receiving_date.id_for_label }}"

View File

@ -29,7 +29,9 @@
<div class="row align-items-center g-3 g-sm-5 text-start text-sm-start"> <div class="row align-items-center g-3 g-sm-5 text-start text-sm-start">
<div class="col-12 col-sm-auto "> <div class="col-12 col-sm-auto ">
<div class="avatar avatar-3xl avatar-bordered mb-3"> <div class="avatar avatar-3xl avatar-bordered mb-3">
<img class="rounded-circle" src="{{ cars.first.id_car_make.logo.url }}" alt=""> {% if cars.first.id_car_make.logo %}
<img class="rounded-circle" src="{{ cars.first.id_car_make.logo.url }}" alt="">
{% endif %}
</div> </div>
</div> </div>
<div class="col-12 col-sm-auto flex-1"> <div class="col-12 col-sm-auto flex-1">