You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
6.0 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from osinacore.models import *
from billing.models import *
from django.http import JsonResponse, HttpResponse
from django.template.loader import get_template
from django.conf import settings
import os
from osinacore.decorators import *
from django.core.files.base import ContentFile
from django.db.models import Q
@staff_login_required
def add_product(request, *args, **kwargs):
item_types = ProjectType.objects.all().order_by('name')
if request.method == 'POST':
title = request.POST.get('title')
description = request.POST.get('description')
item_type_id = request.POST.get('item_type')
item_type = get_object_or_404(ProjectType, id=item_type_id)
amount = request.POST.get('amount')
recurring = request.POST.get('recurring')
Item.objects.create(
type='Product',
title=title,
description = description,
item_type = item_type,
amount = amount,
recurring = recurring,
)
return redirect('items')
context = {
'item_types' : item_types,
}
return render(request, 'add_templates/add-product.html', context)
@staff_login_required
def add_service (request, *args, **kwargs):
item_types = ProjectType.objects.all().order_by('name')
customers = CustomerProfile.objects.all().order_by('user__first_name')
if request.method == 'POST':
title = request.POST.get('title')
description = request.POST.get('description')
customer_id = request.POST.get('customer')
customer = get_object_or_404(CustomerProfile, id=customer_id)
item_type_id = request.POST.get('item_type')
item_type = get_object_or_404(ProjectType, id=item_type_id)
amount = request.POST.get('amount')
recurring = request.POST.get('recurring')
Item.objects.create(
type='Service',
title=title,
description = description,
customer = customer,
item_type = item_type,
amount = amount,
recurring = recurring,
)
return redirect('items')
context = {
'item_types' : item_types,
'customers' : customers
}
return render(request, 'add_templates/add-service.html', context)
@staff_login_required
def add_order(request, customer_id):
customer= get_object_or_404(CustomerProfile, id=customer_id)
businesses = Business.objects.filter(customer=customer)
services = Item.objects.filter(Q(type='Service') & (Q(customer=customer) | Q(customer__isnull=True)))
if request.method == 'POST':
business_id = request.POST.get('business')
date = request.POST.get('date')
if business_id:
business = get_object_or_404(Business, id=business_id)
else:
business = None
order = Order.objects.create(
customer=customer,
business=business,
date=date
)
selected_services_ids = request.POST.getlist('service')
for service_id in selected_services_ids:
service = get_object_or_404(Item, id=service_id)
order_item = OrderItem.objects.create(
order=order,
item=service,
purchased_at=datetime.now()
)
return redirect('orderdetails', order_id=order.order_id)
context = {
'customer' : customer,
'businesses' : businesses,
'services' : services,
}
return render(request, 'add_templates/add-order.html', context)
@staff_login_required
def add_service_in_order(request, service_id, order_id):
service =get_object_or_404(Item, id=service_id)
order= get_object_or_404(Order, id=order_id)
order_item = OrderItem.objects.create(
order = order,
item = service,
purchased_at = datetime.now()
)
order_item.save()
return redirect('orderdetails', order_id=order.order_id)
@staff_login_required
def add_payment_method_modal(request, *args, **kwargs):
if request.method == 'POST':
name = request.POST.get('name')
description = request.POST.get('description')
image = request.FILES.get('image')
payment_method = PaymentType(
name = name,
description = description,
image = image
)
payment_method.save()
# Reload the parent page
return HttpResponse('<script>window.top.location.reload();</script>')
return render(request, 'add_templates/add-payment-method-modal.html')
@staff_login_required
def add_payment_modal(request, order_id):
order = get_object_or_404(Order, id=order_id)
methods = PaymentType.objects.all().order_by('name')
if request.method == 'POST':
amount = request.POST.get('amount')
if request.POST.get('date_paid'):
date_paid = request.POST.get('date_paid')
else:
date_paid = None
if request.POST.get('date_due'):
date_due = request.POST.get('date_due')
else:
date_due = None
comment = request.POST.get('comment')
selected_methods = request.POST.getlist('methods')
payment = OrderPayment(
order = order,
amount = amount,
date_paid = date_paid,
date_due = date_due,
comment = comment
)
payment.save()
for method_id in selected_methods:
method = get_object_or_404(PaymentType, id=method_id)
payment.type.add(method)
# Reload the parent page
return HttpResponse('<script>window.top.location.reload();</script>')
context = {
'methods': methods,
'order': order
}
return render(request, 'add_templates/add-payment-modal.html', context)
@staff_login_required
def add_payment_comment_modal(request):
context = {
}
return render(request, 'add_templates/add-payment-comment-modal.html', context)