diff --git a/car_inventory/__pycache__/settings.cpython-311.pyc b/car_inventory/__pycache__/settings.cpython-311.pyc
index e19a2f9c..d9926d9d 100644
Binary files a/car_inventory/__pycache__/settings.cpython-311.pyc and b/car_inventory/__pycache__/settings.cpython-311.pyc differ
diff --git a/inventory/views.py b/inventory/views.py
index 63162e9d..32f11e43 100644
--- a/inventory/views.py
+++ b/inventory/views.py
@@ -207,7 +207,7 @@ def dealer_signup(request, *args, **kwargs):
address = wf3.get("address")
if password != password_confirm:
- return JsonResponse({"error": "Passwords do not match."}, status=400)
+ return JsonResponse({"error": _("Passwords do not match")}, status=400)
try:
with transaction.atomic():
@@ -230,7 +230,7 @@ def dealer_signup(request, *args, **kwargs):
address=address,
)
return JsonResponse(
- {"message": "User created successfully."}, status=200
+ {"message": _("User created successfully")}, status=200
)
except Exception as e:
return JsonResponse({"error": str(e)}, status=400)
@@ -492,7 +492,7 @@ class CarCreateView(LoginRequiredMixin,PermissionRequiredMixin, CreateView):
dealer = get_user_type(self.request)
form.instance.dealer = dealer
form.save()
- messages.success(self.request, "Car saved successfully.")
+ messages.success(self.request, _("Car saved successfully"))
return super().form_valid(form)
def car_history(request,pk):
@@ -934,7 +934,7 @@ class CarFinanceCreateView(LoginRequiredMixin,PermissionRequiredMixin, CreateVie
def form_valid(self, form):
form.instance.car = self.car
- messages.success(self.request, _("Car finance details saved successfully."))
+ messages.success(self.request, _("Car finance details saved successfully"))
return super().form_valid(form)
def get_success_url(self):
@@ -958,7 +958,7 @@ class CarFinanceUpdateView(LoginRequiredMixin,PermissionRequiredMixin, SuccessMe
model = models.CarFinance
form_class = forms.CarFinanceForm
template_name = "inventory/car_finance_form.html"
- success_message = _("Car finance details updated successfully.")
+ success_message = _("Car finance details updated successfully")
permission_required = ['inventory.change_carfinance']
def get_success_url(self):
@@ -988,7 +988,7 @@ class CarUpdateView(LoginRequiredMixin,PermissionRequiredMixin, SuccessMessageMi
model = models.Car
form_class = forms.CarUpdateForm
template_name = "inventory/car_edit.html"
- success_message = _("Car updated successfully.")
+ success_message = _("Car updated successfully")
permission_required = ['inventory.change_car']
def get_success_url(self):
@@ -1002,7 +1002,7 @@ class CarDeleteView(LoginRequiredMixin,PermissionRequiredMixin, SuccessMessageMi
permission_required = ['inventory.delete_car']
def delete(self, request, *args, **kwargs):
- messages.success(request, _("Car deleted successfully."))
+ messages.success(request, _("Car deleted successfully"))
return super().delete(request, *args, **kwargs)
@@ -1020,7 +1020,7 @@ class CarLocationCreateView(LoginRequiredMixin,PermissionRequiredMixin,CreateVie
dealer = get_user_type(self.request)
form.instance.owner = dealer
form.save()
- messages.success(self.request, "Location saved successfully.")
+ messages.success(self.request, _("Location saved successfully"))
return super().form_valid(form)
@@ -1040,7 +1040,7 @@ class CarLocationUpdateView(LoginRequiredMixin,PermissionRequiredMixin,UpdateVie
dealer = get_user_type(self.request)
form.instance.owner = dealer
form.save()
- messages.success(self.request, "Location updated successfully.")
+ messages.success(self.request, _("Location updated successfully"))
return super().form_valid(form)
def get_success_url(self):
@@ -1095,7 +1095,7 @@ def car_transfer_approve(request, car_pk, transfer_pk):
transfer.save()
transfer.car.status = "available"
transfer.car.save()
- messages.success(request, _("Car transfer canceled successfully."))
+ messages.success(request, _("Car transfer canceled successfully"))
models.Notification.objects.create(
user=transfer.from_dealer.user,
message=f"Car transfer request from {transfer.to_dealer} is canceled.",
@@ -1112,7 +1112,7 @@ def car_transfer_approve(request, car_pk, transfer_pk):
user=transfer.to_dealer.user,
message=f"Car transfer request from {transfer.from_dealer} is waiting for your acceptance. Accept",
)
- messages.success(request, _("Car transfer approved successfully."))
+ messages.success(request, _("Car transfer approved successfully"))
return redirect("car_detail", pk=car.pk)
@@ -1124,7 +1124,7 @@ def car_transfer_accept_reject(request, car_pk, transfer_pk):
if status == "rejected":
transfer.status = "reject"
transfer.active = False
- messages.success(request, _("Car transfer rejected successfully."))
+ messages.success(request, _("Car transfer rejected successfully"))
models.Notification.objects.create(
user=transfer.from_dealer.user,
message=f"Car transfer request from {transfer.to_dealer} is rejected.",
@@ -1136,7 +1136,7 @@ def car_transfer_accept_reject(request, car_pk, transfer_pk):
transfer_process = CarTransfer(car, transfer)
success = transfer_process.transfer_car()
if success:
- messages.success(request, _("Car Transfer Completed successfully."))
+ messages.success(request, _("Car Transfer Completed successfully"))
models.Activity.objects.create(content_object=car,notes=f"Transfered from {transfer.from_dealer} to {transfer.to_dealer}",created_by=request.user)
models.Notification.objects.create(
user=transfer.from_dealer.user,
@@ -1169,7 +1169,7 @@ class CustomCardCreateView(LoginRequiredMixin, CreateView):
return context
def get_success_url(self):
- messages.success(self.request, _("Custom Card added successfully."))
+ messages.success(self.request, _("Custom Card added successfully"))
return reverse_lazy("car_detail", kwargs={"pk": self.kwargs["car_pk"]})
@@ -1189,7 +1189,7 @@ class CarRegistrationCreateView(LoginRequiredMixin, CreateView):
return context
def get_success_url(self):
- messages.success(self.request, _("Registration added successfully."))
+ messages.success(self.request, _("Registration added successfully"))
return reverse_lazy("car_detail", kwargs={"pk": self.kwargs["car_pk"]})
@@ -1198,12 +1198,12 @@ def reserve_car_view(request, car_id):
if request.method == "POST":
car = get_object_or_404(models.Car, pk=car_id)
if car.is_reserved():
- messages.error(request, _("This car is already reserved."))
+ messages.error(request, _("This car is already reserved"))
return redirect("car_detail", pk=car.pk)
response = reserve_car(car, request)
return response
return JsonResponse(
- {"success": False, "message": "Invalid request method."}, status=400
+ {"success": False, "message": "Invalid request method"}, status=400
)
@@ -1218,7 +1218,7 @@ def manage_reservation(request, reservation_id):
if action == "renew":
reservation.reserved_until = timezone.now() + timezone.timedelta(hours=24)
reservation.save()
- messages.success(request, _("Reservation renewed successfully."))
+ messages.success(request, _("Reservation renewed successfully"))
return redirect("car_detail", pk=reservation.car.pk)
elif action == "cancel":
@@ -1226,16 +1226,16 @@ def manage_reservation(request, reservation_id):
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)
else:
return JsonResponse(
- {"success": False, "message": _("Invalid action.")}, status=400
+ {"success": False, "message": _("Invalid action")}, status=400
)
return JsonResponse(
- {"success": False, "message": _("Invalid request method.")}, status=400
+ {"success": False, "message": _("Invalid request method")}, status=400
)
@@ -1276,7 +1276,7 @@ class DealerUpdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
form_class = forms.DealerForm
template_name = "dealers/dealer_form.html"
success_url = reverse_lazy("dealer_detail")
- success_message = _("Dealer updated successfully.")
+ success_message = _("Dealer updated successfully")
def get_success_url(self):
return reverse("dealer_detail", kwargs={"pk": self.object.pk})
@@ -1367,7 +1367,7 @@ def CustomerCreateView(request):
if form.is_valid():
if dealer.entity.get_customers().filter(email=form.cleaned_data["email"]).exists():
- messages.error(request, _("Customer with this email already exists."))
+ messages.error(request, _("Customer with this email already exists"))
else:
# Create customer name
customer_name = (
@@ -1391,14 +1391,14 @@ def CustomerCreateView(request):
customer.additional_info.update({"type": "customer"})
customer.save()
- messages.success(request, _("Customer created successfully."))
+ messages.success(request, _("Customer created successfully"))
return redirect("customer_list")
except Exception as e:
messages.error(request, _(f"An error occurred: {str(e)}"))
else:
# Form is invalid, show errors
- messages.error(request, _("Please correct the errors below."))
+ messages.error(request, _("Please correct the errors below"))
return render(request, "customers/customer_form.html", {"form": form})
@@ -1437,7 +1437,7 @@ def CustomerUpdateView(request, pk):
raise Exception(e)
instance.save()
- messages.success(request, _("Customer updated successfully."))
+ messages.success(request, _("Customer updated successfully"))
return redirect("customer_list")
else:
form = forms.CustomerForm(
@@ -1458,7 +1458,7 @@ def delete_customer(request, pk):
customer.save()
user.save()
- messages.success(request, _("Customer deleted successfully."))
+ messages.success(request, _("Customer deleted successfully"))
return redirect("customer_list")
@@ -1490,7 +1490,7 @@ class VendorCreateView(
form_class = forms.VendorForm
template_name = "vendors/vendor_form.html"
success_url = reverse_lazy("vendor_list")
- success_message = _("Vendor created successfully.")
+ success_message = _("Vendor created successfully")
def form_valid(self, form):
dealer = get_user_type(self.request)
@@ -1508,7 +1508,7 @@ class VendorUpdateView(
form_class = forms.VendorForm
template_name = "vendors/vendor_form.html"
success_url = reverse_lazy("vendor_list")
- success_message = _("Vendor updated successfully.")
+ success_message = _("Vendor updated successfully")
@login_required
@@ -1516,7 +1516,7 @@ def delete_vendor(request, pk):
vendor = get_object_or_404(models.Vendor, pk=pk)
# vendor.active = False
vendor.delete()
- messages.success(request, _("Vendor deleted successfully."))
+ messages.success(request, _("Vendor deleted successfully"))
return redirect("vendor_list")
#group
@@ -1545,7 +1545,7 @@ class GroupCreateView(
form_class = forms.GroupForm
template_name = "groups/group_form.html"
success_url = reverse_lazy("group_list")
- success_message = _("Group created successfully.")
+ success_message = _("Group created successfully")
def form_valid(self, form):
dealer = get_user_type(self.request)
@@ -1566,7 +1566,7 @@ class GroupUpdateView(
form_class = forms.GroupForm
template_name = "groups/group_form.html"
success_url = reverse_lazy("group_list")
- success_message = _("Group updated successfully.")
+ success_message = _("Group updated successfully")
def form_valid(self, form):
dealer = get_user_type(self.request)
@@ -1580,7 +1580,7 @@ class GroupUpdateView(
def GroupDeleteview(request, pk):
group = get_object_or_404(models.CustomGroup, pk=pk)
group.delete()
- messages.success(request, _("Group deleted successfully."))
+ messages.success(request, _("Group deleted successfully"))
return redirect("group_list")
@login_required
@@ -1592,7 +1592,7 @@ def GroupPermissionView(request, pk):
permissions = request.POST.getlist("name")
for i in permissions:
group.add_permission(Permission.objects.get(id=int(i)))
- messages.success(request, _("Permission added successfully."))
+ messages.success(request, _("Permission added successfully"))
return redirect("group_detail", pk=group.pk)
form = forms.PermissionForm(initial={"name": group.permissions})
return render(request,"groups/group_permission_form.html",{"group": group, "form": form})
@@ -1610,7 +1610,7 @@ def UserGroupView(request, pk):
cg = models.CustomGroup.objects.get(id=int(i))
staff.add_group(cg.group)
- messages.success(request, _("Group added successfully."))
+ messages.success(request, _("Group added successfully"))
return redirect("user_detail", pk=staff.pk)
form = forms.UserGroupForm(initial={"name": staff.groups})
@@ -1645,7 +1645,7 @@ class UserCreateView(
form_class = forms.StaffForm
template_name = "users/user_form.html"
success_url = reverse_lazy("user_list")
- success_message = _("User created successfully.")
+ success_message = _("User created successfully")
def form_valid(self, form):
dealer = get_user_type(self.request)
@@ -1653,12 +1653,12 @@ class UserCreateView(
allowed_users = quota_dict.get("Users")
if allowed_users is None:
- messages.error(self.request, _("The user quota for staff members is not defined. Please contact support."))
+ messages.error(self.request, _("The user quota for staff members is not defined. Please contact support"))
return self.form_invalid(form)
current_staff_count = dealer.staff.count()
if current_staff_count >= allowed_users:
- messages.error(self.request, _("You have reached the maximum number of staff users allowed for your plan."))
+ messages.error(self.request, _("You have reached the maximum number of staff users allowed for your plan"))
return self.form_invalid(form)
email = form.cleaned_data["email"]
@@ -1690,7 +1690,7 @@ class UserUpdateView(
form_class = forms.StaffForm
template_name = "users/user_form.html"
success_url = reverse_lazy("user_list")
- success_message = _("User updated successfully.")
+ success_message = _("User updated successfully")
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
@@ -1728,7 +1728,7 @@ def UserDeleteview(request, pk):
staff = get_object_or_404(models.Staff, pk=pk)
staff.staff_member.delete()
staff.delete()
- messages.success(request, _("User deleted successfully."))
+ messages.success(request, _("User deleted successfully"))
return redirect("user_list")
@@ -1757,7 +1757,7 @@ def OrganizationCreateView(request):
if request.method == "POST":
form = forms.OrganizationForm(request.POST)
if CustomerModel.objects.filter(email=request.POST["email"]).exists():
- messages.error(request, _("An organization with this email already exists."))
+ messages.error(request, _("An organization with this email already exists"))
return redirect("organization_create")
organization_dict = {
@@ -1784,7 +1784,7 @@ def OrganizationCreateView(request):
customer.additional_info.update({"customer_info": organization_dict})
customer.additional_info.update({"type": "organization"})
customer.save()
- messages.success(request, _("Organization created successfully."))
+ messages.success(request, _("Organization created successfully"))
return redirect("organization_list")
else:
form = forms.OrganizationForm()
@@ -1823,7 +1823,7 @@ def OrganizationUpdateView(request,pk):
instance.additional_info["customer_info"] = organization_dict
instance.additional_info["type"] = "organization"
instance.save()
- messages.success(request, _("Organization created successfully."))
+ messages.success(request, _("Organization created successfully"))
return redirect("organization_list")
else:
form = forms.OrganizationForm(
@@ -1844,7 +1844,7 @@ def OrganizationDeleteView(request, pk):
try:
User.objects.get(email=organization.email).delete()
organization.delete()
- messages.success(request, _("Organization deleted successfully."))
+ messages.success(request, _("Organization deleted successfully"))
except Exception as e:
print("unable to delete user", e)
messages.error(request,_("Unable to delete organization"))
@@ -1874,7 +1874,7 @@ class RepresentativeCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateVi
form_class = forms.RepresentativeForm
template_name = "representatives/representative_form.html"
success_url = reverse_lazy("representative_list")
- success_message = "Representative created successfully."
+ success_message = _("Representative created successfully")
def form_valid(self, form):
if form.is_valid():
@@ -1890,14 +1890,14 @@ class RepresentativeUpdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateVi
form_class = forms.RepresentativeForm
template_name = "representatives/representative_form.html"
success_url = reverse_lazy("representative_list")
- success_message = "Representative updated successfully."
+ success_message = _("Representative updated successfully")
class RepresentativeDeleteView(LoginRequiredMixin, SuccessMessageMixin, DeleteView):
model = models.Representative
template_name = "representatives/representative_confirm_delete.html"
success_url = reverse_lazy("representative_list")
- success_message = "Representative deleted successfully."
+ success_message = _("Representative deleted successfully")
# BANK ACCOUNT
@@ -1920,7 +1920,7 @@ class BankAccountCreateView(LoginRequiredMixin,PermissionRequiredMixin, SuccessM
form_class = BankAccountCreateForm
template_name = "ledger/bank_accounts/bank_account_form.html"
success_url = reverse_lazy("bank_account_list")
- success_message = "Bank account created successfully."
+ success_message = _("Bank account created successfully")
permission_required = ['inventory.view_carfinance']
def form_valid(self, form):
@@ -1949,7 +1949,7 @@ class BankAccountUpdateView(LoginRequiredMixin,PermissionRequiredMixin, SuccessM
form_class = BankAccountUpdateForm
template_name = "ledger/bank_accounts/bank_account_form.html"
success_url = reverse_lazy("bank_account_list")
- success_message = "Bank account updated successfully."
+ success_message = _("Bank account updated successfully")
permission_required = ['inventory.view_carfinance']
def get_form_kwargs(self):
@@ -1966,7 +1966,7 @@ def bank_account_delete(request, pk):
bank_account = get_object_or_404(BankAccountModel, pk=pk)
if request.method == "POST":
bank_account.delete()
- messages.success(request, "Bank account deleted successfully.")
+ messages.success(request, _("Bank account deleted successfully"))
return redirect("bank_account_list")
return render(
request,
@@ -1995,7 +1995,7 @@ class AccountCreateView(LoginRequiredMixin,PermissionRequiredMixin, SuccessMessa
form_class = AccountModelCreateForm
template_name = "ledger/coa_accounts/account_form.html"
success_url = reverse_lazy("account_list")
- success_message = "Account created successfully."
+ success_message = _("Account created successfully")
permission_required = ['inventory.view_carfinance']
def form_valid(self, form):
@@ -2062,7 +2062,7 @@ class AccountUpdateView(LoginRequiredMixin,PermissionRequiredMixin, SuccessMessa
form_class = AccountModelUpdateForm
template_name = "ledger/coa_accounts/account_form.html"
success_url = reverse_lazy("account_list")
- success_message = "Account updated successfully."
+ success_message = _("Account updated successfully")
permission_required = ['inventory.view_carfinance']
def get_form(self, form_class=None):
@@ -2078,7 +2078,7 @@ def account_delete(request, pk):
account = get_object_or_404(AccountModel, pk=pk)
account.delete()
- messages.success(request, "Account deleted successfully.")
+ messages.success(request, _("Account deleted successfully"))
return redirect("account_list")
@@ -2135,30 +2135,30 @@ def create_estimate(request,pk=None):
if not all([items, quantities]):
return JsonResponse(
- {"status": "error", "message": "Items and Quantities are required"},
+ {"status": "error", "message": _("Items and Quantities are required")},
status=400,
)
if isinstance(quantities, list):
if "0" in quantities:
return JsonResponse(
- {"status": "error", "message": "Quantity must be greater than zero"}
+ {"status": "error", "message": _("Quantity must be greater than zero")}
)
else:
if int(quantities) <= 0:
return JsonResponse(
- {"status": "error", "message": "Quantity must be greater than zero"}
+ {"status": "error", "message": _("Quantity must be greater than zero")}
)
if isinstance(items, list):
for item, quantity in zip(items, quantities):
if int(quantity) > models.Car.objects.filter(hash=item,status='available').count():
return JsonResponse(
- {"status": "error", "message": "Quantity must be less than or equal to the number of cars in stock"},
+ {"status": "error", "message": _("Quantity must be less than or equal to the number of cars in stock")},
)
else:
if int(quantities) > models.Car.objects.filter(hash=items,status='available').count():
return JsonResponse(
- {"status": "error", "message": "Quantity must be less than or equal to the number of cars in stock"},
+ {"status": "error", "message": _("Quantity must be less than or equal to the number of cars in stock")},
)
estimate = entity.create_estimate(
estimate_title=title, customer_model=customer, contract_terms=terms
@@ -2240,7 +2240,7 @@ def create_estimate(request,pk=None):
return JsonResponse(
{
"status": "success",
- "message": "Quotation created successfully!",
+ "message": _("Quotation created successfully"),
"url": f"{url}",
}
)
@@ -2255,8 +2255,8 @@ def create_estimate(request,pk=None):
customer = opportunity.customer
form.initial['customer'] = customer
- car_list = models.Car.objects.filter(dealer=dealer,colors__isnull=False,finances__isnull=False,status="available").annotate(color=F('colors__exterior__rgb'),color_name=F('colors__exterior__name')).values_list(
- 'id_car_make__name', 'id_car_model__name','id_car_serie__name','id_car_trim__name','color','color_name','hash').annotate(hash_count=Count('hash')).distinct()
+ car_list = models.Car.objects.filter(dealer=dealer,colors__isnull=False,finances__isnull=False,status="available").annotate(color=F('colors__exterior__rgb'),color_name=F('colors__exterior__arabic_name')).values_list(
+ 'id_car_make__arabic_name', 'id_car_model__arabic_name','id_car_serie__arabic_name','id_car_trim__arabic_name','color','color_name','hash').annotate(hash_count=Count('hash')).distinct()
context = {
"form": form,
"items": [
@@ -2392,29 +2392,29 @@ def estimate_mark_as(request, pk):
if mark:
if mark == "review":
if not estimate.can_review():
- messages.error(request, _("Estimate is not ready for review"))
+ messages.error(request, _("Quotation is not ready for review"))
return redirect("estimate_detail", pk=estimate.pk)
estimate.mark_as_review()
elif mark == "approved":
if not estimate.can_approve():
- messages.error(request, _("Estimate is not ready for approval"))
+ messages.error(request, _("Quotation is not ready for approval"))
return redirect("estimate_detail", pk=estimate.pk)
estimate.mark_as_approved()
- messages.success(request, _("Estimate approved successfully."))
+ messages.success(request, _("Quotation approved successfully"))
elif mark == "rejected":
if not estimate.can_cancel():
- messages.error(request, _("Estimate is not ready for rejection"))
+ messages.error(request, _("Quotation is not ready for rejection"))
return redirect("estimate_detail", pk=estimate.pk)
estimate.mark_as_canceled()
- messages.success(request, _("Estimate canceled successfully."))
+ messages.success(request, _("Quotation canceled successfully"))
elif mark == "completed":
if not estimate.can_complete():
- messages.error(request, _("Estimate is not ready for completion"))
+ messages.error(request, _("Quotation is not ready for completion"))
return redirect("estimate_detail", pk=estimate.pk)
elif mark == "canceled":
if not estimate.can_cancel():
- messages.error(request, _("Estimate is not ready for cancelation"))
+ messages.error(request, _("Quotation is not ready for cancellation"))
return redirect("estimate_detail", pk=estimate.pk)
estimate.mark_as_canceled()
try:
@@ -2423,9 +2423,9 @@ def estimate_mark_as(request, pk):
car.save()
except Exception as e:
pass
- messages.success(request, _("Estimate canceled successfully."))
+ messages.success(request, _("Quotation canceled successfully"))
estimate.save()
- messages.success(request, "Estimate marked as " + mark.upper())
+ messages.success(request, _("Quotation marked as ") + mark.upper())
return redirect("estimate_detail", pk=estimate.pk)
@@ -2585,7 +2585,7 @@ def invoice_create(request, pk):
estimate.mark_as_completed()
estimate.save()
invoice.save()
- messages.success(request, "Invoice created successfully!")
+ messages.success(request, "Invoice created successfully")
return redirect("invoice_detail", pk=invoice.pk)
else:
print(form.errors)
@@ -2649,10 +2649,10 @@ def PaymentCreateView(request, pk):
if not model.is_approved():
model.mark_as_approved(user_model=entity.admin)
if model.amount_paid == model.amount_due:
- messages.error(request,"fully paid")
+ messages.error(request,_("fully paid"))
return redirect(redirect_url, pk=model.pk)
if model.amount_paid + amount > model.amount_due:
- messages.error(request,"Amount exceeds due amount")
+ messages.error(request,_("Amount exceeds due amount"))
return redirect(redirect_url, pk=model.pk)
try:
@@ -2660,7 +2660,7 @@ def PaymentCreateView(request, pk):
set_invoice_payment(dealer, entity, invoice, amount, payment_method)
elif bill:
set_bill_payment(dealer, entity, bill, amount, payment_method)
- messages.success(request, "Payment created successfully!")
+ messages.success(request, _("Payment created successfully"))
return redirect(redirect_url, pk=model.pk)
except Exception as e:
messages.error(request, f"Error creating payment: {str(e)}")
@@ -2724,11 +2724,11 @@ def payment_mark_as_paid(request, pk):
invoice.ledger.post()
invoice.ledger.save()
- messages.success(request, "Payment created successfully!")
+ messages.success(request, _("Payment created successfully"))
else:
messages.error(
request,
- "Invoice is not fully paid. Payment cannot be marked as paid.",
+ _("Invoice is not fully paid, Payment cannot be marked as paid"),
)
except Exception as e:
messages.error(request, f"Error: {str(e)}")
@@ -2853,7 +2853,7 @@ def lead_create(request):
# except Exception as e:
# print(e)
instance.save()
- messages.success(request, "Lead created successfully!")
+ messages.success(request, _("Lead created successfully"))
return redirect("lead_list")
except Exception as e:
messages.error(request, f"Lead was not created ... : {str(e)}")
@@ -2884,7 +2884,7 @@ def LeadDeleteView(request,pk):
except Exception as e:
print(e)
lead.delete()
- messages.success(request, "Lead deleted successfully!")
+ messages.success(request, _("Lead deleted successfully"))
return redirect("lead_list")
@@ -2899,7 +2899,7 @@ def add_note_to_lead(request, pk):
note.content_object = lead
note.created_by = request.user
note.save()
- messages.success(request, "Note added successfully!")
+ messages.success(request, _("Note added successfully"))
return redirect("lead_detail", pk=lead.pk)
else:
form = forms.NoteForm()
@@ -2912,10 +2912,10 @@ def add_note_to_opportunity(request, pk):
if request.method == "POST":
notes = request.POST.get("notes")
if not notes:
- messages.error(request, "Notes field is required.")
+ messages.error(request, _("Notes field is required"))
else:
models.Notes.objects.create(content_object=opportunity, created_by=request.user,note=notes)
- messages.success(request, "Note added successfully!")
+ messages.success(request, _("Note added successfully"))
return redirect("opportunity_detail", pk=opportunity.pk)
@@ -2932,7 +2932,7 @@ def update_note(request, pk):
updated_note.content_object = note.content_object
updated_note.created_by = request.user
updated_note.save()
- messages.success(request, "Note updated successfully!")
+ messages.success(request, _("Note updated successfully"))
return redirect("lead_detail", pk=lead_pk)
else:
form = forms.NoteForm(instance=note)
@@ -2946,7 +2946,7 @@ def delete_note(request, pk):
note = get_object_or_404(models.Notes, pk=pk, created_by=request.user)
lead_pk = note.content_object.pk
note.delete()
- messages.success(request, _("Note deleted successfully."))
+ messages.success(request, _("Note deleted successfully"))
return redirect("lead_detail", pk=lead_pk)
@@ -2956,18 +2956,18 @@ def lead_convert(request, pk):
lead = get_object_or_404(models.Lead, pk=pk)
dealer = get_user_type(request)
if hasattr(lead, "opportunity"):
- messages.error(request, "Lead is already converted to customer.")
+ messages.error(request, _("Lead is already converted to customer"))
else:
customer = lead.convert_to_customer(dealer.entity,lead)
models.Opportunity.objects.create(dealer=dealer,customer=customer,lead=lead,probability=50,stage=models.Stage.PROSPECT,staff=lead.staff,status=models.Status.QUALIFIED)
- messages.success(request, "Lead converted to customer successfully!")
+ messages.success(request, _("Lead converted to customer successfully"))
return redirect("lead_list")
@login_required
@permission_required('inventory.add_appointmentrequest',raise_exception=True)
def schedule_lead(request, pk):
if not request.is_staff:
- messages.error(request, "You do not have permission to schedule lead.")
+ messages.error(request, _("You do not have permission to schedule lead"))
return redirect("lead_list")
dealer = get_user_type(request)
lead = get_object_or_404(models.Lead, pk=pk, dealer=dealer)
@@ -2982,7 +2982,7 @@ def schedule_lead(request, pk):
# Create AppointmentRequest
service = Service.objects.filter(name=instance.scheduled_type).first()
if not service:
- messages.error(request, "Service not found!")
+ messages.error(request, _("Service not found"))
return redirect("lead_list")
try:
@@ -3007,7 +3007,7 @@ def schedule_lead(request, pk):
)
instance.save()
- messages.success(request, "Lead scheduled and appointment created successfully!")
+ messages.success(request, _("Lead scheduled and appointment created successfully"))
return redirect("lead_list")
else:
messages.error(request, f"Invalid form data: {str(form.errors)}")
@@ -3026,7 +3026,7 @@ def lead_transfer(request,pk):
if form.is_valid():
lead.staff = form.cleaned_data["transfer_to"]
lead.save()
- messages.success(request, "Lead transferred successfully!")
+ messages.success(request, _("Lead transferred successfully"))
else:
messages.error(request, f"Invalid form data: {str(form.errors)}")
return redirect("lead_list")
@@ -3040,7 +3040,7 @@ def send_lead_email(request, pk,email_pk=None):
if status == 'draft':
models.Email.objects.create(content_object=lead, created_by=request.user,from_email="manager@tenhal.com", to_email=request.GET.get("to"), subject=request.GET.get("subject"), message=request.GET.get("message"),status=models.EmailStatus.DRAFT)
models.Activity.objects.create(dealer=dealer,content_object=lead, notes="Email Draft",created_by=request.user,activity_type=models.ActionChoices.EMAIL)
- messages.success(request, _("Email Draft successfully!"))
+ messages.success(request, _("Email Draft successfully"))
response = HttpResponse(redirect("lead_detail", pk=lead.pk))
response['HX-Redirect'] = reverse('lead_detail', args=[lead.pk])
return response
@@ -3065,7 +3065,7 @@ def send_lead_email(request, pk,email_pk=None):
)
dealer = get_user_type(request)
models.Activity.objects.create(dealer=dealer,content_object=lead, notes="Email sent",created_by=request.user,activity_type=models.ActionChoices.EMAIL)
- messages.success(request, _("Email sent successfully!"))
+ messages.success(request, _("Email sent successfully"))
return redirect("lead_list")
msg = f"""
السلام عليكم
@@ -3191,7 +3191,7 @@ class OpportunityListView(LoginRequiredMixin,ListView):
def delete_opportunity(request, pk):
opportunity = get_object_or_404(models.Opportunity, pk=pk)
opportunity.delete()
- messages.success(request, _("Opportunity deleted successfully."))
+ messages.success(request, _("Opportunity deleted successfully"))
return redirect("opportunity_list")
@login_required
@@ -3204,7 +3204,7 @@ def opportunity_update_status(request,pk):
if stage:
opportunity.stage = stage
opportunity.save()
- messages.success(request,"Opportunity status updated successfully")
+ messages.success(request,_("Opportunity status updated successfully"))
response = HttpResponse(redirect("opportunity_detail",pk=opportunity.pk))
response['HX-Refresh'] = 'true'
return response
@@ -3226,7 +3226,7 @@ def mark_notification_as_read(request, pk):
notification = get_object_or_404(models.Notification, pk=pk, user=request.user)
notification.is_read = True
notification.save()
- messages.success(request, _("Notification marked as read."))
+ messages.success(request, _("Notification marked as read"))
return redirect("notifications_history")
@@ -3244,7 +3244,7 @@ class ItemServiceCreateView(LoginRequiredMixin,PermissionRequiredMixin, SuccessM
form_class = forms.AdditionalServiceForm
template_name = "items/service/service_create.html"
success_url = reverse_lazy("item_service_list")
- success_message = _("Service created successfully.")
+ success_message = _("Service created successfully")
context_object_name = "service"
permission_required = ["django_ledger.add_itemmodel"]
@@ -3262,7 +3262,7 @@ class ItemServiceUpdateView(LoginRequiredMixin,PermissionRequiredMixin, SuccessM
form_class = forms.AdditionalServiceForm
template_name = "items/service/service_create.html"
success_url = reverse_lazy("item_service_list")
- success_message = _("Service updated successfully.")
+ success_message = _("Service updated successfully")
context_object_name = "service"
permission_required = ["django_ledger.change_itemmodel"]
@@ -3385,7 +3385,7 @@ class InReviewBillView(LoginRequiredMixin,PermissionRequiredMixin, UpdateView):
form_class = InReviewBillModelUpdateForm
template_name = "ledger/bills/bill_update_form.html"
success_url = reverse_lazy("bill_list")
- success_message = _("Bill updated successfully.")
+ success_message = _("Bill updated successfully")
context_object_name = "bill"
permission_required = ["django_ledger.change_billmodel"]
@@ -3411,7 +3411,7 @@ class ApprovedBillModelView(LoginRequiredMixin,PermissionRequiredMixin, UpdateVi
form_class = ApprovedBillModelUpdateForm
template_name = "ledger/bills/bill_update_form.html"
success_url = reverse_lazy("bill_list")
- success_message = _("Bill updated successfully.")
+ success_message = _("Bill updated successfully")
context_object_name = "bill"
permission_required = ["django_ledger.change_billmodel"]
@@ -3440,11 +3440,11 @@ def bill_mark_as_approved(request, pk):
if request.method == "POST":
dealer = get_user_type(request)
if bill.is_approved():
- messages.error(request, _("Bill is already approved."))
+ messages.error(request, _("Bill is already approved"))
return redirect("bill_detail", pk=bill.pk)
bill.mark_as_approved(user_model=dealer.entity.admin)
bill.save()
- messages.success(request, _("Bill marked as approved successfully."))
+ messages.success(request, _("Bill marked as approved successfully"))
return redirect("bill_detail", pk=bill.pk)
@@ -3455,7 +3455,7 @@ def bill_mark_as_paid(request, pk):
if request.method == "POST":
dealer = get_user_type(request)
if bill.is_paid():
- messages.error(request, _("Bill is already paid."))
+ messages.error(request, _("Bill is already paid"))
return redirect("bill_detail", pk=bill.pk)
if bill.amount_due == bill.amount_paid:
bill.mark_as_paid(user_model=dealer.entity.admin)
@@ -3464,9 +3464,9 @@ def bill_mark_as_paid(request, pk):
bill.ledger.post_journal_entries()
bill.ledger.post()
bill.ledger.save()
- messages.success(request, _("Bill marked as paid successfully."))
+ messages.success(request, _("Bill marked as paid successfully"))
else:
- messages.error(request, _("Amount paid is not equal to amount due."))
+ messages.error(request, _("Amount paid is not equal to amount due"))
return redirect("bill_detail", pk=bill.pk)
@login_required
@@ -3486,18 +3486,18 @@ def bill_create(request):
if not all([items, quantities]):
return JsonResponse(
- {"status": "error", "message": "Items and Quantities are required"},
+ {"status": "error", "message": _("Items and Quantities are required")},
status=400,
)
if isinstance(quantities, list):
if "0" in quantities:
return JsonResponse(
- {"status": "error", "message": "Quantity must be greater than zero"}
+ {"status": "error", "message": _("Quantity must be greater than zero")}
)
else:
if int(quantities) <= 0:
return JsonResponse(
- {"status": "error", "message": "Quantity must be greater than zero"}
+ {"status": "error", "message": _("Quantity must be greater than zero")}
)
bill = entity.create_bill(vendor_model=vendor, terms=terms)
@@ -3558,7 +3558,7 @@ def bill_create(request):
return JsonResponse(
{
"status": "success",
- "message": "Bill created successfully!",
+ "message": _("Bill created successfully"),
"url": f"{url}",
}
)
@@ -3649,7 +3649,7 @@ def send_email_view(request, pk):
)
estimate.mark_as_review()
- messages.success(request, _("Email sent successfully!"))
+ messages.success(request, _("Email sent successfully"))
return redirect("estimate_detail", pk=estimate.pk)
@@ -3893,7 +3893,7 @@ class PayableNetAPIView(DjangoLedgerSecurityMixIn, EntityUnitMixIn, View):
})
return JsonResponse({
- 'message': 'Unauthorized'
+ 'message': _('Unauthorized')
}, status=401)
@@ -3919,7 +3919,7 @@ class ReceivableNetAPIView(DjangoLedgerSecurityMixIn, EntityUnitMixIn, View):
})
return JsonResponse({
- 'message': 'Unauthorized'
+ 'message': _('Unauthorized')
}, status=401)
@@ -3968,7 +3968,7 @@ class PnLAPIView(DjangoLedgerSecurityMixIn, EntityUnitMixIn, View):
})
return JsonResponse({
- 'message': 'Unauthorized'
+ 'message': _('Unauthorized')
}, status=401)
@@ -4021,7 +4021,7 @@ def DealerSettingsView(request,pk):
instance = form.save(commit=False)
instance.dealer = dealer
instance.save()
- messages.success(request, 'Settings updated')
+ messages.success(request, _('Settings updated'))
return redirect('dealer_detail', pk=dealer.pk)
else:
print(form.errors)
@@ -4134,7 +4134,7 @@ class JournalEntryCreateView(LoginRequiredMixin,SuccessMessageMixin, CreateView)
template_name = "ledger/journal_entry/journal_entry_form.html"
form_class = forms.JournalEntryModelCreateForm
ledger_model = None
- success_message = "Journal Entry created"
+ success_message = _("Journal Entry created")
def get_form(self, form_class=None):
dealer = get_user_type(self.request)
@@ -4160,7 +4160,7 @@ def JournalEntryDeleteView(request,pk):
journal_entry = get_object_or_404(JournalEntryModel, pk=pk)
ledger = journal_entry.ledger
if not journal_entry.can_delete():
- messages.error(request, 'Journal Entry cannot be deleted')
+ messages.error(request, _('Journal Entry cannot be deleted'))
return redirect("journalentry_list", pk=ledger.pk)
journal_entry.delete()
messages.success(request, 'Journal Entry deleted')
@@ -4187,7 +4187,7 @@ class JournalEntryModelTXSDetailView(JournalEntryModelTXSDetailViewBase):
def ledger_lock_all_journals(request,entity_slug,pk):
ledger = LedgerModel.objects.filter(pk=pk).first()
if ledger.is_locked():
- messages.error(request, "Ledger is already locked.")
+ messages.error(request, _("Ledger is already locked"))
return redirect("journalentry_list", pk=ledger.pk)
ledger.lock_journal_entries()
ledger.lock()
@@ -4197,7 +4197,7 @@ def ledger_lock_all_journals(request,entity_slug,pk):
def ledger_unlock_all_journals(request,entity_slug,pk):
ledger = LedgerModel.objects.filter(pk=pk).first()
if not ledger.is_locked():
- messages.error(request, "Ledger is already Unlocked.")
+ messages.error(request, _("Ledger is already Unlocked"))
return redirect("journalentry_list", pk=ledger.pk)
ledger.unlock()
@@ -4211,7 +4211,7 @@ def ledger_unlock_all_journals(request,entity_slug,pk):
def ledger_post_all_journals(request,entity_slug,pk):
ledger = LedgerModel.objects.filter(pk=pk).first()
if ledger.is_posted():
- messages.error(request, "Ledger is already posted.")
+ messages.error(request, _("Ledger is already posted"))
return redirect("journalentry_list", pk=ledger.pk)
ledger.post_journal_entries()
ledger.post()
@@ -4221,7 +4221,7 @@ def ledger_post_all_journals(request,entity_slug,pk):
def ledger_unpost_all_journals(request,entity_slug,pk):
ledger = LedgerModel.objects.filter(pk=pk).first()
if not ledger.is_posted():
- messages.error(request, "Ledger is already Unposted.")
+ messages.error(request, _("Ledger is already Unposted"))
return redirect("journalentry_list", pk=ledger.pk)
qs = ledger.journal_entries.posted()
for je in qs:
diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po
index 384b5241..d08254b9 100644
--- a/locale/ar/LC_MESSAGES/django.po
+++ b/locale/ar/LC_MESSAGES/django.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-03-20 04:04+0300\n"
+"POT-Creation-Date: 2025-03-22 06:21+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -87,7 +87,7 @@ msgid "You must add an email."
msgstr "يجب إضافة بريد إلكتروني."
#: inventory/forms.py:474 inventory/forms.py:478
-#: templates/account/login.html:35 templates/account/login.html:37
+#: templates/account/login.html:36 templates/account/login.html:38
#: venv/lib/python3.11/site-packages/django_ledger/forms/auth.py:15
msgid "Password"
msgstr "كلمة المرور"
@@ -879,7 +879,7 @@ msgid "Dealers"
msgstr "المعارض"
#: inventory/models.py:961 inventory/signals.py:142 templates/header.html:29
-#: templates/header.html:64 templates/header.html:69 templates/welcome.html:20
+#: templates/header.html:64 templates/header.html:69 templates/welcome.html:19
#: venv/lib/python3.11/site-packages/django_ledger/io/roles.py:440
#: venv/lib/python3.11/site-packages/django_ledger/io/roles.py:526
#: venv/lib/python3.11/site-packages/django_ledger/models/items.py:521
@@ -962,7 +962,7 @@ msgstr "الموقع الإلكتروني"
#: inventory/models.py:1035 inventory/models.py:1065 inventory/models.py:1114
#: inventory/models.py:1196 inventory/models.py:1467
-#: templates/account/login.html:28 templates/account/login.html:30
+#: templates/account/login.html:29 templates/account/login.html:31
#: templates/administration/display_appointment.html:49
#: templates/administration/manage_staff_personal_info.html:29
#: templates/administration/staff_list.html:35
@@ -1739,7 +1739,7 @@ msgstr "ناجحة"
msgid "error"
msgstr "خطأ"
-#: inventory/utils.py:56 templates/account/login.html:47
+#: inventory/utils.py:56 templates/account/login.html:48
#: templates/account/password_change.html:28
msgid "Forgot Password?"
msgstr "نسيت كلمة المرور؟"
@@ -1748,6 +1748,24 @@ msgstr "نسيت كلمة المرور؟"
msgid "Car reserved successfully."
msgstr "تم حجز السيارة بنجاح."
+#: inventory/views.py:210
+#, fuzzy
+#| msgid "Passwords do not match."
+msgid "Passwords do not match"
+msgstr "كلمات المرور غير متطابقة."
+
+#: inventory/views.py:233 inventory/views.py:1648
+#, fuzzy
+#| msgid "User created successfully."
+msgid "User created successfully"
+msgstr "تم إنشاء المستخدم بنجاح."
+
+#: inventory/views.py:495
+#, fuzzy
+#| msgid "Car reserved successfully."
+msgid "Car saved successfully"
+msgstr "تم حجز السيارة بنجاح."
+
#: inventory/views.py:526
msgid "VIN number exists"
msgstr "رقم الهيكل موجود مسبقاً"
@@ -1759,67 +1777,111 @@ msgid "inventory"
msgstr "المخزون"
#: inventory/views.py:937
-msgid "Car finance details saved successfully."
+#, fuzzy
+#| msgid "Car finance details saved successfully."
+msgid "Car finance details saved successfully"
msgstr "تم حفظ تفاصيل المالية للسيارة بنجاح."
#: inventory/views.py:961
-msgid "Car finance details updated successfully."
+#, fuzzy
+#| msgid "Car finance details updated successfully."
+msgid "Car finance details updated successfully"
msgstr "تم تحديث تفاصيل المالية للسيارة بنجاح."
#: inventory/views.py:991
-msgid "Car updated successfully."
+#, fuzzy
+#| msgid "Car updated successfully."
+msgid "Car updated successfully"
msgstr "تم تحديث السيارة بنجاح"
#: inventory/views.py:1005
-msgid "Car deleted successfully."
+#, fuzzy
+#| msgid "Car deleted successfully."
+msgid "Car deleted successfully"
msgstr "تم حذف السيارة بنجاح."
+#: inventory/views.py:1023
+#, fuzzy
+#| msgid "Day off saved successfully."
+msgid "Location saved successfully"
+msgstr "تم حفظ يوم الإجازة بنجاح."
+
+#: inventory/views.py:1043
+#, fuzzy
+#| msgid "Email updated successfully!"
+msgid "Location updated successfully"
+msgstr "تم تحديث البريد الإلكتروني بنجاح!"
+
#: inventory/views.py:1098
-msgid "Car transfer canceled successfully."
+#, fuzzy
+#| msgid "Car transfer canceled successfully."
+msgid "Car transfer canceled successfully"
msgstr "تم إلغاء نقل السيارة بنجاح."
#: inventory/views.py:1115
-msgid "Car transfer approved successfully."
+#, fuzzy
+#| msgid "Car transfer approved successfully."
+msgid "Car transfer approved successfully"
msgstr "تمت الموافقة على نقل السيارة بنجاح."
#: inventory/views.py:1127
-msgid "Car transfer rejected successfully."
+#, fuzzy
+#| msgid "Car transfer rejected successfully."
+msgid "Car transfer rejected successfully"
msgstr "تم رفض نقل السيارة بنجاح."
#: inventory/views.py:1139
-msgid "Car Transfer Completed successfully."
+#, fuzzy
+#| msgid "Car Transfer Completed successfully."
+msgid "Car Transfer Completed successfully"
msgstr "تم إكمال نقل السيارة بنجاح."
#: inventory/views.py:1172
-msgid "Custom Card added successfully."
+#, fuzzy
+#| msgid "Custom Card added successfully."
+msgid "Custom Card added successfully"
msgstr "تم إضافة البطاقة الجمركية بنجاح."
#: inventory/views.py:1192
-msgid "Registration added successfully."
+#, fuzzy
+#| msgid "Registration added successfully."
+msgid "Registration added successfully"
msgstr "تم إلغاء الحجز بنجاح."
#: inventory/views.py:1201
-msgid "This car is already reserved."
+#, fuzzy
+#| msgid "This car is already reserved."
+msgid "This car is already reserved"
msgstr "هذه السيارة محجوزة بالفعل."
#: inventory/views.py:1221
-msgid "Reservation renewed successfully."
+#, fuzzy
+#| msgid "Reservation renewed successfully."
+msgid "Reservation renewed successfully"
msgstr "تم تجديد الحجز بنجاح"
#: inventory/views.py:1229
-msgid "Reservation canceled successfully."
+#, fuzzy
+#| msgid "Reservation canceled successfully."
+msgid "Reservation canceled successfully"
msgstr "تم إلغاء الحجز بنجاح."
#: inventory/views.py:1234
-msgid "Invalid action."
+#, fuzzy
+#| msgid "Invalid action."
+msgid "Invalid action"
msgstr "إجراء غير صالح."
#: inventory/views.py:1238
-msgid "Invalid request method."
+#, fuzzy
+#| msgid "Invalid request method."
+msgid "Invalid request method"
msgstr "طريقة الطلب غير صالحة"
#: inventory/views.py:1279
-msgid "Dealer updated successfully."
+#, fuzzy
+#| msgid "Dealer updated successfully."
+msgid "Dealer updated successfully"
msgstr "تم تحديث المعرض بنجاح."
#: inventory/views.py:1286 templates/header.html:190
@@ -1827,175 +1889,429 @@ msgid "customers"
msgstr "العملاء"
#: inventory/views.py:1370
-msgid "Customer with this email already exists."
+#, fuzzy
+#| msgid "Customer with this email already exists."
+msgid "Customer with this email already exists"
msgstr "عميل بهذا البريد الإلكتروني موجود بالفعل."
#: inventory/views.py:1394
-msgid "Customer created successfully."
+#, fuzzy
+#| msgid "Customer created successfully."
+msgid "Customer created successfully"
msgstr "تم إنشاء العميل بنجاح."
#: inventory/views.py:1401
-msgid "Please correct the errors below."
+#, fuzzy
+#| msgid "Please correct the errors below."
+msgid "Please correct the errors below"
msgstr "يرجى تصحيح الأخطاء أدناه."
#: inventory/views.py:1440
-msgid "Customer updated successfully."
+#, fuzzy
+#| msgid "Customer updated successfully."
+msgid "Customer updated successfully"
msgstr "تم تحديث العميل بنجاح."
#: inventory/views.py:1461
-msgid "Customer deleted successfully."
+#, fuzzy
+#| msgid "Customer deleted successfully."
+msgid "Customer deleted successfully"
msgstr "تم حذف العميل بنجاح."
#: inventory/views.py:1493
-msgid "Vendor created successfully."
+#, fuzzy
+#| msgid "Vendor created successfully."
+msgid "Vendor created successfully"
msgstr "تم إنشاء المورد بنجاح."
#: inventory/views.py:1511
-msgid "Vendor updated successfully."
+#, fuzzy
+#| msgid "Vendor updated successfully."
+msgid "Vendor updated successfully"
msgstr "تم تحديث المورد بنجاح"
#: inventory/views.py:1519
-msgid "Vendor deleted successfully."
+#, fuzzy
+#| msgid "Vendor deleted successfully."
+msgid "Vendor deleted successfully"
msgstr "تم حذف المورد بنجاح."
#: inventory/views.py:1548
-msgid "Group created successfully."
+#, fuzzy
+#| msgid "Group created successfully."
+msgid "Group created successfully"
msgstr "تم إنشاء المجموعة بنجاح."
#: inventory/views.py:1569
-msgid "Group updated successfully."
+#, fuzzy
+#| msgid "Group updated successfully."
+msgid "Group updated successfully"
msgstr "تم تحديث المجموعة بنجاح."
#: inventory/views.py:1583
-msgid "Group deleted successfully."
+#, fuzzy
+#| msgid "Group deleted successfully."
+msgid "Group deleted successfully"
msgstr "تم حذف المجموعة بنجاح."
#: inventory/views.py:1595
-msgid "Permission added successfully."
+#, fuzzy
+#| msgid "Permission added successfully."
+msgid "Permission added successfully"
msgstr "تمت إضافة الإذن بنجاح."
#: inventory/views.py:1613
-msgid "Group added successfully."
+#, fuzzy
+#| msgid "Group added successfully."
+msgid "Group added successfully"
msgstr "تمت إضافة المجموعة بنجاح."
-#: inventory/views.py:1648
-msgid "User created successfully."
-msgstr "تم إنشاء المستخدم بنجاح."
-
#: inventory/views.py:1656
-msgid ""
-"The user quota for staff members is not defined. Please contact support."
+#, fuzzy
+#| msgid ""
+#| "The user quota for staff members is not defined. Please contact support."
+msgid "The user quota for staff members is not defined. Please contact support"
msgstr "لم يتم تحديد الحصة المخصصة لأعضاء الفريق. يرجى الاتصال بالدعم."
#: inventory/views.py:1661
+#, fuzzy
+#| msgid ""
+#| "You have reached the maximum number of staff users allowed for your plan."
msgid ""
-"You have reached the maximum number of staff users allowed for your plan."
+"You have reached the maximum number of staff users allowed for your plan"
msgstr "لقد وصلت إلى الحد الأقصى لعدد أعضاء الفريق المسموح به في خطتك."
#: inventory/views.py:1693
-msgid "User updated successfully."
+#, fuzzy
+#| msgid "User updated successfully."
+msgid "User updated successfully"
msgstr "تم تحديث المستخدم بنجاح"
#: inventory/views.py:1731
-msgid "User deleted successfully."
+#, fuzzy
+#| msgid "User deleted successfully."
+msgid "User deleted successfully"
msgstr "تم حذف المستخدم بنجاح."
#: inventory/views.py:1760
-msgid "An organization with this email already exists."
+#, fuzzy
+#| msgid "An organization with this email already exists."
+msgid "An organization with this email already exists"
msgstr "توجد بالفعل منظمة بهذا البريد الإلكتروني."
#: inventory/views.py:1787 inventory/views.py:1826
-msgid "Organization created successfully."
+#, fuzzy
+#| msgid "Organization created successfully."
+msgid "Organization created successfully"
msgstr "تم إنشاء المنظمة بنجاح."
#: inventory/views.py:1847
-msgid "Organization deleted successfully."
+#, fuzzy
+#| msgid "Organization deleted successfully."
+msgid "Organization deleted successfully"
msgstr "تم حذف المنظمة بنجاح."
#: inventory/views.py:1850
msgid "Unable to delete organization"
msgstr "غير قادر على حذف المنظمة"
+#: inventory/views.py:1877
+#, fuzzy
+#| msgid "Service created successfully."
+msgid "Representative created successfully"
+msgstr "تم إنشاء الخدمة بنجاح."
+
+#: inventory/views.py:1893
+#, fuzzy
+#| msgid "Service updated successfully."
+msgid "Representative updated successfully"
+msgstr "تم تحديث الخدمة بنجاح."
+
+#: inventory/views.py:1900
+#, fuzzy
+#| msgid "Service deleted successfully!"
+msgid "Representative deleted successfully"
+msgstr "تم حذف الخدمة بنجاح!"
+
+#: inventory/views.py:1923
+#, fuzzy
+#| msgid "Organization created successfully."
+msgid "Bank account created successfully"
+msgstr "تم إنشاء المنظمة بنجاح."
+
+#: inventory/views.py:1952
+#, fuzzy
+#| msgid "Group updated successfully."
+msgid "Bank account updated successfully"
+msgstr "تم تحديث المجموعة بنجاح."
+
+#: inventory/views.py:1969
+#, fuzzy
+#| msgid "Note deleted successfully."
+msgid "Bank account deleted successfully"
+msgstr "تم حذف الملاحظة بنجاح."
+
+#: inventory/views.py:1998
+#, fuzzy
+#| msgid "Group created successfully."
+msgid "Account created successfully"
+msgstr "تم إنشاء المجموعة بنجاح."
+
+#: inventory/views.py:2065
+#, fuzzy
+#| msgid "Group updated successfully."
+msgid "Account updated successfully"
+msgstr "تم تحديث المجموعة بنجاح."
+
+#: inventory/views.py:2081
+#, fuzzy
+#| msgid "Note deleted successfully."
+msgid "Account deleted successfully"
+msgstr "تم حذف الملاحظة بنجاح."
+
+#: inventory/views.py:2138 inventory/views.py:3489
+msgid "Items and Quantities are required"
+msgstr ""
+
+#: inventory/views.py:2145 inventory/views.py:2150 inventory/views.py:3495
+#: inventory/views.py:3500
+#, fuzzy
+#| msgid "Slot duration must be greater than 0"
+msgid "Quantity must be greater than zero"
+msgstr "يجب أن تكون مدة الفاصل الزمني أكبر من 0."
+
+#: inventory/views.py:2156 inventory/views.py:2161
+msgid "Quantity must be less than or equal to the number of cars in stock"
+msgstr ""
+
+#: inventory/views.py:2243
+#, fuzzy
+#| msgid "Organization created successfully."
+msgid "Quotation created successfully"
+msgstr "تم إنشاء المنظمة بنجاح."
+
#: inventory/views.py:2395
-msgid "Estimate is not ready for review"
+#, fuzzy
+#| msgid "Estimate is not ready for review"
+msgid "Quotation is not ready for review"
msgstr "العرض غير جاهز للمراجعة."
#: inventory/views.py:2401
-msgid "Estimate is not ready for approval"
+#, fuzzy
+#| msgid "Estimate is not ready for approval"
+msgid "Quotation is not ready for approval"
msgstr "العرض غير جاهز للموافقة."
#: inventory/views.py:2404
-msgid "Estimate approved successfully."
+#, fuzzy
+#| msgid "Estimate approved successfully."
+msgid "Quotation approved successfully"
msgstr "تمت الموافقة على العرض بنجاح."
#: inventory/views.py:2407
-msgid "Estimate is not ready for rejection"
+#, fuzzy
+#| msgid "Estimate is not ready for rejection"
+msgid "Quotation is not ready for rejection"
msgstr "العرض غير جاهز للرفض."
#: inventory/views.py:2410 inventory/views.py:2426
-msgid "Estimate canceled successfully."
-msgstr "تم إلغاء العرض بنجاح."
+#, fuzzy
+#| msgid "Reservation canceled successfully."
+msgid "Quotation canceled successfully"
+msgstr "تم إلغاء الحجز بنجاح."
#: inventory/views.py:2413
-msgid "Estimate is not ready for completion"
+#, fuzzy
+#| msgid "Estimate is not ready for completion"
+msgid "Quotation is not ready for completion"
msgstr "العرض غير جاهز للإكمال."
#: inventory/views.py:2417
-msgid "Estimate is not ready for cancelation"
+#, fuzzy
+#| msgid "Estimate is not ready for cancelation"
+msgid "Quotation is not ready for cancellation"
msgstr "العرض غير جاهز للإلغاء."
-#: inventory/views.py:2949
-msgid "Note deleted successfully."
+#: inventory/views.py:2428
+#, fuzzy
+#| msgid "Notification marked as read."
+msgid "Quotation marked as "
+msgstr "تم تمييز الإشعار كمقروء."
+
+#: inventory/views.py:2652
+msgid "fully paid"
+msgstr ""
+
+#: inventory/views.py:2655
+#, fuzzy
+#| msgid "Amount Received"
+msgid "Amount exceeds due amount"
+msgstr "المبلغ المستلم"
+
+#: inventory/views.py:2663 inventory/views.py:2727
+#, fuzzy
+#| msgid "Vendor created successfully."
+msgid "Payment created successfully"
+msgstr "تم إنشاء المورد بنجاح."
+
+#: inventory/views.py:2731
+msgid "Invoice is not fully paid, Payment cannot be marked as paid"
+msgstr ""
+
+#: inventory/views.py:2856
+#, fuzzy
+#| msgid "Vendor created successfully."
+msgid "Lead created successfully"
+msgstr "تم إنشاء المورد بنجاح."
+
+#: inventory/views.py:2887
+#, fuzzy
+#| msgid "Car deleted successfully."
+msgid "Lead deleted successfully"
+msgstr "تم حذف السيارة بنجاح."
+
+#: inventory/views.py:2902 inventory/views.py:2918
+#, fuzzy
+#| msgid "Note deleted successfully."
+msgid "Note added successfully"
msgstr "تم حذف الملاحظة بنجاح."
+#: inventory/views.py:2915
+#, fuzzy
+#| msgid "This field is required."
+msgid "Notes field is required"
+msgstr "هذا الحقل مطلوب."
+
+#: inventory/views.py:2935
+#, fuzzy
+#| msgid "User updated successfully."
+msgid "Note updated successfully"
+msgstr "تم تحديث المستخدم بنجاح"
+
+#: inventory/views.py:2949
+#, fuzzy
+#| msgid "Note deleted successfully."
+msgid "Note deleted successfully"
+msgstr "تم حذف الملاحظة بنجاح."
+
+#: inventory/views.py:2959
+msgid "Lead is already converted to customer"
+msgstr ""
+
+#: inventory/views.py:2963
+#, fuzzy
+#| msgid "Dealer updated successfully."
+msgid "Lead converted to customer successfully"
+msgstr "تم تحديث المعرض بنجاح."
+
+#: inventory/views.py:2970
+#, fuzzy
+#| msgid "You do not have permission to access this appointment."
+msgid "You do not have permission to schedule lead"
+msgstr "ليس لديك إذن للوصول إلى هذا الموعد."
+
+#: inventory/views.py:2985
+#, fuzzy
+#| msgid "User not found"
+msgid "Service not found"
+msgstr "المستخدم غير موجود"
+
+#: inventory/views.py:3010
+#, fuzzy
+#| msgid "Appointment updated successfully."
+msgid "Lead scheduled and appointment created successfully"
+msgstr "تم تحديث الموعد بنجاح."
+
+#: inventory/views.py:3029
+#, fuzzy
+#| msgid "Car transfer approved successfully."
+msgid "Lead transferred successfully"
+msgstr "تمت الموافقة على نقل السيارة بنجاح."
+
#: inventory/views.py:3043
-msgid "Email Draft successfully!"
+#, fuzzy
+#| msgid "Email Draft successfully!"
+msgid "Email Draft successfully"
msgstr "تم حفظ مسودة البريد الإلكتروني بنجاح!"
#: inventory/views.py:3068 inventory/views.py:3652
-msgid "Email sent successfully!"
+#, fuzzy
+#| msgid "Email sent successfully!"
+msgid "Email sent successfully"
msgstr "تم إرسال البريد الإلكتروني بنجاح!"
#: inventory/views.py:3194
-msgid "Opportunity deleted successfully."
+#, fuzzy
+#| msgid "Opportunity deleted successfully."
+msgid "Opportunity deleted successfully"
+msgstr "تم حذف الفرصة بنجاح."
+
+#: inventory/views.py:3207
+#, fuzzy
+#| msgid "Opportunity deleted successfully."
+msgid "Opportunity status updated successfully"
msgstr "تم حذف الفرصة بنجاح."
#: inventory/views.py:3229
-msgid "Notification marked as read."
+#, fuzzy
+#| msgid "Notification marked as read."
+msgid "Notification marked as read"
msgstr "تم تمييز الإشعار كمقروء."
#: inventory/views.py:3247
-msgid "Service created successfully."
+#, fuzzy
+#| msgid "Service created successfully."
+msgid "Service created successfully"
msgstr "تم إنشاء الخدمة بنجاح."
#: inventory/views.py:3265
-msgid "Service updated successfully."
+#, fuzzy
+#| msgid "Service updated successfully."
+msgid "Service updated successfully"
msgstr "تم تحديث الخدمة بنجاح."
#: inventory/views.py:3388 inventory/views.py:3414
-msgid "Bill updated successfully."
+#, fuzzy
+#| msgid "Bill updated successfully."
+msgid "Bill updated successfully"
msgstr "تم تحديث الفاتورة بنجاح."
#: inventory/views.py:3443
-msgid "Bill is already approved."
+#, fuzzy
+#| msgid "Bill is already approved."
+msgid "Bill is already approved"
msgstr "تمت الموافقة على الفاتورة مسبقًا."
#: inventory/views.py:3447
-msgid "Bill marked as approved successfully."
+#, fuzzy
+#| msgid "Bill marked as approved successfully."
+msgid "Bill marked as approved successfully"
msgstr "تم تحديد الفاتورة كموافقة بنجاح."
#: inventory/views.py:3458
-msgid "Bill is already paid."
+#, fuzzy
+#| msgid "Bill is already paid."
+msgid "Bill is already paid"
msgstr "تم دفع الفاتورة مسبقًا."
#: inventory/views.py:3467
-msgid "Bill marked as paid successfully."
+#, fuzzy
+#| msgid "Bill marked as paid successfully."
+msgid "Bill marked as paid successfully"
msgstr "تم تحديد الفاتورة كمدفوعة بنجاح."
#: inventory/views.py:3469
-msgid "Amount paid is not equal to amount due."
+#, fuzzy
+#| msgid "Amount paid is not equal to amount due."
+msgid "Amount paid is not equal to amount due"
msgstr "المبلغ المدفوع لا يساوي المبلغ المستحق."
+#: inventory/views.py:3561
+#, fuzzy
+#| msgid "Bill updated successfully."
+msgid "Bill created successfully"
+msgstr "تم تحديث الفاتورة بنجاح."
+
#: inventory/views.py:3616
msgid "Quotation has no items"
msgstr "عرض السعر لا يحتوي على أي عناصر"
@@ -2014,6 +2330,52 @@ msgstr "عرض سعر"
msgid "Dashboard"
msgstr "لوحة القيادة"
+#: inventory/views.py:3896 inventory/views.py:3922 inventory/views.py:3971
+#, fuzzy
+#| msgid "Not authorized."
+msgid "Unauthorized"
+msgstr "غير مصرح."
+
+#: inventory/views.py:4024
+#, fuzzy
+#| msgid "Settings"
+msgid "Settings updated"
+msgstr "الإعدادات"
+
+#: inventory/views.py:4137
+#, fuzzy
+#| msgid "Journal Entry Detail"
+msgid "Journal Entry created"
+msgstr "تفاصيل إدخال اليومية"
+
+#: inventory/views.py:4163
+#, fuzzy
+#| msgid "Journal Entry has not been posted."
+msgid "Journal Entry cannot be deleted"
+msgstr "إدخال اليومية لم يتم نشره."
+
+#: inventory/views.py:4190
+#, fuzzy
+#| msgid "Bill is already approved."
+msgid "Ledger is already locked"
+msgstr "تمت الموافقة على الفاتورة مسبقًا."
+
+#: inventory/views.py:4200
+msgid "Ledger is already Unlocked"
+msgstr ""
+
+#: inventory/views.py:4214
+#, fuzzy
+#| msgid "Bill is already approved."
+msgid "Ledger is already posted"
+msgstr "تمت الموافقة على الفاتورة مسبقًا."
+
+#: inventory/views.py:4224
+#, fuzzy
+#| msgid "Bill is already approved."
+msgid "Ledger is already Unposted"
+msgstr "تمت الموافقة على الفاتورة مسبقًا."
+
#: templates/account/account_inactive.html:5
#: templates/account/account_inactive.html:9
msgid "Account Inactive"
@@ -2107,7 +2469,7 @@ msgstr "إلغاء"
#: templates/account/confirm_login_code..html:7
#: templates/account/confirm_login_code..html:35 templates/account/login.html:6
-#: templates/account/login.html:21 templates/account/login.html:45
+#: templates/account/login.html:22 templates/account/login.html:46
#: templates/account/request_login_code.html:5 templates/account/signup.html:80
#: templates/header.html:494 templates/welcome-temp.html:77
msgid "Sign In"
@@ -2117,8 +2479,8 @@ msgstr "تسجيل الدخول"
#: templates/account/confirm_login_code..html:17
#: templates/account/email.html:14 templates/account/email.html:15
#: templates/account/email_confirm.html:15
-#: templates/account/email_confirm.html:16 templates/account/login.html:15
-#: templates/account/login.html:16 templates/account/otp_verification.html:10
+#: templates/account/email_confirm.html:16 templates/account/login.html:16
+#: templates/account/login.html:17 templates/account/otp_verification.html:10
#: templates/account/otp_verification.html:11
#: templates/account/password_change.html:14
#: templates/account/password_change.html:15
@@ -2130,8 +2492,8 @@ msgstr "تسجيل الدخول"
#: templates/account/password_reset_from_key.html:16
#: templates/account/password_reset_from_key_done.html:14
#: templates/account/password_reset_from_key_done.html:15
-#: templates/account/signup-wizard.html:11
-#: templates/account/signup-wizard.html:12 templates/account/signup.html:14
+#: templates/account/signup-wizard.html:13
+#: templates/account/signup-wizard.html:14 templates/account/signup.html:14
#: templates/account/signup.html:15
#: templates/account/verfied_email_required.html:14
#: templates/account/verfied_email_required.html:15
@@ -2456,26 +2818,26 @@ msgstr ""
"انتهت صلاحية رابط تأكيد البريد الإلكتروني هذا أو أنه غير صالح. يرجى طلب تأكيد بريد إلكتروني جديد."
-#: templates/account/login.html:43
+#: templates/account/login.html:44
msgid "Remember Me"
msgstr "تذكرني"
-#: templates/account/login.html:54
+#: templates/account/login.html:55
msgid "If you have not created an account yet, then please"
msgstr "إذا لم تقم بإنشاء حساب بعد، يرجى التسجيل أولاً."
-#: templates/account/login.html:55 templates/account/signup-wizard.html:16
+#: templates/account/login.html:56 templates/account/signup-wizard.html:18
#: templates/account/signup.html:5 templates/account/signup.html:79
#: templates/header.html:497 templates/welcome-temp.html:78
#: templates/welcome_header.html:36
msgid "Sign Up"
msgstr "إنشاء حساب"
-#: templates/account/login.html:63
+#: templates/account/login.html:72
msgid "Sign in with a passkey"
msgstr "تسجيل الدخول باستخدام مفتاح مرور"
-#: templates/account/login.html:68 templates/account/request_login_code.html:9
+#: templates/account/login.html:77 templates/account/request_login_code.html:9
msgid "Mail me a sign-in code"
msgstr "أرسل لي رمز تسجيل الدخول عبر البريد الإلكتروني"
@@ -2635,15 +2997,15 @@ msgstr "طلب الرمز"
msgid "Other sign-in options"
msgstr "خيارات تسجيل الدخول الأخرى"
-#: templates/account/signup-wizard.html:17
+#: templates/account/signup-wizard.html:19
msgid "Create your account today"
msgstr "أنشئ حسابك اليوم"
-#: templates/account/signup-wizard.html:24
+#: templates/account/signup-wizard.html:26
msgid "Access"
msgstr "الوصول"
-#: templates/account/signup-wizard.html:27
+#: templates/account/signup-wizard.html:29
#: templates/items/service/service_list.html:23 templates/plans/current.html:15
#: venv/lib/python3.11/site-packages/django_ledger/models/accounts.py:443
#: venv/lib/python3.11/site-packages/django_ledger/models/transactions.py:439
@@ -2656,33 +3018,33 @@ msgstr "الوصول"
msgid "Account"
msgstr "الحساب"
-#: templates/account/signup-wizard.html:30
+#: templates/account/signup-wizard.html:32
msgid "Extra"
msgstr "إضافي"
-#: templates/account/signup-wizard.html:33
+#: templates/account/signup-wizard.html:35
#: templates/ledger/journal_entry/journal_entry_txs.html:66
#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/journal_entry/je_detail_txs.html:59
msgid "Done"
msgstr "تم"
-#: templates/account/signup-wizard.html:61
+#: templates/account/signup-wizard.html:63
msgid "You are all set!"
msgstr "كل شيء جاهز!"
-#: templates/account/signup-wizard.html:62
+#: templates/account/signup-wizard.html:64
msgid "Now you can access your account"
msgstr "الآن يمكنك الوصول إلى حسابك"
-#: templates/account/signup-wizard.html:62
+#: templates/account/signup-wizard.html:64
msgid "anytime"
msgstr "في أي وقت"
-#: templates/account/signup-wizard.html:62
+#: templates/account/signup-wizard.html:64
msgid "anywhere"
msgstr "في أي مكان"
-#: templates/account/signup-wizard.html:62
+#: templates/account/signup-wizard.html:64
#: templates/administration/email_change_verification_code.html:25
#: templates/administration/manage_day_off.html:69
#: templates/appointment/enter_verification_code.html:24
@@ -2694,12 +3056,12 @@ msgstr "في أي مكان"
msgid "Submit"
msgstr "إرسال"
-#: templates/account/signup-wizard.html:71
+#: templates/account/signup-wizard.html:73
#: venv/lib/python3.11/site-packages/alabaster/relations.html:9
msgid "Previous"
msgstr "السابق"
-#: templates/account/signup-wizard.html:73
+#: templates/account/signup-wizard.html:75
#: templates/appointment/appointments.html:86
#: templates/two_factor/_wizard_actions.html:14
#: venv/lib/python3.11/site-packages/alabaster/relations.html:13
@@ -2707,22 +3069,22 @@ msgstr "السابق"
msgid "Next"
msgstr "التالي"
-#: templates/account/signup-wizard.html:102
#: templates/account/signup-wizard.html:107
+#: templates/account/signup-wizard.html:112
msgid "Please enter a valid phone number"
msgstr "يرجى إدخال رقم هاتف صالح"
-#: templates/account/signup-wizard.html:138
+#: templates/account/signup-wizard.html:143
msgid "Password does not match"
msgstr "كلمة المرور غير متطابقة"
-#: templates/account/signup-wizard.html:246
+#: templates/account/signup-wizard.html:251
#: templates/inventory/car_form.html:604
#: templates/inventory/car_form_qabl alfalsafa.html:654
msgid "Please Wait"
msgstr "الرجاء الإنتظار"
-#: templates/account/signup-wizard.html:247
+#: templates/account/signup-wizard.html:252
#: templates/inventory/car_form.html:605
#: templates/inventory/car_form_qabl alfalsafa.html:655
msgid "Loading"
@@ -3691,7 +4053,7 @@ msgid "Reset Password"
msgstr "إعادة تعيين كلمة المرور"
#: templates/auth_base.html:16 templates/welcome-temp.html:16
-#: templates/welcome.html:19 templates/welcome_base.html:16
+#: templates/welcome.html:18 templates/welcome_base.html:16
msgid "HAIKAL"
msgstr "هيكل"
@@ -4217,7 +4579,7 @@ msgid "Active until"
msgstr "نشط حتى"
#: templates/dealers/dealer_detail.html:112
-#: templates/subscriptions/subscription_plan.html:42
+#: templates/subscriptions/subscription_plan.html:42 templates/welcome.html:94
msgid "Per month"
msgstr "شهريًا"
@@ -4690,7 +5052,7 @@ msgstr "لوحة القيادة"
msgid "Manager"
msgstr "مدير"
-#: templates/header.html:39 templates/welcome.html:20 templates/welcome.html:74
+#: templates/header.html:39 templates/welcome.html:19 templates/welcome.html:73
msgid "CRM"
msgstr "إدارة علاقات العملاء"
@@ -5082,7 +5444,7 @@ msgstr "التفاصيل المالية لـ"
#: templates/inventory/car_form_qabl alfalsafa.html:515
#: templates/inventory/car_form_qabl alfalsafa.html:535
#: templates/inventory/car_form_qabl alfalsafa.html:554
-#: templates/plans/plan_table.html:88 templates/welcome.html:126
+#: templates/plans/plan_table.html:88
msgid "Select"
msgstr "اختيار"
@@ -6967,30 +7329,29 @@ msgid "No Limit"
msgstr "لا يوجد حد"
#: templates/plans/plan_table.html:45
-#: templates/subscriptions/subscription_plan.html:7 templates/welcome.html:87
+#: templates/subscriptions/subscription_plan.html:7 templates/welcome.html:86
#: templates/welcome_header.html:39
msgid "Pricing"
msgstr "السعر"
#: templates/plans/plan_table.html:53 templates/plans/plan_table.html:90
-#: templates/welcome.html:128
#: venv/lib/python3.11/site-packages/django/forms/widgets.py:463
msgid "Change"
msgstr "تغيير"
-#: templates/plans/plan_table.html:71 templates/welcome.html:108
+#: templates/plans/plan_table.html:71
msgid "day"
msgstr "يوم"
-#: templates/plans/plan_table.html:75 templates/welcome.html:112
+#: templates/plans/plan_table.html:75
msgid "Buy"
msgstr "شراء"
-#: templates/plans/plan_table.html:82 templates/welcome.html:120
+#: templates/plans/plan_table.html:82
msgid "Free"
msgstr "مجاني"
-#: templates/plans/plan_table.html:83 templates/welcome.html:121
+#: templates/plans/plan_table.html:83
msgid "no expiry"
msgstr "لا يوجد انتهاء"
@@ -7220,16 +7581,16 @@ msgstr "رقم الطلب"
msgid "For Quotation"
msgstr "لعرض سعر"
-#: templates/sales/orders/purchase_order.html:36
+#: templates/sales/orders/purchase_order.html:37
msgid "Print"
msgstr "طباعة"
-#: templates/sales/orders/purchase_order.html:44
+#: templates/sales/orders/purchase_order.html:45
#: venv/lib/python3.11/site-packages/django_ledger/models/entity.py:3157
msgid "Purchase Order"
msgstr "أمر شراء"
-#: templates/sales/orders/purchase_order.html:100
+#: templates/sales/orders/purchase_order.html:101
msgid "Signature"
msgstr "التوقيع"
@@ -7683,7 +8044,7 @@ msgstr "تسهيل"
msgid "Your Car Dealership Operations"
msgstr "عمليات معرض السيارات الخاص بك"
-#: templates/welcome-temp.html:96 templates/welcome.html:35
+#: templates/welcome-temp.html:96 templates/welcome.html:34
msgid "Because Inventory Needs Order"
msgstr "لأن المخزون يحتاج إلى تنظيم"
@@ -7704,29 +8065,29 @@ msgstr "تعرف على المزيد"
msgid "Empowering Your Dealership with Precision and Efficiency"
msgstr "تمكين معرضك بالدقة والكفاءة"
-#: templates/welcome-temp.html:122 templates/welcome.html:43
+#: templates/welcome-temp.html:122 templates/welcome.html:42
msgid "Inventory Management"
msgstr "إدارة المخزون"
-#: templates/welcome-temp.html:123 templates/welcome.html:44
+#: templates/welcome-temp.html:123 templates/welcome.html:43
msgid ""
"Effortlessly manage your car inventory with real-time updates and intuitive "
"tools."
msgstr "قم بإدارة مخزون السيارات بسهولة مع التحديثات الفورية والأدوات البسيطة."
-#: templates/welcome-temp.html:127 templates/welcome.html:51
+#: templates/welcome-temp.html:127 templates/welcome.html:50
msgid "Seamless Accounting"
msgstr "محاسبة سلسة"
-#: templates/welcome-temp.html:128 templates/welcome.html:52
+#: templates/welcome-temp.html:128 templates/welcome.html:51
msgid "Integrated double-entry accounting tailored for car dealers."
msgstr "نظام محاسبة مزدوج القيد مدمج ومصمم خصيصًا لتجار السيارات."
-#: templates/welcome-temp.html:132 templates/welcome.html:61
+#: templates/welcome-temp.html:132 templates/welcome.html:60
msgid "Advanced Analytics"
msgstr "تحليلات متقدمة"
-#: templates/welcome-temp.html:133 templates/welcome.html:62
+#: templates/welcome-temp.html:133 templates/welcome.html:61
msgid "Gain insights and make data-driven decisions for your business."
msgstr "احصل على رؤى دقيقة واتخذ قرارات مستندة إلى البيانات لنشاطك التجاري."
@@ -7738,19 +8099,19 @@ msgstr "اختر الخطة التي تناسب احتياجاتك"
msgid "Flexible plans designed to meet the unique needs of every dealership."
msgstr "خطط مرنة مصممة لتلبية الاحتياجات الفريدة لكل معرض سيارات."
-#: templates/welcome.html:18
+#: templates/welcome.html:17
msgid "Why us"
msgstr "لماذا نحن"
-#: templates/welcome.html:20
+#: templates/welcome.html:19
msgid "Accounting"
msgstr "المحاسبة"
-#: templates/welcome.html:20
+#: templates/welcome.html:19
msgid "Reporting"
msgstr "التقارير"
-#: templates/welcome.html:37
+#: templates/welcome.html:36
msgid ""
"Haikal empowers car dealers with a seamless, structured system to manage "
"their inventory effortlessly, ensuring every vehicle is tracked, accounted "
@@ -7759,7 +8120,7 @@ msgstr ""
"يمكن هيكل معارض السيارات من إدارة مخزونهم بسهولة من خلال نظام منظم وسلس، مما "
"يضمن تتبع كل مركبة وتسجيلها وجعلها جاهزة للبيع بدقة وكفاءة."
-#: templates/welcome.html:75
+#: templates/welcome.html:74
msgid ""
"Specialized customer relationship management system designed for car "
"dealers, offering streamlined sales."
@@ -7767,27 +8128,31 @@ msgstr ""
"نظام متخصص لإدارة علاقات العملاء مصمم لتجار السيارات، يوفر عمليات بيع سلسة "
"ومنظمة."
-#: templates/welcome.html:134
+#: templates/welcome.html:96
msgid "Included"
msgstr "متضمن"
-#: templates/welcome.html:157
+#: templates/welcome.html:121
msgid "Other features"
msgstr "ميزات أخرى"
+#: templates/welcome.html:122
msgid "Find out other features included in Haikal"
msgstr "اكتشف الميزات الأخرى المضمنة في هيكل"
+#: templates/welcome.html:130
msgid "Manage Everything from one place"
msgstr "إدارة كل شيء من مكان واحد"
+#: templates/welcome.html:137
msgid "The Car is in the center of your business"
msgstr "السيارة هي محور عملك"
-#: templates/welcome.html:180
+#: templates/welcome.html:144
msgid "Fully Integrated System"
msgstr "نظام متكامل بالكامل"
+#: templates/welcome.html:151
msgid "Advanced Dashboards for better decisions"
msgstr "لوحات تحكم متقدمة لاتخاذ قرارات أفضل"
@@ -12982,6 +13347,9 @@ msgstr "س"
msgid "y"
msgstr "ص"
+#~ msgid "Estimate canceled successfully."
+#~ msgstr "تم إلغاء العرض بنجاح."
+
#~ msgid "UnLock All"
#~ msgstr "إلغاء القفل للجميع"