PR-51 Редактирование и создание заказа выполнить в одном интерфейсе

remotes/origin/PR-58
booblegum 9 years ago
parent 90cdfd751f
commit 1c7ebb0905
  1. 8
      assets/js/build/init_create_worksell.js
  2. 12
      assets/js/build/init_customer_project_create.js
  3. 3
      assets/js/src/init_customer_project_create.js
  4. 7
      assets/lib/proekton-components/js/src/NoTreeSelect.js
  5. 1
      assets/sass/components/custom-components.sass
  6. 4
      projects/forms.py
  7. 0
      projects/templates/_trash/customer_project_edit.html
  8. 27
      projects/templates/customer_project_create_or_edit.html
  9. 28
      projects/views.py

@ -887,17 +887,13 @@
this._fillOptionsData();
this._bindEvents();
}
}, {
key: 'setElementById',
value: function setElementById(id) {
_get(NoTreeSelect.prototype.__proto__ || Object.getPrototypeOf(NoTreeSelect.prototype), 'setElementById', this).call(this, id);
this.selectedContainer.add(id);
}
}, {
key: '_onclickOptionsElement',
value: function _onclickOptionsElement(e) {
_get(NoTreeSelect.prototype.__proto__ || Object.getPrototypeOf(NoTreeSelect.prototype), '_onclickOptionsElement', this).call(this, e);
this.clear();
var id = $(e.target).data("id");
this.selectedContainer.add(id);
e.preventDefault();
return false;
}

@ -179,15 +179,19 @@
}
});
select_realty.on("add", function (args) {
console.log("realty add");
//TODO: Костыли!!!
$('#checkbox-sb-realty').prop("checked", true);
sb_realty.show();
var id = args[0];
if (id.text) return;
var el = sb_realty.dataTree.getElementById(id);
sb_realty_top.dataPromise.then(function () {
sb_realty_top.$searchInput.val(el.name);
sb_realty_top.selectedEl.id = id;
sb_realty_top.selectedEl.value = el.name;
});
sb_realty.selectedEl.id = id;
sb_realty._fillBoxes();
});
@ -927,17 +931,13 @@
this._fillOptionsData();
this._bindEvents();
}
}, {
key: 'setElementById',
value: function setElementById(id) {
_get(NoTreeSelect.prototype.__proto__ || Object.getPrototypeOf(NoTreeSelect.prototype), 'setElementById', this).call(this, id);
this.selectedContainer.add(id);
}
}, {
key: '_onclickOptionsElement',
value: function _onclickOptionsElement(e) {
_get(NoTreeSelect.prototype.__proto__ || Object.getPrototypeOf(NoTreeSelect.prototype), '_onclickOptionsElement', this).call(this, e);
this.clear();
var id = $(e.target).data("id");
this.selectedContainer.add(id);
e.preventDefault();
return false;
}

@ -124,9 +124,12 @@ $(function () {
let id = args[0];
if (id.text) return;
let el = sb_realty.dataTree.getElementById(id);
sb_realty_top.dataPromise.then(function () {
sb_realty_top.$searchInput.val(el.name);
sb_realty_top.selectedEl.id = id;
sb_realty_top.selectedEl.value = el.name;
});
sb_realty.selectedEl.id = id;
sb_realty._fillBoxes();
})

@ -15,14 +15,11 @@ export default class NoTreeSelect extends AbsBaseSelect{
this._bindEvents();
}
setElementById(id) {
super.setElementById(id);
this.selectedContainer.add(id);
}
_onclickOptionsElement(e) {
super._onclickOptionsElement(e);
this.clear();
let id = $(e.target).data("id");
this.selectedContainer.add(id);
e.preventDefault();
return false;
}

@ -273,6 +273,7 @@ textarea.description
max-height: 68px
.file-upload-widget
list-style: none
.preview
width: 100%
height: 200px

@ -196,8 +196,8 @@ class CustomerProjectEditFormNew(forms.ModelForm):
# self.fields['specialization'].queryset = Specialization.objects.root_nodes()[0].get_descendants()
# self.fields['specialization'].queryset = Specialization.objects # Migrate with this enabled
# print("files = ", self.instance.files)
# if self.instance.pk:
# self.fields['files'].queryset = self.instance.files
if self.instance.pk:
self.fields['files'].queryset = self.instance.files
class RealtyForm(forms.ModelForm):

@ -19,13 +19,20 @@
<div class="row title-scope">
<div class="col-lg-12">
{# <div class="title-scope">#}
<h1>Новый заказ</h1>
<h1>{% if pk %}Редактировать{% else %}Новый{% endif %} заказ</h1>
{# </div>#}
</div>
</div>
<div class="row main-content">
<div class="col-lg-12">
<form action="{% url 'projects:customer-project-create' %}" method="POST"
<form action="
{% if pk %}
{% url 'projects:customer-project-edit' pk=pk %}
{% else %}
{% url 'projects:customer-project-create' %}
{% endif %}
"
method="POST"
enctype="multipart/form-data" novalidate>
{% csrf_token %}
<div class="row">
@ -115,6 +122,20 @@
</div>
<ul style="float: none" class="list-new-new">
{% for file in form.files.field.queryset.all %}
{# <li class="existing-file-widget">#}
{# <input type="checkbox" name="{{ form.files.html_name }}"#}
{# value="{{ file.pk }}" checked#}
{# style='display: none'>#}
{# <p class="file-upload-label">{{ file.file.name|basename }} {{ file.file.size|filesizeformat }}</p>#}
{# <div class="existing-file-remove-btn"></div>#}
{# </li>#}
<li class="file-upload-widget">
<input type="hidden" name="files" class="file-upload-input" value="{{ file.pk }}">
<span class="file-upload-label">{{ file.file.name|basename }} {{ file.file.size|filesizeformat }}</span>
<div class="file-upload-remove-btn"></div>
</li>
{% endfor %}
<li class="file-upload-widget" style="display: none">
<input type="file" name="new_files" class="file-upload-input"
style="position: absolute; top: -1000px; left: -1000px">
@ -368,7 +389,7 @@
<div class="col-lg-3" style="text-align: center">
<input style="width: 100%" type="submit" class="btn btn-simple"
value="РАЗМЕСТИТЬ ЗАКАЗ">
value="{% if pk %}СОХРАНИТЬ{% else %}РАЗМЕСТИТЬ{% endif %} ЗАКАЗ">
</div>
<div class="col-lg-3 col-lg-offset-6" style="text-align: center">
<input style="width: 100%" type="button" class="btn btn-simple"

@ -423,7 +423,7 @@ class CustomerProjectCreateView(BaseMixin, View):
form_class = CustomerProjectEditFormNew
realty_form = RealtyFormNew
work_type_suggestion_form = ProjectWorkTypeSuggestionForm
template_name = 'customer_project_create.html'
template_name = 'customer_project_create_or_edit.html'
def get_context_data(self, **kwargs):
ctx = super().get_context_data()
@ -449,15 +449,13 @@ class CustomerProjectCreateView(BaseMixin, View):
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST, request=request) # Passing `request.FILES` seems unnecessary here. Files are added manually below
print('POST = ', request.POST)
# print('POST = ', request.POST)
form.is_valid()
realty = form.cleaned_data.get('realty')
if realty:
print("Has Realty")
realty_form = self.realty_form(request.POST, instance=realty, request=request, prefix='realty_form')
else:
print("Create new Realty")
realty_form = self.realty_form(request.POST, request=request, prefix='realty_form')
if form.is_valid() and realty_form.is_valid():
@ -480,9 +478,9 @@ class CustomerProjectCreateView(BaseMixin, View):
realty = realty_form.save(commit=False)
realty.user = user
if not request.POST.get('new_realty_name'):
print("Virtual!")
# print("Virtual!")
realty.is_virtual = True
print("Set realty name -->", request.POST.get('new_realty_name'))
# print("Set realty name -->", request.POST.get('new_realty_name'))
realty.name = request.POST.get('new_realty_name')
realty.save()
realty_form.save_m2m()
@ -516,10 +514,10 @@ class CustomerProjectCreateView(BaseMixin, View):
class CustomerProjectEditView(BaseMixin, View):
form_class = CustomerProjectEditForm
form_class = CustomerProjectEditFormNew
realty_form = RealtyForm
work_type_suggestion_form = ProjectWorkTypeSuggestionForm
template_name = 'customer_project_edit.html'
template_name = 'customer_project_create_or_edit.html'
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
@ -557,6 +555,7 @@ class CustomerProjectEditView(BaseMixin, View):
return render(request, self.template_name, context)
def post(self, request, *args, **kwargs):
# print("request.POST = ", request.POST)
project = get_object_or_404(request.user.customer_projects, pk=kwargs.get('pk'))
form = self.form_class(request.POST, request.FILES, request=request, instance=project)
@ -577,14 +576,14 @@ class CustomerProjectEditView(BaseMixin, View):
form.save_m2m()
for file in request.FILES.getlist('new_files'):
proj_file = ProjectFile.objects.create(file=file, project=project)
proj_file.save()
ProjectFile.objects.create(file=file, project=project)
if realty:
realty_form.save()
else:
if not realty:
realty = realty_form.save(commit=False)
realty.user = request.user
if not request.POST.get('new_realty_name'):
realty.is_virtual = True
realty.name = request.POST.get('new_realty_name')
realty.save()
realty_form.save_m2m()
@ -592,7 +591,8 @@ class CustomerProjectEditView(BaseMixin, View):
project.save()
messages.info(request, 'Проект успешно отредактирован')
redirect_to = request.POST.get('next')
# redirect_to = request.POST.get('back')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
else:
if form.errors:

Loading…
Cancel
Save