Compare commits
7 Commits
85efc27bf1
...
23a67d22a0
| Author | SHA1 | Date | |
|---|---|---|---|
| 23a67d22a0 | |||
| b66e1dd0ed | |||
| 1ae5f93f6c | |||
| e29f520d6c | |||
| 4e97f0523b | |||
| 0c56fcf50a | |||
| 4c3f068f03 |
@ -2550,6 +2550,15 @@ class CustomGroup(models.Model):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def set_default_permissions(self):
|
def set_default_permissions(self):
|
||||||
|
Permission.objects.get_or_create(name="Can approve estimate",codename="can_approve_estimatemodel",content_type=ContentType.objects.get_for_model(EstimateModel))
|
||||||
|
Permission.objects.get_or_create(name="Can approve bill",codename="can_approve_billmodel",content_type=ContentType.objects.get_for_model(BillModel))
|
||||||
|
|
||||||
|
Permission.objects.get_or_create(name="Can view inventory",codename="can_view_inventory",content_type=ContentType.objects.get_for_model(Car))
|
||||||
|
Permission.objects.get_or_create(name="Can view sales",codename="can_view_sales",content_type=ContentType.objects.get_for_model(EstimateModel))
|
||||||
|
Permission.objects.get_or_create(name="Can view crm",codename="can_view_crm",content_type=ContentType.objects.get_for_model(Lead))
|
||||||
|
Permission.objects.get_or_create(name="Can view financials",codename="can_view_financials",content_type=ContentType.objects.get_for_model(AccountModel))
|
||||||
|
Permission.objects.get_or_create(name="Can view reports",codename="can_view_reports",content_type=ContentType.objects.get_for_model(LedgerModel))
|
||||||
|
|
||||||
self.clear_permissions()
|
self.clear_permissions()
|
||||||
######################################
|
######################################
|
||||||
######################################
|
######################################
|
||||||
@ -2599,6 +2608,8 @@ class CustomGroup(models.Model):
|
|||||||
"vendormodel",
|
"vendormodel",
|
||||||
"journalentrymodel",
|
"journalentrymodel",
|
||||||
"purchaseordermodel",
|
"purchaseordermodel",
|
||||||
|
"ledgermodel",
|
||||||
|
"transactionmodel"
|
||||||
],
|
],
|
||||||
other_perms=["can_approve_estimatemodel","can_approve_billmodel","can_view_inventory","can_view_sales","can_view_crm","can_view_financials","can_view_reports"],
|
other_perms=["can_approve_estimatemodel","can_approve_billmodel","can_view_inventory","can_view_sales","can_view_crm","can_view_financials","can_view_reports"],
|
||||||
|
|
||||||
@ -2689,6 +2700,7 @@ class CustomGroup(models.Model):
|
|||||||
"view_carcolors",
|
"view_carcolors",
|
||||||
"view_cartransfer",
|
"view_cartransfer",
|
||||||
"view_saleorder",
|
"view_saleorder",
|
||||||
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
self.set_permissions(
|
self.set_permissions(
|
||||||
@ -2706,7 +2718,8 @@ class CustomGroup(models.Model):
|
|||||||
"estimatemodel",
|
"estimatemodel",
|
||||||
"customermodel",
|
"customermodel",
|
||||||
"vendormodel",
|
"vendormodel",
|
||||||
"TransactionModel"
|
"ledgermodel",
|
||||||
|
"transactionmodel"
|
||||||
],
|
],
|
||||||
other_perms=["view_customermodel", "view_estimatemodel","can_view_inventory","can_view_sales","can_view_crm","can_view_financials","can_view_reports"],
|
other_perms=["view_customermodel", "view_estimatemodel","can_view_inventory","can_view_sales","can_view_crm","can_view_financials","can_view_reports"],
|
||||||
)
|
)
|
||||||
@ -2957,21 +2970,3 @@ class ExtraInfo(models.Model):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"ExtraInfo for {self.content_object} ({self.content_type})"
|
return f"ExtraInfo for {self.content_object} ({self.content_type})"
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_sale_orders(cls, staff=None,is_dealer=False):
|
|
||||||
if not staff and not is_dealer:
|
|
||||||
return []
|
|
||||||
if is_dealer:
|
|
||||||
qs = ExtraInfo.objects.filter(
|
|
||||||
content_type=ContentType.objects.get_for_model(EstimateModel),
|
|
||||||
related_content_type=ContentType.objects.get_for_model(Staff),
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
qs = ExtraInfo.objects.filter(
|
|
||||||
content_type=ContentType.objects.get_for_model(EstimateModel),
|
|
||||||
related_content_type=ContentType.objects.get_for_model(Staff),
|
|
||||||
related_object_id=staff.pk,
|
|
||||||
)
|
|
||||||
|
|
||||||
return [x.content_object.sale_orders.first for x in qs]
|
|
||||||
|
|||||||
@ -465,9 +465,9 @@ urlpatterns = [
|
|||||||
views.RepresentativeDeleteView.as_view(),
|
views.RepresentativeDeleteView.as_view(),
|
||||||
name="representative_delete",
|
name="representative_delete",
|
||||||
),
|
),
|
||||||
path("<slug:dealer_slug>/ledgers/", views.LedgerModelListView.as_view(), name="ledger_list"),
|
path("<slug:dealer_slug>/ledgers/<slug:entity_slug>/", views.LedgerModelListView.as_view(), name="ledger_list"),
|
||||||
path(
|
path(
|
||||||
"<slug:dealer_slug>/ledgers/create/", views.LedgerModelCreateView.as_view(), name="ledger_create"
|
"<slug:dealer_slug>/ledgers/<slug:entity_slug>/create/", views.LedgerModelCreateView.as_view(), name="ledger_create"
|
||||||
),
|
),
|
||||||
path(
|
path(
|
||||||
"<slug:dealer_slug>/ledgers/<slug:entity_slug>/detail/<uuid:pk>/",
|
"<slug:dealer_slug>/ledgers/<slug:entity_slug>/detail/<uuid:pk>/",
|
||||||
|
|||||||
@ -8638,7 +8638,7 @@ class LedgerModelListView(LoginRequiredMixin,PermissionRequiredMixin, ListView,
|
|||||||
show_visible = False
|
show_visible = False
|
||||||
allow_empty = True
|
allow_empty = True
|
||||||
paginate_by = 30
|
paginate_by = 30
|
||||||
permission_required = "ledger.view_ledgermodel"
|
permission_required = "django_ledger.view_ledgermodel"
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
qs = super().get_queryset()
|
qs = super().get_queryset()
|
||||||
@ -8683,7 +8683,7 @@ class LedgerModelDetailView(LoginRequiredMixin, PermissionRequiredMixin,DetailVi
|
|||||||
model = LedgerModel
|
model = LedgerModel
|
||||||
context_object_name = "ledger"
|
context_object_name = "ledger"
|
||||||
template_name = "ledger/ledger/ledger_detail.html"
|
template_name = "ledger/ledger/ledger_detail.html"
|
||||||
permission_required = "ledger.view_ledgermodel"
|
permission_required = "django_ledger.view_ledgermodel"
|
||||||
|
|
||||||
|
|
||||||
class LedgerModelCreateView(LedgerModelCreateViewBase):
|
class LedgerModelCreateView(LedgerModelCreateViewBase):
|
||||||
@ -8713,12 +8713,14 @@ class LedgerModelCreateView(LedgerModelCreateViewBase):
|
|||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
dealer = get_user_type(self.request)
|
dealer = get_user_type(self.request)
|
||||||
instance = form.save(commit=False)
|
form.field["entity"] = dealer.entity
|
||||||
instance.entity = dealer.entity
|
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse("ledger_list")
|
return reverse("ledger_list", kwargs={
|
||||||
|
"dealer_slug": self.kwargs["dealer_slug"],
|
||||||
|
"entity_slug": self.kwargs["entity_slug"]
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class LedgerModelModelActionView(LedgerModelModelActionViewBase):
|
class LedgerModelModelActionView(LedgerModelModelActionViewBase):
|
||||||
@ -8736,7 +8738,10 @@ class LedgerModelModelActionView(LedgerModelModelActionViewBase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def get_redirect_url(self, *args, **kwargs):
|
def get_redirect_url(self, *args, **kwargs):
|
||||||
return reverse("ledger_list", args=[self.kwargs["dealer_slug"]])
|
return reverse("ledger_list", kwargs={
|
||||||
|
"dealer_slug": self.kwargs["dealer_slug"],
|
||||||
|
"entity_slug": self.kwargs["entity_slug"]
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class LedgerModelDeleteView(LedgerModelDeleteViewBase, SuccessMessageMixin):
|
class LedgerModelDeleteView(LedgerModelDeleteViewBase, SuccessMessageMixin):
|
||||||
@ -8760,7 +8765,10 @@ class LedgerModelDeleteView(LedgerModelDeleteViewBase, SuccessMessageMixin):
|
|||||||
permission_required = ["django_ledger.delete_ledgermodel"]
|
permission_required = ["django_ledger.delete_ledgermodel"]
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse("ledger_list", args=[self.kwargs["dealer_slug"]])
|
return reverse("ledger_list", kwargs={
|
||||||
|
"dealer_slug": self.kwargs["dealer_slug"],
|
||||||
|
"entity_slug": self.kwargs["entity_slug"]
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
# class LedgerModelCreateView(LoginRequiredMixin,SuccessMessageMixin, CreateView):
|
# class LedgerModelCreateView(LoginRequiredMixin,SuccessMessageMixin, CreateView):
|
||||||
@ -8808,7 +8816,6 @@ class JournalEntryListView(LoginRequiredMixin,PermissionRequiredMixin, ListView)
|
|||||||
template_name = "ledger/journal_entry/journal_entry_list.html"
|
template_name = "ledger/journal_entry/journal_entry_list.html"
|
||||||
permission_required = ["django_ledger.view_journalentrymodel"]
|
permission_required = ["django_ledger.view_journalentrymodel"]
|
||||||
ordering = ["-timestamp"]
|
ordering = ["-timestamp"]
|
||||||
permission_required = "ledger.view_ledger"
|
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
qs = super().get_queryset()
|
qs = super().get_queryset()
|
||||||
@ -8849,7 +8856,6 @@ class JournalEntryCreateView(LoginRequiredMixin, PermissionRequiredMixin,Success
|
|||||||
form_class = forms.JournalEntryModelCreateForm
|
form_class = forms.JournalEntryModelCreateForm
|
||||||
ledger_model = None
|
ledger_model = None
|
||||||
success_message = _("Journal Entry created")
|
success_message = _("Journal Entry created")
|
||||||
permission_required = ["django_ledger.add_journalentrymodel"]
|
|
||||||
|
|
||||||
def get_form(self, form_class=None):
|
def get_form(self, form_class=None):
|
||||||
dealer = get_user_type(self.request)
|
dealer = get_user_type(self.request)
|
||||||
|
|||||||
@ -230,7 +230,7 @@
|
|||||||
|
|
||||||
{% if perms.django_ledger.view_journalentrymodel %}
|
{% if perms.django_ledger.view_journalentrymodel %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'ledger_list' request.dealer.slug %}">
|
<a class="nav-link" href="{% url 'ledger_list' request.dealer.slug request.dealer.entity.slug %}">
|
||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
<span class="nav-link-icon"><span class="fas fa-book"></span></span><span class="nav-link-text">{% trans "Ledgers"|capfirst %}</span>
|
<span class="nav-link-icon"><span class="fas fa-book"></span></span><span class="nav-link-text">{% trans "Ledgers"|capfirst %}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -36,7 +36,9 @@
|
|||||||
|
|
||||||
<div class="d-flex justify-content-between mb-2">
|
<div class="d-flex justify-content-between mb-2">
|
||||||
<h3 class="">{% trans "Journal Entries" %}</h3>
|
<h3 class="">{% trans "Journal Entries" %}</h3>
|
||||||
<a href="{% url 'journalentry_create' request.dealer.slug ledger.pk %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Journal Entry" %}</a>
|
{% if perms.django_ledger.add_journalentrymodel %}
|
||||||
|
<a href="{% url 'journalentry_create' request.dealer.slug ledger.pk %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans "Add Journal Entry" %}</a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@ -96,9 +98,11 @@
|
|||||||
<span class="fas fa-ellipsis-h fs-10"></span>
|
<span class="fas fa-ellipsis-h fs-10"></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="dropdown-menu dropdown-menu-end py-2">
|
<div class="dropdown-menu dropdown-menu-end py-2">
|
||||||
<a class="dropdown-item" href="{% url 'journalentry_transactions' request.dealer.slug je.pk %}">{% trans "View" %}</a>
|
{% if perms.django_ledger.view_transactionmodel %}
|
||||||
<a class="dropdown-item" href="{% url 'journalentry_txs' request.dealer.slug je.entity_slug je.ledger_id je.pk %}">{% trans "Transactions" %}</a>
|
<a class="dropdown-item" href="{% url 'journalentry_transactions' request.dealer.slug je.pk %}">{% trans "View" %}</a>
|
||||||
{% if je.can_delete %}
|
<a class="dropdown-item" href="{% url 'journalentry_txs' request.dealer.slug je.entity_slug je.ledger_id je.pk %}">{% trans "Transactions" %}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if je.can_delete and perms.django_ledger.delete_journalentrymodel %}
|
||||||
<a class="dropdown-item" href="{% url 'journalentry_delete' request.dealer.slug je.pk %}">{% trans "Delete" %}</a>
|
<a class="dropdown-item" href="{% url 'journalentry_delete' request.dealer.slug je.pk %}">{% trans "Delete" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -10,7 +10,9 @@
|
|||||||
|
|
||||||
<div class="d-flex justify-content-between mb-2">
|
<div class="d-flex justify-content-between mb-2">
|
||||||
<h3 class="">{% trans "Ledger" %}</h3>
|
<h3 class="">{% trans "Ledger" %}</h3>
|
||||||
<a href="{% url 'ledger_create' request.dealer.slug %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans 'Create Ledger' %}</a>
|
{% if perms.django_ledger.add_ledgermodel %}
|
||||||
|
<a href="{% url 'ledger_create' request.dealer.slug request.dealer.entity.slug %}" class="btn btn-md btn-phoenix-primary"><i class="fa fa-plus me-2"></i>{% trans 'Create Ledger' %}</a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="table-responsive px-1 scrollbar mt-3">
|
<div class="table-responsive px-1 scrollbar mt-3">
|
||||||
<table class="table align-items-center table-flush">
|
<table class="table align-items-center table-flush">
|
||||||
@ -32,14 +34,19 @@
|
|||||||
<tr class="hover-actions-trigger btn-reveal-trigger position-static">
|
<tr class="hover-actions-trigger btn-reveal-trigger position-static">
|
||||||
<td class="align-middle product white-space-nowrap px-1">
|
<td class="align-middle product white-space-nowrap px-1">
|
||||||
{% if ledger.invoicemodel %}
|
{% if ledger.invoicemodel %}
|
||||||
|
{% if perms.django_ledger.view_invoicemodel%}
|
||||||
<a href="{% url 'invoice_detail' request.dealer.slug ledger.invoicemodel.pk %}">{{ ledger.get_wrapped_model_instance }}</a>
|
<a href="{% url 'invoice_detail' request.dealer.slug ledger.invoicemodel.pk %}">{{ ledger.get_wrapped_model_instance }}</a>
|
||||||
|
{% endif %}
|
||||||
{% elif ledger.billmodel %}
|
{% elif ledger.billmodel %}
|
||||||
|
{% if perms.django_ledger.view_billmodel %}
|
||||||
<a href="{% url 'bill-detail' request.dealer.slug request.dealer.entity.slug ledger.billmodel.pk %}">{{ ledger.get_wrapped_model_instance }}</a>
|
<a href="{% url 'bill-detail' request.dealer.slug request.dealer.entity.slug ledger.billmodel.pk %}">{{ ledger.get_wrapped_model_instance }}</a>
|
||||||
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="#">{{ ledger.name }}</a>
|
<a href="#">{{ ledger.name }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle product white-space-nowrap">
|
<td class="align-middle product white-space-nowrap">
|
||||||
|
{% if perms.django_ledger.view_journalentrymodel %}
|
||||||
<a class="btn btn-sm btn-phoenix-primary"
|
<a class="btn btn-sm btn-phoenix-primary"
|
||||||
href="{% url 'journalentry_list' request.dealer.slug ledger.pk %}">
|
href="{% url 'journalentry_list' request.dealer.slug ledger.pk %}">
|
||||||
<i class="fa-solid fa-right-left"></i>
|
<i class="fa-solid fa-right-left"></i>
|
||||||
@ -48,6 +55,7 @@
|
|||||||
<span>{{ _('Journal Entries') }}</span>
|
<span>{{ _('Journal Entries') }}</span>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle product white-space-nowrap">
|
<td class="align-middle product white-space-nowrap">
|
||||||
{{ ledger.created |date }}
|
{{ ledger.created |date }}
|
||||||
@ -79,6 +87,7 @@
|
|||||||
<span class="fas fa-ellipsis-h fs-10"></span>
|
<span class="fas fa-ellipsis-h fs-10"></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="dropdown-menu dropdown-menu-end py-2">
|
<div class="dropdown-menu dropdown-menu-end py-2">
|
||||||
|
{% if perms.django_ledger.change_ledgermodel%}
|
||||||
{% if ledger.can_lock %}
|
{% if ledger.can_lock %}
|
||||||
<a href="{% url 'ledger-action-lock' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
|
<a href="{% url 'ledger-action-lock' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
|
||||||
class="dropdown-item has-text-info has-text-weight-bold">{% trans 'Lock' %}</a>
|
class="dropdown-item has-text-info has-text-weight-bold">{% trans 'Lock' %}</a>
|
||||||
@ -109,6 +118,7 @@
|
|||||||
<a href="{% url 'ledger-delete' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
|
<a href="{% url 'ledger-delete' dealer_slug=request.dealer.slug entity_slug=entity_slug ledger_pk=ledger.uuid %}"
|
||||||
class="dropdown-item has-text-danger has-text-weight-bold text-danger">{% trans 'Delete' %}</a>
|
class="dropdown-item has-text-danger has-text-weight-bold text-danger">{% trans 'Delete' %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user