diff --git a/inventory/middleware.py b/inventory/middleware.py index a68653ce..e35e80f2 100644 --- a/inventory/middleware.py +++ b/inventory/middleware.py @@ -124,8 +124,7 @@ class DealerSlugMiddleware: def process_view(self, request, view_func, view_args, view_kwargs): if request.user.is_authenticated: dealer = get_user_type(request) - if "dealer_slug" not in view_kwargs: - return redirect("home", dealer_slug=dealer.slug, **view_kwargs) - elif view_kwargs["dealer_slug"] != dealer.slug: - raise Http404("Dealer slug mismatch") + if view_kwargs.get("dealer_slug"): + if view_kwargs["dealer_slug"] != dealer.slug: + raise Http404("Dealer slug mismatch") return None diff --git a/inventory/models.py b/inventory/models.py index f043ee29..0f5392c3 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -720,7 +720,9 @@ class Car(Base): car=self, exterior=exterior, interior=interior ) self.save() - + @property + def logo(self): + return self.id_car_make.logo.url if self.id_car_make.logo else None class CarTransfer(models.Model): car = models.ForeignKey( diff --git a/inventory/urls.py b/inventory/urls.py index 94b061ba..0de89f7a 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -9,7 +9,7 @@ from django.conf.urls import handler403, handler400, handler404, handler500 urlpatterns = [ # main URLs path("", views.HomeView.as_view(), name="home"), - path("/", views.HomeView.as_view(), name="home"), + # path("/", views.HomeView.as_view(), name="home"), path("welcome/", views.WelcomeView.as_view(), name="welcome"), # Accounts URLs # path("login/", allauth_views.LoginView.as_view(template_name="account/login.html"), name="account_login"), diff --git a/inventory/views.py b/inventory/views.py index 258ff023..37e3adb4 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -349,15 +349,6 @@ class HomeView(LoginRequiredMixin, TemplateView): template_name = "index.html" - def dispatch(self, request, *args, **kwargs): - # Redirect unauthenticated users to the welcome page - if not request.user.is_authenticated: - return redirect("welcome") - if not kwargs.get("dealer_slug"): - dealer = get_user_type(request) - return redirect("home", dealer_slug=dealer.slug) - return super().dispatch(request, *args, **kwargs) - class TestView(TemplateView): """ @@ -2662,7 +2653,6 @@ class GroupCreateView( model = models.CustomGroup form_class = forms.GroupForm template_name = "groups/group_form.html" - success_url = reverse_lazy("group_list") success_message = _("Group created successfully") def form_valid(self, form): @@ -2674,6 +2664,8 @@ class GroupCreateView( instance.save() return super().form_valid(form) + def get_success_url(self): + return reverse_lazy("group_list", args=[self.request.dealer.slug]) class GroupUpdateView( LoginRequiredMixin, @@ -2705,20 +2697,20 @@ class GroupUpdateView( model = models.CustomGroup form_class = forms.GroupForm template_name = "groups/group_form.html" - success_url = reverse_lazy("group_list") success_message = _("Group updated successfully") def form_valid(self, form): dealer = get_user_type(self.request) instance = form.save(commit=False) - instance.set_defualt_permissions() + instance.set_default_permissions() instance.group.name = f"{dealer.slug}_{instance.name}" instance.save() return super().form_valid(form) - + def get_success_url(self): + return reverse_lazy("group_list", args=[self.request.dealer.slug]) @login_required -def GroupDeleteview(request, pk): +def GroupDeleteview(request, dealer_slug,pk): """ Handles the deletion of a specific group instance. This view ensures that only authenticated users can perform the deletion. Upon successful deletion, a @@ -2731,14 +2723,15 @@ def GroupDeleteview(request, pk): :return: The HTTP response that redirects the user to the group list page after the group is successfully deleted. """ + get_object_or_404(models.Dealer,slug=dealer_slug) group = get_object_or_404(models.CustomGroup, pk=pk) group.delete() messages.success(request, _("Group deleted successfully")) - return redirect("group_list") + return redirect("group_list",dealer_slug=dealer_slug) @login_required -def GroupPermissionView(request, pk): +def GroupPermissionView(request, dealer_slug,pk): """ Handles the view for adding or modifying permissions of a specific group. This view fetches the group based on the primary key passed as a parameter, and either displays @@ -2760,6 +2753,7 @@ def GroupPermissionView(request, pk): the group's permissions and redirects to the group's detail page. :rtype: HttpResponse """ + get_object_or_404(models.Dealer,slug=dealer_slug) group = get_object_or_404(models.CustomGroup, pk=pk) if request.method == "POST": form = forms.PermissionForm(request.POST) @@ -2768,7 +2762,7 @@ def GroupPermissionView(request, pk): for i in permissions: group.add_permission(Permission.objects.get(id=int(i))) messages.success(request, _("Permission added successfully")) - return redirect("group_detail", pk=group.pk) + return redirect("group_detail", dealer_slug=dealer_slug,pk=group.pk) form = forms.PermissionForm(initial={"name": group.permissions}) return render( request, "groups/group_permission_form.html", {"group": group, "form": form} @@ -2777,7 +2771,7 @@ def GroupPermissionView(request, pk): # Users @login_required -def UserGroupView(request, slug): +def UserGroupView(request, dealer_slug,slug): """ Handles the assignment of user groups to a specific staff member. This view allows updating the groups a staff member belongs to via a form submission. @@ -2793,6 +2787,7 @@ def UserGroupView(request, slug): user detail page after successful submission for POST requests. :rtype: HttpResponse or HttpResponseRedirect """ + get_object_or_404(models.Dealer,slug=dealer_slug) staff = get_object_or_404(models.Staff, slug=slug) if request.method == "POST": form = forms.UserGroupForm(request.POST) @@ -2804,7 +2799,7 @@ def UserGroupView(request, slug): staff.add_group(cg.group) messages.success(request, _("Group added successfully")) - return redirect("user_detail", slug=staff.slug) + return redirect("user_detail",dealer_slug=dealer_slug, slug=staff.slug) form = forms.UserGroupForm(initial={"name": staff.groups}) form.fields["name"].queryset = models.CustomGroup.objects.filter( @@ -2948,7 +2943,8 @@ class UserCreateView( if group: staff.add_group(group) return super().form_valid(form) - + def get_success_url(self): + return reverse_lazy("user_list", args=[self.request.dealer.slug]) class UserUpdateView( LoginRequiredMixin, @@ -3015,10 +3011,11 @@ class UserUpdateView( staff.add_as_manager() staff.save() return super().form_valid(form) - + def get_success_url(self): + return reverse_lazy("user_list", args=[self.request.dealer.slug]) @login_required -def UserDeleteview(request, slug): +def UserDeleteview(request, dealer_slug,slug): """ Deletes a user and its associated staff member from the database and redirects to the user list page. Displays a success message upon successful deletion @@ -3029,10 +3026,11 @@ def UserDeleteview(request, slug): :return: An HTTP redirect to the user list page. """ + get_object_or_404(models.Dealer,slug=dealer_slug) staff = get_object_or_404(models.Staff, slug=slug) staff.deactivate_account() messages.success(request, _("User deleted successfully")) - return redirect("user_list") + return redirect("user_list",dealer_slug=dealer_slug) class OrganizationListView(LoginRequiredMixin, ListView): @@ -9185,6 +9183,9 @@ def InventoryItemCreateView(request, dealer_slug): cogs_accounts = entity.get_coa_accounts().filter(role="cogs_regular") if request.method == "POST": + response = HttpResponse() + response["HX-Refresh"] = "true" + name = request.POST.get("name") account = request.POST.get("account") account = inventory_accounts.get(pk=account) @@ -9216,10 +9217,11 @@ def InventoryItemCreateView(request, dealer_slug): .first() ): messages.error(request, _("Inventory item already exists")) - return redirect( - f"{reverse('inventory_item_create')}?for_po={for_po}", - dealer_slug=dealer.slug, - ) + return response + # return redirect( + # f"{reverse('inventory_item_create')}?for_po={for_po}", + # dealer_slug=dealer.slug, + # ) uom = entity.get_uom_all().get(name="Unit") entity.create_item_inventory( name=inventory_name, @@ -9229,7 +9231,8 @@ def InventoryItemCreateView(request, dealer_slug): coa_model=coa, ) messages.success(request, _("Inventory item created successfully")) - return redirect("purchase_order_list", dealer_slug=dealer.slug) + return response + # return redirect("purchase_order_list", dealer_slug=dealer.slug) if for_po: form = forms.CSVUploadForm() form.fields["vendor"].queryset = dealer.vendors.filter(active=True) diff --git a/static/css/custom.css b/static/css/custom.css index abd5fbfd..80ecd633 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -108,3 +108,4 @@ html[dir="rtl"] .form-icon-container .form-control { padding-right: 35px; padding-left: 10px; } + diff --git a/templates/dashboards/manager.html b/templates/dashboards/manager.html index ad08b961..6a259ec8 100644 --- a/templates/dashboards/manager.html +++ b/templates/dashboards/manager.html @@ -12,7 +12,7 @@
-

{{ staff }}

+

{{ staff }}

{{ _("Staff")}}

diff --git a/templates/groups/group_detail.html b/templates/groups/group_detail.html index fc2e0b79..26e9b017 100644 --- a/templates/groups/group_detail.html +++ b/templates/groups/group_detail.html @@ -109,7 +109,11 @@ {{ _("Delete") }} +======= + href="{% url 'group_list' request.dealer.slug %}"> +>>>>>>> c9fad7b79c346875a636122fdc7514814180dbc7 {% trans "Back to List" %} diff --git a/templates/groups/group_permission_form.html b/templates/groups/group_permission_form.html index b40b7775..cf14458d 100644 --- a/templates/groups/group_permission_form.html +++ b/templates/groups/group_permission_form.html @@ -32,7 +32,7 @@
{{ error }}
{% endfor %}
- {% trans "Cancel"|capfirst %} + {% trans "Cancel"|capfirst %}
+<<<<<<< HEAD {% endif %}
+
@@ -267,6 +277,7 @@ {% endif %} +<<<<<<< HEAD +======= + {% if perms.django_ledger.view_purchaseordermodel %} + + {% endif %} +>>>>>>> c9fad7b79c346875a636122fdc7514814180dbc7 @@ -365,7 +387,7 @@ aria-label="Toggle Navigation"> - +
haikal haikal diff --git a/templates/purchase_orders/car_inventory_item_form.html b/templates/purchase_orders/car_inventory_item_form.html index 67efd78e..9a9137f9 100644 --- a/templates/purchase_orders/car_inventory_item_form.html +++ b/templates/purchase_orders/car_inventory_item_form.html @@ -1,8 +1,10 @@ {% extends "base.html" %} {% load static i18n crispy_forms_tags %} -{% block customCSS %} - -{% endblock %} -{% block content %} -
+ {% csrf_token %}
@@ -139,6 +138,6 @@
- + {% endblock content %} \ No newline at end of file diff --git a/templates/purchase_orders/includes/po_item_formset.html b/templates/purchase_orders/includes/po_item_formset.html index fbfdd23c..da6dfb61 100644 --- a/templates/purchase_orders/includes/po_item_formset.html +++ b/templates/purchase_orders/includes/po_item_formset.html @@ -18,7 +18,19 @@ - + diff --git a/templates/purchase_orders/po_detail.html b/templates/purchase_orders/po_detail.html index b4b82328..7455e398 100644 --- a/templates/purchase_orders/po_detail.html +++ b/templates/purchase_orders/po_detail.html @@ -48,6 +48,7 @@ +<<<<<<< HEAD
@@ -55,6 +56,9 @@

{{ po_model.po_title }}

+======= + +>>>>>>> c9fad7b79c346875a636122fdc7514814180dbc7
{% po_item_table1 po_items %} @@ -63,11 +67,23 @@
+<<<<<<< HEAD
+======= + + + {% trans 'PO List' %} + + + +>>>>>>> c9fad7b79c346875a636122fdc7514814180dbc7 {% include "purchase_orders/includes/mark_as.html" %} + + {% endblock %} {% block customJS %} diff --git a/templates/purchase_orders/po_list.html b/templates/purchase_orders/po_list.html index 0240eabf..e3b97737 100644 --- a/templates/purchase_orders/po_list.html +++ b/templates/purchase_orders/po_list.html @@ -21,8 +21,6 @@
{{ _("Create New PO") }} - {{ _("Create Inventory Item for PO") }}
{% include "partials/search_box.html" %} diff --git a/templates/purchase_orders/po_update.html b/templates/purchase_orders/po_update.html index 07644f59..8f8aa474 100644 --- a/templates/purchase_orders/po_update.html +++ b/templates/purchase_orders/po_update.html @@ -90,6 +90,26 @@ {% include "purchase_orders/includes/mark_as.html" %} + {% endblock %} {% block customJS %} diff --git a/templates/sales/saleorder_detail.html b/templates/sales/saleorder_detail.html index bfd46022..3f44f34d 100644 --- a/templates/sales/saleorder_detail.html +++ b/templates/sales/saleorder_detail.html @@ -136,7 +136,7 @@

- {% trans "Ledger Number" %}: {{ sale_order.invoice.ledger }}
+ {% trans "Ledger Number" %}: {{ sale_order.invoice.ledger }}
{% trans "Date" %}: {{ sale_order.invoice.ledger.created|date }}

diff --git a/templates/users/user_detail.html b/templates/users/user_detail.html index d2337e9f..89086383 100644 --- a/templates/users/user_detail.html +++ b/templates/users/user_detail.html @@ -27,7 +27,11 @@

Groups

+<<<<<<< HEAD Manage Groups +======= + Manage Groups +>>>>>>> c9fad7b79c346875a636122fdc7514814180dbc7
{% trans 'Item' %} + {% trans 'Item' %} + + {% trans 'Unit Cost' %} {% trans 'Quantity' %} {% trans 'Unit' %}
@@ -48,20 +52,20 @@