38086-vm/patch_views_fixes.py
2026-02-10 06:55:31 +00:00

135 lines
4.4 KiB
Python

import os
import re
file_path = 'core/views.py'
with open(file_path, 'r') as f:
content = f.read()
# Implement add_payment_method_ajax
# It currently looks like:
# @login_required
# def add_payment_method_ajax(request):
# return JsonResponse({'success': True})
new_add_payment_method = """@csrf_exempt
@login_required
def add_payment_method_ajax(request):
if request.method != 'POST':
return JsonResponse({'success': False, 'error': 'Invalid method'})
try:
data = json.loads(request.body)
pm = PaymentMethod.objects.create(
name_en=data.get('name_en'),
name_ar=data.get('name_ar'),
is_active=data.get('is_active', True)
)
return JsonResponse({
'success': True,
'id': pm.id,
'name_en': pm.name_en,
'name_ar': pm.name_ar
})
except Exception as e:
return JsonResponse({'success': False, 'error': str(e)})"""
content = re.sub(
r'@login_required\s+def add_payment_method_ajax\(request\):\s+return JsonResponse\({\s*["']success["']: True\s*}\)',
new_add_payment_method,
content
)
# Implement create_purchase_api
new_create_purchase = """@csrf_exempt
@login_required
def create_purchase_api(request):
if request.method != 'POST':
return JsonResponse({'success': False, 'error': 'Invalid request'})
try:
data = json.loads(request.body)
with transaction.atomic():
purchase = Purchase.objects.create(
supplier_id=data.get('supplier_id') or None,
total_amount=data.get('total_amount', 0),
paid_amount=data.get('paid_amount', 0),
created_by=request.user,
status='paid' if data.get('payment_type') == 'cash' else 'partial'
)
for item in data.get('items', []):
PurchaseItem.objects.create(
purchase=purchase,
product_id=item['id'],
quantity=item['quantity'],
cost_price=item['cost'],
line_total=float(item['quantity']) * float(item['cost'])
)
# Increase Stock
Product.objects.filter(pk=item['id']).update(stock_quantity=F('stock_quantity') + item['quantity'])
# Payment
if purchase.paid_amount > 0:
PurchasePayment.objects.create(
purchase=purchase,
amount=purchase.paid_amount,
payment_method_id=data.get('payment_method_id'),
created_by=request.user
)
purchase.update_balance()
return JsonResponse({'success': True, 'purchase_id': purchase.id})
except Exception as e:
logger.error(f"Error creating purchase: {e}")
return JsonResponse({'success': False, 'error': str(e)})"""
content = re.sub(
r'@csrf_exempt\s+@login_required\s+def create_purchase_api\(request\):\s+return JsonResponse\({\s*["']success["']: True\s*}\)',
new_create_purchase,
content
)
# Implement add_customer_ajax
new_add_customer = """@csrf_exempt
@login_required
def add_customer_ajax(request):
if request.method != 'POST':
return JsonResponse({'success': False})
try:
data = json.loads(request.body)
Customer.objects.create(name=data.get('name'), phone=data.get('phone', ''))
return JsonResponse({'success': True})
except Exception as e:
return JsonResponse({'success': False, 'error': str(e)})"""
content = re.sub(
r'@login_required\s+def add_customer_ajax\(request\):\s+return JsonResponse\({\s*["']success["']: True\s*}\)',
new_add_customer,
content
)
# Implement add_supplier_ajax
new_add_supplier = """@csrf_exempt
@login_required
def add_supplier_ajax(request):
if request.method != 'POST':
return JsonResponse({'success': False})
try:
data = json.loads(request.body)
Supplier.objects.create(name=data.get('name'), phone=data.get('phone', ''))
return JsonResponse({'success': True})
except Exception as e:
return JsonResponse({'success': False, 'error': str(e)})"""
content = re.sub(
r'@login_required\s+def add_supplier_ajax\(request\):\s+return JsonResponse\({\s*["']success["']: True\s*}\)',
new_add_supplier,
content
)
with open(file_path, 'w') as f:
f.write(content)
print("Patched core/views.py successfully.")