38086-vm/restore_views.py
2026-02-07 13:40:39 +00:00

221 lines
7.6 KiB
Python

import os
file_path = 'core/views.py'
# The missing code to append
missing_code = r"""
# Deduct stock
product.stock_quantity -= int(item['quantity'])
product.save()
return JsonResponse({'success': True, 'sale_id': sale.id})
except Exception as e:
return JsonResponse({'success': False, 'error': str(e)}, status=400)
return JsonResponse({'success': False, 'error': 'Invalid request'}, status=405)
@login_required
def search_customers_api(request):
query = request.GET.get('q', '')
customers = Customer.objects.filter(
Q(name__icontains=query) | Q(phone__icontains=query)
).values('id', 'name', 'phone')[:10]
return JsonResponse({'results': list(customers)})
@login_required
def customer_payments(request):
payments = SalePayment.objects.select_related('sale', 'sale__customer').order_by('-payment_date', '-created_at')
paginator = Paginator(payments, 25)
page_number = request.GET.get('page')
payments = paginator.get_page(page_number)
return render(request, 'core/customer_payments.html', {'payments': payments})
@login_required
def customer_payment_receipt(request, pk):
payment = get_object_or_404(SalePayment, pk=pk)
settings = SystemSetting.objects.first()
return render(request, 'core/payment_receipt.html', {
'payment': payment,
'settings': settings,
'amount_in_words': number_to_words_en(payment.amount)
})
@login_required
def sale_receipt(request, pk):
sale = get_object_or_404(Sale, pk=pk)
settings = SystemSetting.objects.first()
return render(request, 'core/sale_receipt.html', {
'sale': sale,
'settings': settings
})
@csrf_exempt
def pos_sync_update(request):
# Placeholder for POS sync logic
return JsonResponse({'status': 'ok'})
@csrf_exempt
def pos_sync_state(request):
# Placeholder for POS sync state
return JsonResponse({'state': {}})
@login_required
def test_whatsapp_connection(request):
settings = SystemSetting.objects.first()
if not settings or not settings.wablas_enabled:
return JsonResponse({'success': False, 'message': 'WhatsApp not enabled'})
return JsonResponse({'success': True, 'message': 'Connection simulation successful'})
@login_required
def add_device(request):
if request.method == 'POST':
name = request.POST.get('name')
device_type = request.POST.get('device_type')
connection_type = request.POST.get('connection_type')
ip_address = request.POST.get('ip_address')
port = request.POST.get('port')
is_active = request.POST.get('is_active') == 'on'
Device.objects.create(
name=name,
device_type=device_type,
connection_type=connection_type,
ip_address=ip_address if ip_address else None,
port=port if port else None,
is_active=is_active
)
messages.success(request, _("Device added successfully!"))
return redirect(reverse('settings') + '#devices')
@login_required
def edit_device(request, pk):
device = get_object_or_404(Device, pk=pk)
if request.method == 'POST':
device.name = request.POST.get('name')
device.device_type = request.POST.get('device_type')
device.connection_type = request.POST.get('connection_type')
device.ip_address = request.POST.get('ip_address')
device.port = request.POST.get('port')
device.is_active = request.POST.get('is_active') == 'on'
if not device.ip_address:
device.ip_address = None
if not device.port:
device.port = None
device.save()
messages.success(request, _("Device updated successfully!"))
return redirect(reverse('settings') + '#devices')
@login_required
def delete_device(request, pk):
device = get_object_or_404(Device, pk=pk)
device.delete()
messages.success(request, _("Device deleted successfully!"))
return redirect(reverse('settings') + '#devices')
# LPO Views (Placeholders/Basic Implementation)
@login_required
def lpo_list(request):
lpos = PurchaseOrder.objects.all().order_by('-created_at')
return render(request, 'core/lpo_list.html', {'lpos': lpos})
@login_required
def lpo_create(request):
suppliers = Supplier.objects.all()
products = Product.objects.filter(is_active=True)
return render(request, 'core/lpo_create.html', {'suppliers': suppliers, 'products': products})
@login_required
def lpo_detail(request, pk):
lpo = get_object_or_404(PurchaseOrder, pk=pk)
settings = SystemSetting.objects.first()
return render(request, 'core/lpo_detail.html', {'lpo': lpo, 'settings': settings})
@login_required
def convert_lpo_to_purchase(request, pk):
lpo = get_object_or_404(PurchaseOrder, pk=pk)
# Conversion logic here (simplified)
# ...
return redirect('purchases')
@login_required
def lpo_delete(request, pk):
lpo = get_object_or_404(PurchaseOrder, pk=pk)
lpo.delete()
return redirect('lpo_list')
@csrf_exempt
@login_required
def create_lpo_api(request):
# API logic for LPO creation
return JsonResponse({'success': True, 'lpo_id': 1}) # Dummy
@login_required
def cashier_registry(request):
registries = CashierCounterRegistry.objects.all()
return render(request, 'core/cashier_registry.html', {'registries': registries})
# Session Views
@login_required
def cashier_session_list(request):
sessions = CashierSession.objects.all().order_by('-start_time')
return render(request, 'core/session_list.html', {'sessions': sessions})
@login_required
def start_session(request):
if request.method == 'POST':
opening_balance = request.POST.get('opening_balance', 0)
# Find assigned counter
registry = CashierCounterRegistry.objects.filter(cashier=request.user).first()
counter = registry.counter if registry else None
CashierSession.objects.create(
user=request.user,
counter=counter,
opening_balance=opening_balance,
status='active'
)
return redirect('pos')
return render(request, 'core/start_session.html')
@login_required
def close_session(request):
session = CashierSession.objects.filter(user=request.user, status='active').first()
if request.method == 'POST' and session:
closing_balance = request.POST.get('closing_balance', 0)
notes = request.POST.get('notes', '')
session.closing_balance = closing_balance
session.notes = notes
session.end_time = timezone.now()
session.status = 'closed'
session.save()
return redirect('index')
return render(request, 'core/close_session.html', {'session': session})
@login_required
def session_detail(request, pk):
session = get_object_or_404(CashierSession, pk=pk)
return render(request, 'core/session_detail.html', {'session': session})
@login_required
def customer_display(request):
return render(request, 'core/customer_display.html')
"""
with open(file_path, 'r') as f:
content = f.read()
# Check if the file ends with the broken function
if content.strip().endswith("line_total=item['line_total']\n )"):
print("Found broken file end. Appending missing code.")
with open(file_path, 'a') as f:
f.write(missing_code)
print("Successfully restored core/views.py")
else:
print("File does not end as expected. Please check manually.")
# Force append if it looks like it's missing the new functions
if "def start_session" not in content:
print("Appending missing functions anyway...")
with open(file_path, 'a') as f:
f.write(missing_code)