#ARC-6 edit and delete portfolio

remotes/origin/setup
Mukhtar 10 years ago
parent 1883b0f9da
commit 52bc32bd2a
  1. 1
      specializations/views.py
  2. 27
      users/templates/contractor_profile.html
  3. 10
      users/templates/worksell_create_form.html
  4. 56
      work_sell/migrations/0009_auto_20160707_1315.py
  5. 27
      work_sell/migrations/0010_auto_20160707_1401.py
  6. 20
      work_sell/models.py
  7. 59
      work_sell/templates/worksell_create.html
  8. 102
      work_sell/templates/worksell_edit.html
  9. 9
      work_sell/templates/worksells_list.html
  10. 4
      work_sell/urls.py
  11. 44
      work_sell/views.py

@ -55,4 +55,5 @@ class JSONResponseMixin(object):
class JSONView(JSONResponseMixin, TemplateView):
def render_to_response(self, context, **response_kwargs):
context = {'test': 'data'}
return self.render_to_json_response(context, **response_kwargs)

@ -182,7 +182,7 @@
</div>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ ws.price }} <i class="fa fa-rub"></i>
{{ ws.budget }} <i class="fa fa-rub"></i>
</div>
</div>
</div>
@ -190,7 +190,9 @@
<p>{{ ws }}</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
<a href="{% url 'work_sell:edit' ws.pk %}">
<i class="fa fa-pencil"></i>
</a>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
@ -388,10 +390,7 @@
</div>
<p class="textComm44">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum
laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin
sodales pulvinar tempor. Cum sociis natoque penatibus et magnis dis parturient
montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate,
felis tellus mollis orci, sed rhoncus sapien nunc eget odio.
</p>
</div>
</div>
@ -414,7 +413,21 @@
$('#worksell-add-form').on('submit', function(e){
e.preventDefault();
var dataSerializer = $(this).serialize();
alert(dataSerializer);
$.ajax({
url: '/work_sell/test/',
method: 'POST',
data: dataSerializer,
dataType: 'json',
success: function(data){
if (data.status == 'ok') {
location.reload();
}
},
error: function(jqXHR, exception){
console.log(jqXHR.statusCode);
}
})
});

@ -44,7 +44,7 @@
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ worksell_form.budget_type }}
{{ worksell_form.currency}}
</div>
</div>
</div>
@ -71,6 +71,14 @@
{{ worksell_form.building_classification}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="text" name="{{ worksell_form.contractor.html_name }}" value="{{ request.user.pk }}" />
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="file" name="{{ worksell_form.img.html_name }}" >
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить проект">
</div>

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-07-07 10:15
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('work_sell', '0008_auto_20160706_1249'),
]
operations = [
migrations.RemoveField(
model_name='worksell',
name='budget_by_agreement',
),
migrations.AddField(
model_name='worksell',
name='currency',
field=models.CharField(blank=True, choices=[('rur', 'RUR'), ('usd', 'USD'), ('eur', 'EUR')], default='rur', max_length=20, null=True),
),
migrations.AlterField(
model_name='worksell',
name='budget',
field=models.DecimalField(blank=True, decimal_places=0, default=0, max_digits=10, null=True),
),
migrations.AlterField(
model_name='worksell',
name='building_classification',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='projects.BuildingClassfication'),
),
migrations.AlterField(
model_name='worksell',
name='construction_type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='projects.ConstructionType'),
),
migrations.AlterField(
model_name='worksell',
name='specialization',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='specializations.Specialization'),
),
migrations.AlterField(
model_name='worksell',
name='term',
field=models.IntegerField(blank=True, default=0, null=True),
),
migrations.AlterField(
model_name='worksell',
name='term_type',
field=models.CharField(blank=True, choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=20, null=True),
),
]

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-07-07 11:01
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
import sorl.thumbnail.fields
class Migration(migrations.Migration):
dependencies = [
('work_sell', '0009_auto_20160707_1315'),
]
operations = [
migrations.AlterField(
model_name='worksell',
name='created',
field=models.DateTimeField(blank=True, default=django.utils.timezone.now, null=True),
),
migrations.AlterField(
model_name='worksell',
name='img',
field=sorl.thumbnail.fields.ImageField(blank=True, null=True, upload_to='worksell/worksell'),
),
]

@ -5,24 +5,24 @@ from django.db import models
from django.utils import timezone
from users.models import User
from projects.models import BuildingClassfication, ConstructionType, TERMS
from projects.models import BuildingClassfication, ConstructionType, TERMS, CURRENCIES
from specializations.models import Specialization
class WorkSell(models.Model):
name = models.CharField(max_length=255)
description = models.TextField(blank=True)
img = ImageField(upload_to='worksell/worksell')
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True)
budget_by_agreement = models.BooleanField(default=False)
specialization = TreeForeignKey(Specialization, related_name='worksells')
term = models.IntegerField(default=0)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour')
img = ImageField(upload_to='worksell/worksell', null=True, blank=True)
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True)
specialization = TreeForeignKey(Specialization, related_name='worksells', null=True, blank=True)
term = models.IntegerField(default=0, null=True, blank=True)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour', null=True, blank=True)
contractor = models.ForeignKey(User, related_name='work_sell')
building_classification = models.ForeignKey(BuildingClassfication, related_name='worksells')
construction_type = models.ForeignKey(ConstructionType, related_name='worksells')
building_classification = models.ForeignKey(BuildingClassfication, related_name='worksells', null=True, blank=True)
construction_type = models.ForeignKey(ConstructionType, related_name='worksells', null=True, blank=True)
location = TreeForeignKey('common.Location', related_name='worksells', null=True, blank=True)
created = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(default=timezone.now, null=True, blank=True)
def __str__(self):
return self.name

@ -1,4 +1,55 @@
<form method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save12" />
</form>
{% extends 'partials/base.html' %}
{% block content %}
<form method="post" enctype="multipart/form-data">{% csrf_token %}
<div class="col-lg-7">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<input type="file" name="files[]" multiple>
</span>
</div>
<input type="submit" value="Save12"/>
</form>
{% endblock %}
{% block js_block %}
<script type="text/javascript">
$(function(){
$.ajax({
url : '/work_sell/test/',
success:function(data){
alert(data);
console.log(data);
}
});
});
{# $(function(){#}
{# var files;#}
{# $('input[type=file]').on('change', prepareUpload);#}
{# $('form').on('submit', uploadFiles);#}
{##}
{# function uploadFiles(e){#}
{# console.log('submit');#}
{# e.stopPropagation();#}
{# e.preventDefault();#}
{# var data = new FormData();#}
{# $.each(files, function(k,v){#}
{# console.log(k);#}
{# console.log(v);#}
{# data.append(k, v);#}
{# });#}
{# console.log(data);#}
{# }#}
{# function prepareUpload(e){#}
{# files = e.target.files;#}
{# }#}
{##}
{# });#}
</script>
{% endblock %}

@ -0,0 +1,102 @@
{% extends 'partials/base.html' %}
{% load common_tags %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12 allProjects">
<p class="titleScore">Изменение готового проекта</p>
</div>
<form method="post" id="worksell-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.name.html_name }}"
value="{{ form.name.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание <span style="color: red">{{ form.description.errors.as_text }}</span></p>
<textarea name="{{ form.description.html_name }}" id="text-new">{{ form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p>
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" id="chosenSpecId" name="{{ form.specialization.html_name }}"
value="{{ form.specialization.value }}">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ form.currency}}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выполнения{{ form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ form.term_type }}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
</div>
<div class="polsF1 polsF2 disTab">
<p>Вид строительства</p>
{{ form.construction_type}}
</div>
<div class="polsF1 polsF2 disTab">
<p>Классификация здания</p>
{{ form.building_classification}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="text" name="{{ form.contractor.html_name }}" value="{{ form.contractor.value }}" />
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="file" name="{{ form.img.html_name }}" >
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить проект">
</div>
</form>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -127,11 +127,12 @@
<div class="insetCol2 box-sizing disTab">
<p>{{ work }}</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<a href="{% url 'work_sell:edit' work.pk %}">
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
</a>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>

@ -4,6 +4,8 @@ from .views import (
WorkSellsView,
WorkSellDetail,
WorkSellCreateView,
WorkSellUpdateView,
work_sell_create,
)
app_name = 'work_sell'
@ -11,5 +13,7 @@ app_name = 'work_sell'
urlpatterns = [
urls.url(r'^$', WorkSellsView.as_view(), name='list'),
urls.url(r'^create/$', WorkSellCreateView.as_view(), name='create'),
urls.url(r'^(?P<pk>\d+)/edit/$', WorkSellUpdateView.as_view(), name='edit'),
urls.url(r'^test/$', work_sell_create, name='test'),
urls.url(r'^(?P<pk>\d+)/$', WorkSellDetail.as_view(), name='detail'),
]

@ -1,5 +1,8 @@
import json
from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse
from django.http import JsonResponse, HttpResponse
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView, TemplateView
from .models import WorkSell
from .forms import WorkSellForm
@ -21,15 +24,52 @@ class WorkSellDetail(DetailView):
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()
data = {'status': 'ok'}
else:
data = {'status': 'no', 'form_errors': form.errors}
return HttpResponse(json.dumps(data), content_type='application/json')
return HttpResponse("HEllo")
class WorkSellCreateView(CreateView):
model = WorkSell
form_class = WorkSellForm
template_name = 'worksell_create.html'
class WorkSellUpdateView(CreateView):
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(CreateView):
model = WorkSell
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)

Loading…
Cancel
Save