search for sales order list

This commit is contained in:
Faheedkhan 2025-07-22 15:00:50 +03:00
parent c4f5f7e8cb
commit 993ba46dbc
5 changed files with 51 additions and 48 deletions

View File

@ -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):

View File

@ -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(

View File

@ -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

View File

@ -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>

View File

@ -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>