search for sales order list
This commit is contained in:
parent
c4f5f7e8cb
commit
993ba46dbc
@ -782,7 +782,6 @@ class Car(Base):
|
|||||||
"remarks": self.remarks,
|
"remarks": self.remarks,
|
||||||
"mileage": self.mileage,
|
"mileage": self.mileage,
|
||||||
"receiving_date": self.receiving_date.strftime("%Y-%m-%d %H:%M:%S"),
|
"receiving_date": self.receiving_date.strftime("%Y-%m-%d %H:%M:%S"),
|
||||||
"sold_date":self.sold_date.strftime("%Y-%m-%d %H:%M:%S"),
|
|
||||||
"hash": self.get_hash,
|
"hash": self.get_hash,
|
||||||
"id": str(self.id),
|
"id": str(self.id),
|
||||||
}
|
}
|
||||||
@ -3325,13 +3324,17 @@ class ExtraInfo(models.Model):
|
|||||||
related_object_id=staff.pk,
|
related_object_id=staff.pk,
|
||||||
)
|
)
|
||||||
# qs = qs.select_related("customer","estimate","invoice")
|
# qs = qs.select_related("customer","estimate","invoice")
|
||||||
return [
|
data = SaleOrder.objects.filter(pk__in=[x.content_object.sale_orders.select_related("customer","estimate","invoice").first().pk for x in qs if x.content_object.sale_orders.first()])
|
||||||
x.content_object.sale_orders.select_related(
|
|
||||||
"customer", "estimate", "invoice"
|
return data
|
||||||
).first()
|
|
||||||
for x in qs
|
# return [
|
||||||
if x.content_object.sale_orders.first()
|
# x.content_object.sale_orders.select_related(
|
||||||
]
|
# "customer", "estimate", "invoice"
|
||||||
|
# ).first()
|
||||||
|
# for x in qs
|
||||||
|
# if x.content_object.sale_orders.first()
|
||||||
|
# ]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_invoices(cls, staff=None, is_dealer=False):
|
def get_invoices(cls, staff=None, is_dealer=False):
|
||||||
|
|||||||
@ -27,9 +27,7 @@ from django_ledger.models.transactions import TransactionModel
|
|||||||
from django_ledger.models.journal_entry import JournalEntryModel
|
from django_ledger.models.journal_entry import JournalEntryModel
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
logger=logging.getLogger(__name__)
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
def make_random_password(
|
def make_random_password(
|
||||||
length=10, allowed_chars="abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
|
length=10, allowed_chars="abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
|
||||||
@ -65,12 +63,15 @@ def get_jwt_token():
|
|||||||
try:
|
try:
|
||||||
response = requests.post(url, headers=headers, json=data)
|
response = requests.post(url, headers=headers, json=data)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
# logging for success
|
#logging for success
|
||||||
logger.info("Successfully fetched JWT token.")
|
logger.info("Successfully fetched JWT token.")
|
||||||
return response.text
|
return response.text
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
# logging for error
|
#logging for error
|
||||||
logger.error(f"HTTP error fetching JWT token from {url}: ", exc_info=True)
|
logger.error(
|
||||||
|
f"HTTP error fetching JWT token from {url}: ",
|
||||||
|
exc_info=True
|
||||||
|
)
|
||||||
print(f"Error obtaining JWT token: {e}")
|
print(f"Error obtaining JWT token: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -158,7 +159,7 @@ def send_email(from_, to_, subject, message):
|
|||||||
message = message
|
message = message
|
||||||
from_email = from_
|
from_email = from_
|
||||||
recipient_list = [to_]
|
recipient_list = [to_]
|
||||||
async_task(send_mail, subject, message, from_email, recipient_list)
|
async_task(send_mail,subject, message, from_email, recipient_list)
|
||||||
|
|
||||||
|
|
||||||
def get_user_type(request):
|
def get_user_type(request):
|
||||||
@ -224,7 +225,7 @@ def reserve_car(car, request):
|
|||||||
)
|
)
|
||||||
car.status = models.CarStatusChoices.RESERVED
|
car.status = models.CarStatusChoices.RESERVED
|
||||||
car.save()
|
car.save()
|
||||||
# --- Logging for Success ---
|
# --- Logging for Success ---
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Car {car.pk} ('{car.id_car_make} {car.id_car_model}') reserved successfully "
|
f"Car {car.pk} ('{car.id_car_make} {car.id_car_model}') reserved successfully "
|
||||||
f"by user {request.user}. "
|
f"by user {request.user}. "
|
||||||
@ -238,7 +239,7 @@ def reserve_car(car, request):
|
|||||||
f"Error reserving car {car.pk} ('{car.id_car_make} {car.id_car_model}') "
|
f"Error reserving car {car.pk} ('{car.id_car_make} {car.id_car_model}') "
|
||||||
f"for user {request.user} . "
|
f"for user {request.user} . "
|
||||||
f"Error: {e}",
|
f"Error: {e}",
|
||||||
exc_info=True,
|
exc_info=True
|
||||||
)
|
)
|
||||||
messages.error(request, f"Error reserving car: {e}")
|
messages.error(request, f"Error reserving car: {e}")
|
||||||
|
|
||||||
@ -1001,14 +1002,10 @@ class CarFinanceCalculator:
|
|||||||
self.vat_rate = self._get_vat_rate()
|
self.vat_rate = self._get_vat_rate()
|
||||||
self.item_transactions = self._get_item_transactions()
|
self.item_transactions = self._get_item_transactions()
|
||||||
self.additional_services = self._get_additional_services()
|
self.additional_services = self._get_additional_services()
|
||||||
self.extra_info = models.ExtraInfo.objects.get(
|
self.extra_info = models.ExtraInfo.objects.get(dealer=self.dealer,content_type=ContentType.objects.get_for_model(model),object_id=model.pk)
|
||||||
dealer=self.dealer,
|
|
||||||
content_type=ContentType.objects.get_for_model(model),
|
|
||||||
object_id=model.pk,
|
|
||||||
)
|
|
||||||
|
|
||||||
def _get_vat_rate(self):
|
def _get_vat_rate(self):
|
||||||
vat = models.VatRate.objects.filter(dealer=self.dealer, is_active=True).first()
|
vat = models.VatRate.objects.filter(dealer=self.dealer,is_active=True).first()
|
||||||
if not vat:
|
if not vat:
|
||||||
raise ObjectDoesNotExist("No active VAT rate found")
|
raise ObjectDoesNotExist("No active VAT rate found")
|
||||||
return vat.rate
|
return vat.rate
|
||||||
@ -1076,7 +1073,7 @@ class CarFinanceCalculator:
|
|||||||
Decimal(x.get("price_")) for x in self._get_additional_services()
|
Decimal(x.get("price_")) for x in self._get_additional_services()
|
||||||
)
|
)
|
||||||
|
|
||||||
total_discount = self.extra_info.data.get("discount", 0)
|
total_discount = self.extra_info.data.get("discount",0)
|
||||||
|
|
||||||
# total_discount = sum(
|
# total_discount = sum(
|
||||||
# Decimal(
|
# Decimal(
|
||||||
@ -1296,11 +1293,12 @@ def handle_account_process(invoice, amount, finance_data):
|
|||||||
logger.debug(f"Set item_model.for_inventory to False for car {car.vin}.")
|
logger.debug(f"Set item_model.for_inventory to False for car {car.vin}.")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(
|
logger.error(
|
||||||
f"Error updating item_model.for_inventory for car {car.vin} (Invoice {invoice.invoice_number}): {e}",
|
f"Error updating item_model.for_inventory for car {car.vin} (Invoice {invoice.invoice_number}): {e}",
|
||||||
exc_info=True,
|
exc_info=True
|
||||||
)
|
)
|
||||||
|
|
||||||
car.finances.is_sold = True
|
|
||||||
|
# car.finances.is_sold = True
|
||||||
car.finances.save()
|
car.finances.save()
|
||||||
car.item_model.save()
|
car.item_model.save()
|
||||||
|
|
||||||
@ -1374,7 +1372,6 @@ def create_make_accounts(dealer):
|
|||||||
active=True,
|
active=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def handle_payment(request, order):
|
def handle_payment(request, order):
|
||||||
url = "https://api.moyasar.com/v1/payments"
|
url = "https://api.moyasar.com/v1/payments"
|
||||||
callback_url = request.build_absolute_uri(
|
callback_url = request.build_absolute_uri(
|
||||||
|
|||||||
@ -4337,17 +4337,16 @@ def sales_list_view(request, dealer_slug):
|
|||||||
qs = models.ExtraInfo.get_sale_orders(staff=staff)
|
qs = models.ExtraInfo.get_sale_orders(staff=staff)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
print(qs[0])
|
query = request.GET.get('q','').strip()
|
||||||
# query = request.GET.get('q')
|
if query:
|
||||||
# # if query:
|
qs = qs.filter(
|
||||||
# # qs = qs.filter(
|
Q(customer__first_name__icontains=query)|
|
||||||
# # Q(order_number__icontains=query) |
|
Q(customer__last_name__icontains=query)|
|
||||||
# # Q(customer__name__icontains=query) |
|
Q(customer__address__icontains=query)|
|
||||||
# # Q(item_details__icontains=query)
|
Q(customer__phone_number__icontains=query)|
|
||||||
|
Q(estimate__estimate_number__icontains=query)|
|
||||||
# # ).distinct()
|
Q(invoice__invoice_number__icontains=query)).distinct()
|
||||||
# for so in qs:
|
|
||||||
# if query in so.customer_customer
|
|
||||||
|
|
||||||
paginator = Paginator(qs, 30)
|
paginator = Paginator(qs, 30)
|
||||||
page_number = request.GET.get("page")
|
page_number = request.GET.get("page")
|
||||||
@ -4453,15 +4452,19 @@ class EstimateListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
|||||||
entity = dealer.entity
|
entity = dealer.entity
|
||||||
status = self.request.GET.get("status")
|
status = self.request.GET.get("status")
|
||||||
queryset = entity.get_estimates()
|
queryset = entity.get_estimates()
|
||||||
|
type(queryset)
|
||||||
if status:
|
if status:
|
||||||
queryset = queryset.filter(status=status)
|
queryset = queryset.filter(status=status)
|
||||||
# search_query = self.request.GET.get('q', '').strip()
|
for f in queryset.first()._meta.get_fields():
|
||||||
# if search_query:
|
print(f)
|
||||||
# queryset = queryset.filter(
|
search_query = self.request.GET.get('q', '').strip()
|
||||||
# Q(quotation_number__icontains=search_query) |
|
print(search_query)
|
||||||
# Q(customer__name__icontains=search_query)
|
if search_query:
|
||||||
|
print("inside")
|
||||||
|
queryset = queryset.filter(
|
||||||
|
Q(estimate_number__icontains=search_query)
|
||||||
|
|
||||||
# ).distinct() #
|
).distinct()
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<i class="fa-solid fa-book"></i> {{ _("Edit Account") }}
|
<i class="fa-solid fa-book"></i> {{ _("Edit Account") }}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
<i class="fa-solid fa-book"></i> {{ _("Add Account") }}
|
<i class="fa-solid fa-book"></i> {{ _("Add Account") }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<i class="fa-solid fa-book ms-2 text-primary"></i>
|
<i class="fa-solid fa-book ms-2 text-primary"></i>
|
||||||
</h3>
|
</h3>
|
||||||
|
|||||||
@ -37,7 +37,7 @@
|
|||||||
{% for tx in txs %}
|
{% for tx in txs %}
|
||||||
<tr class="position-static">
|
<tr class="position-static">
|
||||||
<td class="align-middle white-space-nowrap customer_name px-1">
|
<td class="align-middle white-space-nowrap customer_name px-1">
|
||||||
<p class="mb-0 fs-9 text-body">{{tx}}</p>
|
<p class="mb-0 fs-9 text-body">{{tx.customer.first_name}} {{tx.customer.last_name}}</p>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle white-space-nowrap customer_address">
|
<td class="align-middle white-space-nowrap customer_address">
|
||||||
<p class="mb-0 fs-9 text-body">{{tx.customer.address}}</p>
|
<p class="mb-0 fs-9 text-body">{{tx.customer.address}}</p>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user