You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
7.4 KiB
215 lines
7.4 KiB
from django.contrib import messages
|
|
from django.contrib.auth.models import Group
|
|
from django.core.mail import send_mail, EmailMultiAlternatives
|
|
from django.core.urlresolvers import reverse, reverse_lazy
|
|
from django.http import JsonResponse
|
|
from django.shortcuts import render, redirect
|
|
from django.template.loader import get_template, render_to_string
|
|
from django.utils.decorators import method_decorator
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.views.generic import View, DetailView
|
|
from registration.backends.default.views import RegistrationView
|
|
import json
|
|
import jsonschema
|
|
|
|
from .forms import PrintOrderForm, CustomRegistrationForm
|
|
from .models import PrintDocuments, PrintOrder, Settings, LiveImageUpload
|
|
from archilance import util
|
|
from archilance.mixins import BaseMixin
|
|
from users.models import ContractorResume
|
|
|
|
|
|
class PrintOrderDetailView(DetailView):
|
|
model = PrintOrder
|
|
template_name = 'printorder_detail.html'
|
|
|
|
|
|
class PrintDocumentCreate(BaseMixin, View):
|
|
form_class = PrintOrderForm
|
|
template_name = 'printdocument_create.html'
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
form = self.form_class(request=request)
|
|
return render(request, self.template_name, {'form': form})
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
form = self.form_class(request.POST, request.FILES, request=request)
|
|
if form.is_valid():
|
|
print_order = form.save(commit=False)
|
|
print_order.save()
|
|
|
|
for file in request.FILES.getlist('new_files'):
|
|
print_doc = PrintDocuments.objects.create(file=file, printorder=print_order)
|
|
print_doc.save()
|
|
|
|
print_documents = print_order.print_documents.all()
|
|
limit_size = 10 * 1024 * 1024
|
|
attachments = []
|
|
link_files = []
|
|
|
|
for f in print_documents:
|
|
if f.file.size > limit_size:
|
|
link_files.append(f.file.path)
|
|
else:
|
|
attachments.append(f.file.path)
|
|
|
|
ctx_dict = {
|
|
'username': print_order.sender,
|
|
'phone': print_order.phone,
|
|
'address': print_order.address,
|
|
'files': link_files,
|
|
}
|
|
|
|
|
|
settings = Settings.objects.all().first()
|
|
subject, from_email, to = 'Заявка на распечатку', settings.noreply_email, settings.document_send_email
|
|
text_content = render_to_string('document_email.txt', ctx_dict)
|
|
html_content = get_template('document_email.html').render(ctx_dict)
|
|
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
|
|
msg.attach_alternative(html_content, "text/html")
|
|
for attach in attachments:
|
|
msg.attach_file(attach)
|
|
msg.send()
|
|
|
|
messages.info(request, 'Заявка на распечатку принята')
|
|
return redirect('common:print-order-detail',pk=print_order.pk)
|
|
# import code; code.interact(local=dict(globals(), **locals()))
|
|
else:
|
|
context = self.get_context_data(**kwargs)
|
|
context.update({'form': form})
|
|
return render(request, self.template_name, context)
|
|
|
|
|
|
|
|
class LiveImageUploadCreateView(View):
|
|
@method_decorator(csrf_exempt)
|
|
def dispatch(self, request, *args, **kwargs):
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
# try: data = json.loads(request.body.decode('utf-8'))
|
|
# except: data = {}
|
|
#
|
|
# crop = data.get('crop')
|
|
# image_id = data.get('imageId')
|
|
#
|
|
# if crop and image_id:
|
|
# old_pic = util.get_or_none(models.TmpAdvertPicture, pk=image_id)
|
|
#
|
|
# if old_pic:
|
|
# try: img = pil.Image.open(old_pic.file)
|
|
# except IOError: return http.JsonResponse({'files': [{'error': "Couldn't open an image"}]})
|
|
#
|
|
# format = img.format
|
|
#
|
|
# # exif = img._getexif()
|
|
# #
|
|
# # if exif:
|
|
# # orientation_exif_tag = 274
|
|
# # rotated_img = img.rotate({3: 180, 6: 270, 8: 90}[exif[orientation_exif_tag]])
|
|
#
|
|
# rotation = -crop.get('rotate')
|
|
#
|
|
# if rotation:
|
|
# img = img.rotate(rotation, expand=True)
|
|
#
|
|
# x, y = crop.get('x'), crop.get('y')
|
|
# x2, y2 = x + crop.get('width'), y + crop.get('height')
|
|
#
|
|
# cropped_img = img.crop((x, y, x2, y2)) # Left, upper, right, lower
|
|
#
|
|
# with io.BytesIO() as f:
|
|
# cropped_img.save(f, format=format)
|
|
# pic = models.TmpAdvertPicture.objects.create()
|
|
# pic.file.save(old_pic.file.name, ContentFile(f.getvalue()))
|
|
# pic.save()
|
|
#
|
|
# old_pic.file.delete()
|
|
# old_pic.delete()
|
|
# else:
|
|
# return http.JsonResponse({'files': [{'error': 'No image found'}]})
|
|
# else:
|
|
# image = request.FILES.get('_images')
|
|
#
|
|
# if image:
|
|
# pic = models.TmpAdvertPicture.objects.create(file=image)
|
|
# else:
|
|
# return http.JsonResponse({'files': [{'error': 'No image provided'}]})
|
|
|
|
|
|
#------------------------------------------------
|
|
|
|
print('###########################################')
|
|
print('Uploading a file...')
|
|
print('###########################################')
|
|
|
|
image = request.FILES.get('image')
|
|
|
|
if image:
|
|
img = LiveImageUpload.objects.create(file=image)
|
|
else:
|
|
return JsonResponse({'files': [{'error': 'No image provided'}]})
|
|
|
|
return JsonResponse({'files': [{
|
|
'id': img.pk,
|
|
'name': img.file.name,
|
|
'size': img.file.size,
|
|
'url': img.file.url,
|
|
'thumbnailUrl': img.file.url,
|
|
'deleteUrl': reverse('common:live-image-upload-delete', kwargs={'pk': img.pk}),
|
|
'deleteType': 'POST',
|
|
}]})
|
|
|
|
|
|
class LiveImageUploadDeleteView(View):
|
|
@method_decorator(csrf_exempt)
|
|
def dispatch(self, request, *args, **kwargs):
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
img = util.get_or_none(LiveImageUpload, pk=kwargs.get('pk'))
|
|
|
|
if img:
|
|
img.file.delete()
|
|
img.delete()
|
|
return JsonResponse({'success': True})
|
|
else:
|
|
return JsonResponse({'success': False})
|
|
|
|
|
|
class CustomRegistrationView(RegistrationView):
|
|
form_class = CustomRegistrationForm
|
|
template_name = 'registration/registration_form.html'
|
|
success_url = reverse_lazy('registration_complete')
|
|
|
|
def get_form_kwargs(self):
|
|
kwargs = super().get_form_kwargs()
|
|
kwargs['request'] = self.request
|
|
return kwargs
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
|
|
if self.request.GET.get('type') in ('customer', 'contractor'):
|
|
context['hide_user_type'] = True
|
|
|
|
return context
|
|
|
|
def register(self, form):
|
|
user = super().register(form)
|
|
|
|
if form.cleaned_data.get('customer'):
|
|
group = Group.objects.get(name='Заказчики')
|
|
elif form.cleaned_data.get('contractor'):
|
|
group = Group.objects.get(name='Исполнители')
|
|
else:
|
|
group = None
|
|
|
|
if group:
|
|
user.groups.add(group)
|
|
|
|
user.contractor_resume = ContractorResume.objects.create(text='')
|
|
|
|
user.save()
|
|
|
|
return user
|
|
|