remotes/origin/setup
ArturBaybulatov 10 years ago
commit 83ae308d97
  1. 6
      projects/forms.py
  2. 56
      projects/migrations/0039_auto_20160707_1724.py
  3. 14
      projects/models.py
  4. 97
      projects/templates/contractor_portfolio_edit.html
  5. 6
      projects/urls.py
  6. 31
      projects/views.py
  7. 24
      users/templates/contractor_profile.html
  8. 41
      users/templates/portfolio_create_form.html
  9. 8
      users/templates/worksell_create_form.html
  10. 3
      users/views.py
  11. 12
      work_sell/filters.py
  12. 3
      work_sell/forms.py
  13. 10
      work_sell/templates/worksell_delete.html
  14. 106
      work_sell/templates/worksell_detail.html
  15. 13
      work_sell/templates/worksell_edit.html
  16. 36
      work_sell/templates/worksells_list.html
  17. 4
      work_sell/urls.py
  18. 25
      work_sell/views.py

@ -92,6 +92,12 @@ class PortfolioForm(forms.ModelForm):
model = Portfolio model = Portfolio
fields = '__all__' fields = '__all__'
widgets = {
'construction_type': forms.Select(attrs={'class':'selectpicker'}),
'building_classification': forms.Select(attrs={'class':'selectpicker'}),
'currency': forms.Select(attrs={'class':'selectpicker'}),
'term_type': forms.Select(attrs={'class':'selectpicker'}),
}
class ContractorProjectAnswerForm(forms.ModelForm): class ContractorProjectAnswerForm(forms.ModelForm):
# def __init__(self, *args, **kwargs): # def __init__(self, *args, **kwargs):

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

@ -180,13 +180,13 @@ class Candidate(models.Model):
class Portfolio(models.Model): class Portfolio(models.Model):
description = models.TextField() description = models.TextField()
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True) budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
budget_by_agreement = models.BooleanField(default=False) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True)
specialization = TreeForeignKey(Specialization, related_name='portfolios') specialization = TreeForeignKey(Specialization, related_name='portfolios',null=True, blank=True)
term = models.IntegerField(default=0) term = models.IntegerField(default=0,null=True, blank=True)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour') term_type = models.CharField(max_length=20, choices=TERMS, default='hour',null=True, blank=True)
building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios') building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios',null=True, blank=True)
construction_type = models.ForeignKey(ConstructionType, related_name='portfolios') construction_type = models.ForeignKey(ConstructionType, related_name='portfolios',null=True, blank=True)
location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True) location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True)
worksell = models.BooleanField(default=False) worksell = models.BooleanField(default=False)
user = models.ForeignKey(User, related_name='portfolios') user = models.ForeignKey(User, related_name='portfolios')

@ -0,0 +1,97 @@
{% 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" enctype="multipart/form-data" 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 }}">
<input type="hidden" name="{{ form.contractor.html_name }}" value="{{ form.contractor.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.term.html_name }}" value="{{ form.term.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="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 %}

@ -13,6 +13,8 @@ from .views import (
ProjectComparisonView, ProjectComparisonView,
ProjectsView, ProjectsView,
ProjectView, ProjectView,
contractor_portfolio_create,
ContractorPortfolioUpdateView,
) )
app_name = 'projects' app_name = 'projects'
@ -23,11 +25,13 @@ urlpatterns = [
urls.url(r'^create/$', CustomerProjectCreateView.as_view(), name='customer-project-create'), urls.url(r'^create/$', CustomerProjectCreateView.as_view(), name='customer-project-create'),
urls.url(r'^(?P<pk>\d+)/$', ProjectView.as_view(), name='detail'), urls.url(r'^(?P<pk>\d+)/$', ProjectView.as_view(), name='detail'),
urls.url(r'^(?P<pk>\d+)/edit/$', CustomerProjectEditView.as_view(), name='customer-project-edit'), urls.url(r'^(?P<pk>\d+)/edit/$', CustomerProjectEditView.as_view(), name='customer-project-edit'),
urls.url(r'^(?P<pk>\d+)/trash/$', CustomerProjectTrashView.as_view(), name='customer-project-trash'), urls.url(r'^(?P<pk>\d+)/trash/$', CustomerProjectTrashView.as_view(), name='customer-project-trash'),
urls.url(r'^(?P<pk>\d+)/restore/$', CustomerProjectRestoreView.as_view(), name='customer-project-restore'), urls.url(r'^(?P<pk>\d+)/restore/$', CustomerProjectRestoreView.as_view(), name='customer-project-restore'),
urls.url(r'^(?P<pk>\d+)/delete/$', CustomerProjectDeleteView.as_view(), name='customer-project-delete'), urls.url(r'^(?P<pk>\d+)/delete/$', CustomerProjectDeleteView.as_view(), name='customer-project-delete'),
urls.url(r'^(?P<pk>\d+)/answer/$', ContractorProjectAnswerView.as_view(), name='contractor-project-answer'), urls.url(r'^(?P<pk>\d+)/answer/$', ContractorProjectAnswerView.as_view(), name='contractor-project-answer'),
urls.url(r'^portfolio/create/$', contractor_portfolio_create, name='contractor-portfolio-create'),
urls.url(r'^portfolio/(?P<pk>\d+)/edit/$', ContractorPortfolioUpdateView.as_view(), name='contractor-portfolio-edit'),
urls.url(r'^candidate/add/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', add_candidate, name='add-candidate'), urls.url(r'^candidate/add/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', add_candidate, name='add-candidate'),
urls.url(r'^candidate/comparison/(?P<pk>\d+)$', ProjectComparisonView.as_view(), name='comparison'), urls.url(r'^candidate/comparison/(?P<pk>\d+)$', ProjectComparisonView.as_view(), name='comparison'),
# urls.url(r'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'), # urls.url(r'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'),

@ -1,12 +1,14 @@
import json
from pprint import pprint, pformat
import pydash as _
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponseForbidden, HttpResponseRedirect, HttpResponse from django.http import HttpResponseForbidden, HttpResponseRedirect, HttpResponse, Http404
from django.shortcuts import render, get_object_or_404, redirect from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic import ListView, DetailView, CreateView, View, TemplateView, FormView from django.views.generic import ListView, DetailView, CreateView, View, UpdateView, TemplateView, FormView
from django.views.generic.base import ContextMixin from django.views.generic.base import ContextMixin
from pprint import pprint, pformat
import pydash as _
from .mixins import LastAccessMixin from .mixins import LastAccessMixin
from .models import Project, ProjectFile, Portfolio, Candidate, Answer, Realty, Order from .models import Project, ProjectFile, Portfolio, Candidate, Answer, Realty, Order
@ -312,4 +314,25 @@ class OfferOrderView(View):
return render(request, self.template_name) return render(request, self.template_name)
def contractor_portfolio_create(request):
if request.is_ajax():
form = PortfolioForm(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')
else:
raise Http404
class ContractorPortfolioUpdateView(UpdateView):
model = Portfolio
form_class = PortfolioForm
template_name = 'contractor_portfolio_edit.html'
def get_success_url(self):
return reverse('proje')
# import code; code.interact(local=dict(globals(), **locals())) # import code; code.interact(local=dict(globals(), **locals()))

@ -123,7 +123,7 @@
<div class="galleryWork2 disTab"> <div class="galleryWork2 disTab">
{% for p in user.portfolio.all %} {% for p in user.portfolios.all %}
<div class="col-lg-4"> <div class="col-lg-4">
<div class="insetCol box-sizing disTab"> <div class="insetCol box-sizing disTab">
<div class="imgGal" <div class="imgGal"
@ -134,9 +134,11 @@
<div class="insetCol2 box-sizing disTab"> <div class="insetCol2 box-sizing disTab">
<p>{{ p.name }}</p> <p>{{ p.name }}</p>
<div class="buttonsImg" disTab> <div class="buttonsImg" disTab>
<a href="{% url 'projects:contractor-portfolio-edit' p.pk %}">
<div class="insetBI insetBI1"> <div class="insetBI insetBI1">
<i class="fa fa-pencil"></i> <i class="fa fa-pencil"></i>
</div> </div>
</a>
<div class="insetBI insetBI2"> <div class="insetBI insetBI2">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
</div> </div>
@ -431,13 +433,25 @@
}); });
$('#portfolio-add-form').on('submit', function(e){ $('#portfolio-add-form').on('submit', function(e) {
e.preventDefault(); e.preventDefault();
var dataSerializer = $(this).serialize(); var dataSerializer = $(this).serialize();
alert(dataSerializer); $.ajax({
}); url: '/projects/portfolio/create/',
method: 'POST',
data: dataSerializer,
dataType: 'json',
success: function (data) {
if (data.status == 'ok') {
location.reload();
}
},
error: function (jqXHR, exception) {
console.log(jqXHR.statusCode);
}
});
});
}); });
</script> </script>
{% endblock %} {% endblock %}

@ -3,14 +3,14 @@
<form method="post" id="portfolio-add-form">{% csrf_token %} <form method="post" id="portfolio-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ worksell_form.name.errors.as_text }}</span></p> <p>Название<span style="color: red">{{ portfolio_form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ worksell_form.name.html_name }}" <input type="text" class="box-sizing" name="{{ portfolio_form.name.html_name }}"
value="{{ worksell_form.name.value }}"> value="{{ portfolio_form.name.value }}">
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание <span style="color: red">{{ worksell_form.description.errors.as_text }}</span></p> <p>Описание<span style="color: red">{{ portfolio_form.description.errors.as_text }}</span></p>
<textarea name="{{ worksell_form.description.html_name }}" id="text-new">{{ worksell_form.description.value }}</textarea> <textarea name="{{ portfolio_form.description.html_name }}" id="text-new">{{ portfolio_form.description.value }}</textarea>
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
@ -33,46 +33,55 @@
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%"> <input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div> </div>
<input type="hidden" id="chosenSpecId" name="{{ worksell_form.specialization.html_name }}" <input type="hidden" id="chosenSpecId" name="{{ portfolio_form.specialization.html_name }}"
value="{{ worksell_form.specialization.value }}"> value="{{ portfolio_form.specialization.value }}">
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ worksell_form.budget.errors.as_text }}</p> <p>Бюджет{{ portfolio_form.budget.errors.as_text }}</p>
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}"> <input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
{{ worksell_form.budget_type }} {{ portfolio_form.currency}}
</div> </div>
</div> </div>
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выполнения{{ worksell_form.budget.errors.as_text }}</p> <p>Срок выполнения{{ portfolio_form.budget.errors.as_text }}</p>
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}"> <input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
{{ worksell_form.term_type }} {{ portfolio_form.term_type }}
</div> </div>
</div> </div>
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"></div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="polsF1 polsF2 disTab">
<p>Вид строительства</p> <p>Вид строительства</p>
{{ worksell_form.construction_type}} {{ portfolio_form.construction_type}}
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="polsF1 polsF2 disTab">
<p>Классификация здания</p> <p>Классификация здания</p>
{{ worksell_form.building_classification}} {{ portfolio_form.building_classification}}
</div> </div>
<div class="polsF1 polsF2 disTab">
<input type="text" name="{{ portfolio_form.user.html_name }}" value="{{ request.user.pk }}" />
</div>
<div class="polsF1 polsF2 disTab">
<input type="file" name="{{ portfolio_form.img.html_name }}" >
</div>
<div class="searchF1 polsF1 polsFF links-filter"> <div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить проект"> <input class="btn-submit-link" type="submit" value="Разместить портфолио">
</div> </div>
</form> </form>

@ -61,21 +61,21 @@
</div> </div>
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="polsF1 polsF2 disTab">
<p>Вид строительства</p> <p>Вид строительства</p>
{{ worksell_form.construction_type}} {{ worksell_form.construction_type}}
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="polsF1 polsF2 disTab">
<p>Классификация здания</p> <p>Классификация здания</p>
{{ worksell_form.building_classification}} {{ worksell_form.building_classification}}
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="polsF1 polsF2 disTab">
<input type="text" name="{{ worksell_form.contractor.html_name }}" value="{{ request.user.pk }}" /> <input type="text" name="{{ worksell_form.contractor.html_name }}" value="{{ request.user.pk }}" />
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="polsF1 polsF2 disTab">
<input type="file" name="{{ worksell_form.img.html_name }}" > <input type="file" name="{{ worksell_form.img.html_name }}" >
</div> </div>

@ -9,6 +9,7 @@ from archilance.mixins import BaseMixin
from common.utils import get_or_none from common.utils import get_or_none
from specializations.models import Specialization from specializations.models import Specialization
from work_sell.forms import WorkSellForm from work_sell.forms import WorkSellForm
from projects.forms import PortfolioForm
from .models import User, ContractorFinancialInfo from .models import User, ContractorFinancialInfo
from .mixins import CheckForUserMixin from .mixins import CheckForUserMixin
from .forms import UserEditForm, ContractorFinancicalInfoForm from .forms import UserEditForm, ContractorFinancicalInfoForm
@ -30,12 +31,14 @@ class ContractorListView(ListView):
class ContractorProfileDetailView(DetailView): class ContractorProfileDetailView(DetailView):
model = User model = User
worksell_form_class = WorkSellForm worksell_form_class = WorkSellForm
portfolio_form_class = PortfolioForm
template_name = 'contractor_profile.html' template_name = 'contractor_profile.html'
context_object_name = 'contractor' context_object_name = 'contractor'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['worksell_form'] = self.worksell_form_class context['worksell_form'] = self.worksell_form_class
context['portfolio_form'] = self.portfolio_form_class
return context return context

@ -0,0 +1,12 @@
import django_filters
from work_sell.models import WorkSell
class WorkSellFilter(django_filters.FilterSet):
budget = django_filters.NumberFilter()
budget__gt = django_filters.NumberFilter(name='budget', lookup_expr='gt')
budget__lt = django_filters.NumberFilter(name='budget', lookup_expr='lt')
class Meta:
model = WorkSell

@ -13,10 +13,11 @@ class WorkSellForm(forms.ModelForm):
widgets = { widgets = {
'construction_type': forms.Select(attrs={'class':'selectpicker'}), 'construction_type': forms.Select(attrs={'class':'selectpicker'}),
'building_classification': forms.Select(attrs={'class':'selectpicker'}), 'building_classification': forms.Select(attrs={'class':'selectpicker'}),
'currency': forms.Select(attrs={'class':'selectpicker'}),
'term_type': forms.Select(attrs={'class':'selectpicker'}),
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
# self.request = kwargs.pop('request') # self.request = kwargs.pop('request')
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants() self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()

@ -0,0 +1,10 @@
{% extends 'partials/base.html' %}
{% load common_tags %}
{% block content %}
<form action="" method="post">{% csrf_token %}
<p>Вы дейтсвительно хотите удалить? "{{ object }}"?</p>
<input type="submit" value="Удалить" />
</form>
{% endblock %}

@ -2,87 +2,7 @@
{% load staticfiles %} {% load staticfiles %}
{% load thumbnail %} {% load thumbnail %}
{% block content %} {% block content %}
<body> {% include 'partials/header.html' %}
<div class="wrTop disTab">
<div class="container-fluid topMain">
<div class="row">
<div class="col-lg-3">
<div class="logo" onClick="window.location='/'"></div>
</div>
<div class="col-lg-7">
<ul class="mainMenu">
<li class="icon_tm1">
<a href="javascript:void(0)">Биржа проектов</a>
<span></span>
</li>
<li class="icon_tm2">
<a href="javascript:void(0)">Поиск исполнителей</a>
<span></span>
</li>
<li class="icon_tm3">
<a href="javascript:void(0)">Работы на продажу</a>
<span></span>
</li>
</ul>
</div>
<div class="col-lg-2">
<div class="imgProfile">
<img src="img/profile.jpg" alt="profile-image">
</div>
<div class="infoProfile disTab">
<div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span>
</button>
<ul class="dropdown-menu menu-drop-new">
<li class="icon_mm1">
<a href="#">
Войти заказчиком
<span></span>
</a>
</li>
<li class="icon_mm2">
<a href="#">
Войти исполнителем
<span></span>
</a>
</li>
<li class="icon_mm3">
<a href="#">
Сообщения
<span></span>
</a>
</li>
<li class="icon_mm4">
<a href="#">
Счет
<span></span>
</a>
</li>
<li class="icon_mm5">
<a href="#">
Настройки
<span></span>
</a>
</li>
<li class="icon_mm6">
<a href="#">
FAQ
<span></span>
</a>
</li>
</ul>
</div>
</div>
<div class="rating">
<div class="ratingInset"></div>
<div class="iconRating"></div>
</div>
<p class="ratingPer">45%</p>
</div>
</div>
</div>
</div>
<div class="container mainScore"> <div class="container mainScore">
<div class="row"> <div class="row">
<div class="col-lg-12 allProjects"> <div class="col-lg-12 allProjects">
@ -97,24 +17,40 @@
<div class="btnReadyBlock disTab"> <div class="btnReadyBlock disTab">
<div class="triangle1"></div> <div class="triangle1"></div>
<div class="col-lg-3"> <div class="col-lg-3">
<p class="cenaReady">{{ object.price }} <i class="fa fa-rub"></i></p> <p class="cenaReady">{{ object.budget }} <i class="fa fa-rub"></i></p>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<a href="javascript:void(0)" class="linkReady LR1"> <a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR1">
купить купить
</a> </a>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<a href="javascript:void(0)" class="linkReady LR2"> <a href="{% url 'chat:chat-user' %}" class="linkReady LR2">
Написать сообщение Написать сообщение
</a> </a>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<a href="javascript:void(0)" class="linkReady LR3"> <a href="#" data-toggle="modal" data-target="#contact-contactor-modal" class="linkReady LR3">
посмотреть контакты посмотреть контакты
</a> </a>
</div> </div>
</div> </div>
<div id="contact-contactor-modal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
</button>
<h4 class="modal-title">Контакты владельца </h4>
</div>
<div class="modal-body">
<h2>Здесь находятся контакты владельца</h2>
</div>
</div>
</div>
</div>
<div class="desReadyBlock"> <div class="desReadyBlock">
<div class="col-lg-10 col-lg-offset-1"> <div class="col-lg-10 col-lg-offset-1">
<p class="titleReady">Описание:</p> <p class="titleReady">Описание:</p>

@ -11,11 +11,11 @@
<p class="titleScore">Изменение готового проекта</p> <p class="titleScore">Изменение готового проекта</p>
</div> </div>
<form method="post" id="worksell-add-form">{% csrf_token %} <form method="post" enctype="multipart/form-data" id="worksell-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ form.name.errors.as_text }}</span></p> <p>Название заказа <span style="color: red">{{ form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.name.html_name }}" <input type="text" class="box-sizing" name="{{ form.name.html_name }}" value="{{ form.name.value }}">
value="{{ form.name.value }}"> <input type="hidden" name="{{ form.contractor.html_name }}" value="{{ form.contractor.value }}" />
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
@ -63,7 +63,7 @@
<p>Срок выполнения{{ form.budget.errors.as_text }}</p> <p>Срок выполнения{{ form.budget.errors.as_text }}</p>
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}"> <input type="text" class="box-sizing" name="{{ form.term.html_name }}" value="{{ form.term.value }}">
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
{{ form.term_type }} {{ form.term_type }}
@ -83,14 +83,9 @@
{{ form.building_classification}} {{ form.building_classification}}
</div> </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"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="file" name="{{ form.img.html_name }}" > <input type="file" name="{{ form.img.html_name }}" >
</div> </div>
<div class="searchF1 polsF1 polsFF links-filter"> <div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить проект"> <input class="btn-submit-link" type="submit" value="Сохранить проект">
</div> </div>

@ -9,6 +9,7 @@
<div class="col-lg-12"> <div class="col-lg-12">
<p class="titleScore">Работы на продажу</p> <p class="titleScore">Работы на продажу</p>
</div> </div>
<form>
<div class="col-lg-12"> <div class="col-lg-12">
<div class="filter clearfix"> <div class="filter clearfix">
<div class="triangle1"></div> <div class="triangle1"></div>
@ -35,12 +36,12 @@
</div> </div>
<div class="titleF1 titleF2 disTab"> <div class="titleF1 titleF2 disTab">
<div class="col-lg-4">Тип работ:</div> <div class="col-lg-4">Тип работ:</div>
<div class="col-lg-8">Специализации:</div> <div class="col-lg-8"></div>
</div> </div>
<div class="searchF1 polsF1 polsFF"> <div class="searchF1 polsF1 polsFF">
<div class="col-lg-4"> <div class="col-lg-4">
<input type="text" placeholder="От" class="box-sizing otInp"> <input type="text" placeholder="От" name="from_budget" class="box-sizing otInp">
<input type="text" placeholder="До" class="box-sizing otInp"> <input type="text" placeholder="До" name="to_budget" class="box-sizing otInp">
<select class="selectpicker2 valul"> <select class="selectpicker2 valul">
<option>&#36;</option> <option>&#36;</option>
<option>&#36;</option> <option>&#36;</option>
@ -48,15 +49,9 @@
</select> </select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<a href="javascript:void(0)" class="findReal"> <button type="submit" class="findReal">Поиск</button>
найти исполнителя
</a>
</div> </div>
<div class="col-lg-2"> <div class="col-lg-2">
<a href="javascript:void(0)" class="clearSearch"> <a href="javascript:void(0)" class="clearSearch">
@ -77,20 +72,24 @@
</div> </div>
<div class="slideRes disTab activeSlide"> <div class="slideRes disTab activeSlide">
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-3">Тип работ:</div> <div class="col-lg-3">Классификация</div>
<div class="col-lg-3">Специализации:</div> <div class="col-lg-3">Вид строительства:</div>
<div class="col-lg-3">Местоположение:</div>
<div class="col-lg-3"></div> <div class="col-lg-3"></div>
<div class="col-lg-3">Специализации:</div>
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select class="selectpicker" name="building_classification">
<option>Mustard</option> {% for bc in building_classifications %}
<option>{{ bc }}</option>
{% endfor %}
</select> </select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select class="selectpicker">
<option>Mustard</option> {% for ct in construction_types %}
<option>{{ ct }}</option>
{% endfor %}
</select> </select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
@ -107,6 +106,7 @@
</div> </div>
</div> </div>
</div> </div>
</form>
<div class="galleryWork disTab"> <div class="galleryWork disTab">
{% for work in object_list %} {% for work in object_list %}
<div class="col-lg-3"> <div class="col-lg-3">
@ -120,7 +120,7 @@
</a> </a>
<div class="cenaImg box-sizing"> <div class="cenaImg box-sizing">
<div class="cenaImgInset"> <div class="cenaImgInset">
{{ work.price }} <i class="fa fa-rub"></i> {{ work.budget }} <i class="fa fa-rub"></i>
</div> </div>
</div> </div>
</div> </div>
@ -133,9 +133,11 @@
<i class="fa fa-pencil"></i> <i class="fa fa-pencil"></i>
</div> </div>
</a> </a>
<a href="{% url 'work_sell:delete' work.pk %}">
<div class="insetBI insetBI2"> <div class="insetBI insetBI2">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
</div> </div>
</a>
</div> </div>
</div> </div>
</div> </div>

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

@ -4,15 +4,31 @@ from django.core.urlresolvers import reverse
from django.http import JsonResponse, HttpResponse from django.http import JsonResponse, HttpResponse
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView, TemplateView from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView, TemplateView
from projects.models import BuildingClassfication, ConstructionType
from .models import WorkSell from .models import WorkSell
from .forms import WorkSellForm from .forms import WorkSellForm
class WorkSellsView(ListView): class WorkSellsView(ListView):
model = WorkSell model = WorkSell
template_name = 'worksells_list.html' template_name = 'worksells_list.html'
paginate_by = 20 paginate_by = 20
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): class WorkSellDetail(DetailView):
model = WorkSell model = WorkSell
@ -34,7 +50,6 @@ def work_sell_create(request):
else: else:
data = {'status': 'no', 'form_errors': form.errors} data = {'status': 'no', 'form_errors': form.errors}
return HttpResponse(json.dumps(data), content_type='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
return HttpResponse("HEllo")
class WorkSellCreateView(CreateView): class WorkSellCreateView(CreateView):
@ -52,8 +67,12 @@ class WorkSellUpdateView(UpdateView):
return reverse('work_sell:list') return reverse('work_sell:list')
class WorkSellDeleteView(CreateView): class WorkSellDeleteView(DeleteView):
model = WorkSell model = WorkSell
template_name = 'worksell_delete.html'
def get_success_url(self):
return reverse('work_sell:list')
class JSONResponseMixin(object): class JSONResponseMixin(object):

Loading…
Cancel
Save