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.
 
 
 
 
 
 

157 lines
4.8 KiB

import json
import pydash as _;
_.map = _.map_;
_.filter = _.filter_
from pprint import pprint, pformat
from django.shortcuts import render, redirect
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.http import JsonResponse, HttpResponse
from django.core.files.base import ContentFile
from django.views.generic import ListView, DetailView, CreateView, View, \
UpdateView, DeleteView, TemplateView
from projects.models import BuildingClassfication, ConstructionType
from .models import WorkSell, Picture, WorkSellPhoto
from .forms import WorkSellForm, ContractorWorkSellTrashForm
from .serialize import serialize
from .response import JSONResponse, response_mimetype
class PictureCreateView(CreateView):
model = Picture
fields = '__all__'
def form_valid(self, form):
self.object = form.save()
files = [serialize(self.object)]
data = {'files': files}
response = JSONResponse(data, mimetype=response_mimetype(self.request))
response['Content-Disposition'] = 'inline; filename=files.json'
return response
def form_invalid(self, form):
data = json.dumps(form.errors)
return HttpResponse(content=data, status=400, content_type='application/json')
class BasicCreateView(PictureCreateView):
template_name = 'picture_basic_form.html'
class WorkSellsView(ListView):
model = WorkSell
template_name = 'worksells_list.html'
# paginate_by = 20
paginate_by = 18
def get_form_kwargs(self, **kwargs):
kwargs = super().get_form_kwargs
def get_queryset(self, **kwargs):
qs = WorkSell.objects.all()
# if self.request.GET:
# budget_from = self.request.GET
# pass
return qs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['building_classifications'] = BuildingClassfication.objects.all()
context['construction_types'] = ConstructionType.objects.all()
return context
class WorkSellDetail(DetailView):
model = WorkSell
template_name = 'worksell_detail.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['worksell_related'] = WorkSell.objects.all()[:5]
return context
def work_sell_create(request):
if request.is_ajax():
form = WorkSellForm(data=request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
images_ids = request.POST.get('images-ids').split(';')[:-1]
for pk in images_ids:
picture = Picture.objects.get(pk=pk)
temp_file = ContentFile(picture.file.read())
temp_file.name = picture.file.name
w_photo = WorkSellPhoto()
w_photo.img = temp_file
w_photo.worksell = instance
w_photo.save()
data = {'status': 'ok'}
else:
data = {'status': 'no', 'form_errors': form.errors}
return HttpResponse(json.dumps(data), content_type='application/json')
class WorkSellCreateView(CreateView):
model = WorkSell
form_class = WorkSellForm
template_name = 'worksell_create.html'
class WorkSellUpdateView(UpdateView):
model = WorkSell
form_class = WorkSellForm
template_name = 'worksell_edit.html'
def get_success_url(self):
return reverse('work_sell:list')
class WorkSellDeleteView(DeleteView):
model = WorkSell
template_name = 'worksell_delete.html'
def get_success_url(self):
return reverse('work_sell:list')
class ContractorWorkSellTrashView(View):
form_class = ContractorWorkSellTrashForm
def post(self, request, *args, **kwargs):
form = self.form_class(_.merge({}, request.POST, kwargs), request=request)
if form.is_valid():
worksell = form.cleaned_data.get('pk')
worksell.delete()
messages.info(request, 'Готовая работа удалена')
else:
messages.info(request, 'Произошла ошибка: <pre>{msg}</pre>'.format(msg=pformat(form.errors)))
redirect_to = request.POST.get('next')
return redirect(redirect_to)
class UploadView(View):
template_name = 'upload.html'
def get(self, request, *args, **kwargs):
return render(request, self.template_name)
class JSONResponseMixin(object):
def render_to_json_response(self, context, **response_kwargs):
return JsonResponse(
self.get_data(context),
**response_kwargs
)
def get_data(self, context):
context = {'test': 'data'}
return context
class JSONView(JSONResponseMixin, TemplateView):
def render_to_response(self, context, **response_kwargs):
return self.render_to_json_response(context, **response_kwargs)