remotes/origin/PR-39
Mukhtar 9 years ago
commit bf12698a88
  1. 46
      projects/migrations/0034_auto_20160916_1933.py
  2. 20
      projects/migrations/0035_auto_20160916_2003.py
  3. 15
      projects/models.py
  4. 4
      projects/templates/comparison.html
  5. 11
      projects/templates/customer_project_create.html
  6. 46
      projects/templates/project_detail.html
  7. 25
      users/templates/contractor_profile.html
  8. 2
      users/templates/customer_profile_open_projects.html
  9. 2
      users/templates/partials/customer_profile_info_block.html
  10. 1
      users/views.py
  11. 4
      wallets/forms.py
  12. 27
      wallets/migrations/0016_auto_20160916_1933.py
  13. 8
      wallets/models.py
  14. 11
      wallets/templates/score-detail.html
  15. 1
      work_sell/forms.py
  16. 16
      work_sell/templates/worksell_edit.html

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 16:33
from __future__ import unicode_literals
from django.db import migrations, models
import projects.validators
class Migration(migrations.Migration):
dependencies = [
('projects', '0033_auto_20160916_1534'),
]
operations = [
migrations.AlterField(
model_name='projectworktypesuggestion',
name='commentary',
field=models.TextField(blank=True, verbose_name='Комментарий'),
),
migrations.AlterField(
model_name='projectworktypesuggestion',
name='email',
field=models.EmailField(max_length=254, verbose_name='Email'),
),
migrations.AlterField(
model_name='projectworktypesuggestion',
name='name',
field=models.CharField(max_length=255, verbose_name='Название'),
),
migrations.AlterField(
model_name='projectworktypesuggestion',
name='processed',
field=models.BooleanField(default=False, verbose_name='Рассмотрено?'),
),
migrations.AlterField(
model_name='projectworktypesuggestion',
name='username',
field=models.CharField(blank=True, max_length=255, verbose_name='Имя пользователя'),
),
migrations.AlterField(
model_name='stage',
name='term',
field=models.DateField(validators=[projects.validators.validate_term]),
),
]

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 17:03
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0034_auto_20160916_1933'),
]
operations = [
migrations.AlterField(
model_name='stage',
name='term',
field=models.DateField(),
),
]

@ -163,6 +163,11 @@ class Answer(models.Model):
class AnswerMessage(models.Model):
# Get a message's author:
#
# customer: `message.is_sender_customer and message.answer.project.customer`
# contractor/team: `not message2.is_sender_customer and message2.contractor_or_team`
answer = models.ForeignKey(Answer, related_name='messages')
created = models.DateTimeField(default=timezone.now)
is_sender_customer = models.BooleanField(default=False)
@ -362,11 +367,11 @@ class PortfolioPhoto(models.Model):
class ProjectWorkTypeSuggestion(models.Model):
name = models.CharField(max_length=255)
commentary = models.TextField(blank=True)
processed = models.BooleanField(default=False)
username = models.CharField(max_length=255)
email = models.EmailField()
name = models.CharField(max_length=255, verbose_name='Название')
commentary = models.TextField(blank=True, verbose_name='Комментарий')
processed = models.BooleanField(default=False, verbose_name='Рассмотрено?')
username = models.CharField(max_length=255, blank=True, verbose_name='Имя пользователя')
email = models.EmailField(verbose_name='Email')
class Meta:
verbose_name = 'Предложение типов работ (проектов)'

@ -36,9 +36,9 @@
<td>
{% if cand.answer.author|class_name == 'User' %}
{{ cand.answer.author.get_full_name }}
{% firstof cand.answer.author.get_full_name.strip cand.answer.author.username %}
{% elif cand.answer.author|class_name == 'Team' %}
{{ cand.answer.author.name }}
{% firstof cand.answer.author.name.strip cand.answer.author.username %}
{% endif %}
</td>

@ -304,22 +304,19 @@
;(function() {
var $workTypeSuggestionModal = $('#projectWorkTypeSuggestionModal')
var $form = $workTypeSuggestionModal.find('.-project-work-type-suggestion-form').first()
var $modal = $('#projectWorkTypeSuggestionModal')
var $form = $modal.find('.-project-work-type-suggestion-form').first()
var workTypeSuggestionUrl = '/projects/suggest-work-type/'
$workTypeSuggestionModal.find('.-action-button').first().on('click', function($evt) {
$modal.find('.-action-button').first().on('click', function($evt) {
$.post(workTypeSuggestionUrl, $form.serialize())
.then(function(res) {
if (res.status === 'success') {
console.log('Success')
$form.trigger('reset')
$('.-error').text('')
$workTypeSuggestionModal.modal('hide')
$modal.modal('hide')
$.jGrowl('Предложение успешно отправлено')
} else if (res.status === 'error') {
console.log('Error')
_.flow(
_.toPairs,

@ -5,6 +5,16 @@
{% load specializtions_tags %}
{% load project_tags %}
{% block head_css %}
<style>
.-highlighted-message {
background-color: #E9FFF8;
}
</style>
{% endblock %}
{% block content %}
{% include 'partials/header.html' %}
@ -332,17 +342,17 @@
<div class="commBlock44 disTab">
{% for message in answer.messages.all %}
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
<div class="col-lg-10 col-lg-offset-1 {% if not message.is_sender_customer %}-highlighted-message{% endif %}">
{% if message.is_sender_customer %}
<p class="nameComm nameCommAct">
{{ project.customer.get_full_name }}
<p class="nameComm">
{% firstof project.customer.get_full_name.strip project.customer.username %}
</p>
{% else %}
<p class="nameComm">
<p class="nameComm nameCommAct">
{% if answer.author|class_name == 'User' %}
{{ answer.author.get_full_name }}
{% firstof answer.author.get_full_name.strip answer.author.username %}
{% elif answer.author|class_name == 'Team' %}
{{ answer.author.name }}
{% firstof answer.author.name.strip answer.author.owner.username %}
{% endif %}
</p>
{% endif %}
@ -705,17 +715,17 @@
<div class="commBlock44 disTab">
{% for message in answer.messages.all %}
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
<div class="col-lg-10 col-lg-offset-1 {% if message.is_sender_customer %}-highlighted-message{% endif %}">
{% if message.is_sender_customer %}
<p class="nameComm nameCommAct">
{{ project.customer.get_full_name }}
{% firstof project.customer.get_full_name.strip project.customer.username %}
</p>
{% else %}
<p class="nameComm">
{% if answer.author|class_name == 'User' %}
{{ answer.author.get_full_name }}
{% firstof answer.author.get_full_name.strip answer.author.username %}
{% elif answer.author|class_name == 'Team' %}
{{ answer.author.name }}
{% firstof answer.author.name.strip answer.author.owner.username %}
{% endif %}
</p>
{% endif %}
@ -899,17 +909,17 @@
<div class="commBlock44 disTab">
{% for message in answer.messages.all %}
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
<div class="col-lg-10 col-lg-offset-1 {% if message.is_sender_customer %}-highlighted-message{% endif %}">
{% if message.is_sender_customer %}
<p class="nameComm nameCommAct">
{{ project.customer.get_full_name }}
{% firstof project.customer.get_full_name.strip project.customer.username %}
</p>
{% else %}
<p class="nameComm">
{% if answer.author|class_name == 'User' %}
{{ answer.author.get_full_name }}
{% firstof answer.author.get_full_name.strip answer.author.username %}
{% elif answer.author|class_name == 'Team' %}
{{ answer.author.name }}
{% firstof answer.author.name.strip answer.author.owner.username %}
{% endif %}
</p>
{% endif %}
@ -1071,17 +1081,17 @@
<div class="commBlock44 disTab">
{% for message in answer.messages.all %}
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
<div class="col-lg-10 col-lg-offset-1 {% if message.is_sender_customer %}-highlighted-message{% endif %}">
{% if message.is_sender_customer %}
<p class="nameComm nameCommAct">
{{ project.customer.get_full_name }}
{% firstof project.customer.get_full_name.strip project.customer.username %}
</p>
{% else %}
<p class="nameComm">
{% if answer.author|class_name == 'User' %}
{{ answer.author.get_full_name }}
{% firstof answer.author.get_full_name.strip answer.author.username %}
{% elif answer.author|class_name == 'Team' %}
{{ answer.author.name }}
{% firstof answer.author.name.strip answer.author.owner.username %}
{% endif %}
</p>
{% endif %}

@ -117,7 +117,7 @@
<h4 class="modal-title">Контакты владельца </h4>
</div>
<div class="modal-body">
<div class="row" style="height: 140px;">
<div class="row" style="height: 180px;">
<div class="col-lg-8 col-lg-offset-1">
<ul class="list-summ">
{% if contractor.website %}
@ -126,6 +126,10 @@
<li>{{ contractor.email }}</li>
{% if contractor.skype %}
<li>{{ contractor.skype }}</li>
{% endif %}
{% if contractor.phone %}
<li>{{ contractor.phone }}</li>
{% endif %}
@ -346,6 +350,7 @@
<div id="tab13" class="tab-pane fade">
<div class="col-lg-9">
{% if contractor == request.user %}
<div class="col-lg-12 resume">
<form enctype="multipart/form-data">
<input type="hidden" name="text" value="Hello">
@ -360,6 +365,7 @@
</div>
</form>
</div>
{% endif %}
<div class="col-lg-12 resume-block">
<div class="block-is box-sizing">
@ -412,9 +418,12 @@
</div>
</div>
<div class="col-lg-12 wr-inset-pluss">
{% if contractor.pk == request.user.pk %}
<a href="#" data-toggle="modal" data-target="#resume-text-edit" style="float: left; margin-right: 10px;">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
</a>
{% endif %}
<div class="pluss-block" id="resume-text-out">
{{ contractor.contractor_resume.text|safe }}
</div>
@ -450,10 +459,14 @@
<div class="gal-pluss" id="diplom-cro-gallery">
<div class="inset-gp">
<p class="title-gp">Дипломы / Сертификаты</p>
{% if contractor == request.user %}
<div class="upload2 up-l3">
<input type="file" name="file" id="diplom-upload" multiple>
<p>Загрузить файл</p>
</div>
{% endif %}
<div class="galleryWork2 gal-iss disTab" id="diplom-gallery">
{% for diplom in resume_diploms %}
<div class="col-lg-4">
@ -471,11 +484,14 @@
<p>
{{ diplom.title }}
</p>
{% if contractor.pk == request.user.pk %}
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2 delete-resume-file" data-id="{{ diplom.pk }}">
<i class="fa fa-times"></i>
</div>
</div>
{% endif %}
</div>
</div>
{% endfor %}
@ -483,10 +499,14 @@
</div>
<div class="inset-gp">
<p class="title-gp">Допуск СРО</p>
{% if contractor == request.user %}
<div class="upload2 up-l3">
<input type="file" name="file" id="cro-upload">
<p>Загрузить файл</p>
</div>
{% endif %}
<div class="galleryWork2 gal-iss disTab" id="cro-gallery">
{% for cro in resume_cro %}
<div class="col-lg-4">
@ -504,11 +524,14 @@
<p>
{{ cro.title }}
</p>
{% if contractor.pk == request.user.pk %}
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2 delete-resume-file" data-id="{{ cro.pk }}">
<i class="fa fa-times"></i>
</div>
</div>
{% endif %}
</div>
</div>
{% endfor %}

@ -53,11 +53,13 @@
<li><span>{{ proj.get_team_answers|length }}</span> ответ от имени группы</li>
</ul>
{% if request.user == customer %}
<ul class="color-menu">
<li><a href="{% url 'projects:detail' proj.pk %}#new-answers">Новые: {{ proj|get_new_answers|length }}</a></li>
<li><a href="{% url 'projects:detail' proj.pk %}#candidate-answers">Кандидаты: {{ proj|get_candidate_answers|length }}</a></li>
<li><a href="{% url 'projects:detail' proj.pk %}#rejected-answers">Отказал: {{ proj|get_rejected_answers|length }}</a></li>
</ul>
{% endif %}
<p class="textPro">
{{ proj.text }}

@ -53,6 +53,7 @@
<a href="{{ a }}">Открытые проекты</a>
</li>
{% if request.user == customer %}
<li role="presentation" {% if request.path == b %}class="active"{% endif %}>
<a href="{{ b }}">Текущие проекты</a>
@ -61,6 +62,7 @@
<div class="countG">0</div>
</div>
</li>
{% endif %}
<li role="presentation" {% if request.path == c %}class="active"{% endif %}>
<a href="{{ c }}">Отзывы</a>

@ -394,6 +394,7 @@ class ContractorProfileView(BaseMixin, DetailView):
context['portfolio_form'] = self.portfolio_form_class
display_team_invitation_button = \
request_user.is_authenticated() and \
request_user.is_contractor() and \
contractor != request_user and \
request_user.has_team() and \

@ -9,9 +9,11 @@ class WithDrawForm(forms.ModelForm):
model = WithDraw
fields = (
'passport',
'phone',
'sum',
'yandex_card',
'user',
'yandex_card',
)

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 16:33
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wallets', '0015_auto_20160902_1904'),
]
operations = [
migrations.AddField(
model_name='withdraw',
name='passport',
field=models.CharField(default=0, max_length=50),
preserve_default=False,
),
migrations.AddField(
model_name='withdraw',
name='phone',
field=models.CharField(default='+7 000 000 00 00', max_length=30),
preserve_default=False,
),
]

@ -54,11 +54,13 @@ class InvoiceHistory(models.Model):
class WithDraw(models.Model):
sum = models.DecimalField(max_digits=10, decimal_places=0, validators=[MinValueValidator(1)])
complete = models.BooleanField(default=False)
created = models.DateTimeField(default=timezone.now)
yandex_card = models.CharField(max_length=30)
passport = models.CharField(max_length=50)
phone = models.CharField(max_length=30)
sum = models.DecimalField(max_digits=10, decimal_places=0, validators=[MinValueValidator(1)])
user = models.ForeignKey(User, related_name='with_draw')
complete = models.BooleanField(default=False)
yandex_card = models.CharField(max_length=30)
def __str__(self):
return self.yandex_card

@ -53,6 +53,17 @@
<input type="text" name="{{ form.yandex_card.html_name }}">
<input type="hidden" name="{{ form.user.html_name }}" value="{{ user_score.pk }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Телефон <span style="color: red; margin-left:8px; font-size: 12px;" class="error-{{ form.phone.html_name }}"></span></p>
<input type="text" name="{{ form.phone.html_name }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Номер паспорта <span style="color: red; margin-left:8px; font-size: 12px;" class="error-{{ form.passport.html_name }}"></span></p>
<input type="text" name="{{ form.passport.html_name }}">
</div>
</div>
</div>

@ -46,6 +46,7 @@ class WorkSellForm(forms.ModelForm):
'term',
'term_type',
)
widgets = {
'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
'building_classification': forms.Select(attrs={'class': 'selectpicker'}),

@ -39,7 +39,7 @@
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p>
<p>Специализации <span style="color: red">{{ form.specialization.errors.as_text }}</span></p>
</div>
<div class="-spec-select-container">
@ -64,7 +64,7 @@
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ form.budget.errors.as_text }}</p>
<p>Бюджет <span style="color: red">{{ form.budget.errors.as_text }}</span></p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
@ -76,7 +76,7 @@
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выполнения{{ form.budget.errors.as_text }}</p>
<p>Срок выполнения <span style="color: red">{{ form.budget.errors.as_text }}</span></p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.term.html_name }}" value="{{ form.term.value }}">
@ -90,17 +90,17 @@
<div class="textAreaBlock2 text-nn box-sizing disTab">
</div>
<div class="polsF1 polsF2 disTab">
<p>Вид строительства</p>
{{ form.construction_type}}
<p>Вид строительства <span style="color: red">{{ form.construction_type.errors.as_text }}</span></p>
{{ form.construction_type }}
</div>
<div class="polsF1 polsF2 disTab">
<p>Классификация здания</p>
{{ form.building_classification}}
<p>Классификация здания <span style="color: red">{{ form.building_classification.errors.as_text }}</span></p>
{{ form.building_classification }}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab -live-image-upload-container">
<p>Фотографии</p>
<p>Фотографии <span style="color: red">{{ form.photos.errors.as_text }}</span></p>
{% for photo in form.photos.field.queryset.all %}
<div class="col-lg-3 -image-widget">

Loading…
Cancel
Save