remotes/origin/PR-39
ArturBaybulatov 9 years ago
commit 04d99fdcae
  1. 3
      assets/css/main.css
  2. BIN
      assets/img/listExecutor.png
  3. 1
      assets/js/chat_customer.js
  4. 2
      chat/chat.py
  5. 7
      projects/admin.py
  6. 28
      projects/forms.py
  7. 53
      projects/migrations/0043_auto_20160921_2324.py
  8. 22
      projects/migrations/0044_auto_20160921_2353.py
  9. 22
      projects/migrations/0045_auto_20160922_0039.py
  10. 9
      projects/models.py
  11. 17
      projects/templates/customer_project_create.html
  12. 1
      users/forms.py
  13. 8
      users/templates/contractor_filter.html
  14. 1
      users/templates/contractor_profile.html
  15. 4
      users/templates/worksell_create_form.html
  16. 10
      work_sell/forms.py
  17. 22
      work_sell/migrations/0017_auto_20160922_0057.py
  18. 2
      work_sell/models.py

@ -1988,6 +1988,7 @@ input[type="checkbox"]:checked + span {
position: relative;
text-align: left;
padding: 22px 61px 22px 21px;
height: 94px;
}
.profileTabs2 ul .active a:after {
@ -5609,7 +5610,7 @@ input[type="radio"]:checked + span {
}
.dashedCol4 {
width: 254px;
height: 199px;
height: 156px;
position: absolute;
overflow: hidden;
display: block;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

@ -70,6 +70,7 @@ $(function () {
} else {
$("#stages-pay-form #stagesIds").val(currIdStage);
$("#stagesSelect").prop('disabled', false);
$(".stageSum").text(sumStage);
}
});

@ -127,7 +127,7 @@ class ChatHandler(websocket.WebSocketHandler):
sender_name = msg_data[5]
msg_time = msg_data[2].strftime("%Y-%m-%d %H:%M:%S")
if docs_links:
message += '<br><br>' + docs_links;
message += '<br><br>' + docs_links
if message_type:
waiters = tuple(w for c, w in self.waiters if c == recipent_id)

@ -1,5 +1,6 @@
from django import forms
from django.contrib import admin
from mptt.admin import MPTTModelAdmin
from .models import (
Answer,
@ -18,6 +19,10 @@ from .models import (
)
class BuildingClassficationAdmin(MPTTModelAdmin):
readonly_fields = ('pk', 'lft', 'rght', 'tree_id', 'level')
class ProjectAdminForm(forms.ModelForm):
files = forms.ModelMultipleChoiceField(queryset=ProjectFile.objects.none(), required=False)
@ -44,7 +49,7 @@ class StageAdmin(admin.ModelAdmin):
admin.site.register(Answer)
admin.site.register(Arbitration)
admin.site.register(BuildingClassfication)
admin.site.register(BuildingClassfication,BuildingClassficationAdmin)
admin.site.register(Candidate)
admin.site.register(ConstructionType)
admin.site.register(Order, OrderAdmin)

@ -6,7 +6,11 @@ from pprint import pprint, pformat
import itertools
import pydash as _; _.map = _.map_; _.filter = _.filter_
from .models import Project, ProjectFile, Portfolio, Answer, AnswerMessage, Realty, PortfolioPhoto, Stage, ProjectWorkTypeSuggestion
from .models import (
Project, ProjectFile, Portfolio, Answer,
AnswerMessage, Realty, PortfolioPhoto, Stage,
ProjectWorkTypeSuggestion, BuildingClassfication
)
from archilance import util
from common.models import Location, LiveImageUpload
from specializations.models import Specialization
@ -145,6 +149,15 @@ class CustomerProjectEditForm(forms.ModelForm):
class RealtyForm(forms.ModelForm):
building_classification = TreeNodeChoiceField(
BuildingClassfication.objects.all(),
label="", initial='',
widget=forms.Select(attrs={
'class': 'selectpicker',
'id': 'realtyBuildingClassificationId'
})
)
class Meta:
model = Realty
@ -157,7 +170,6 @@ class RealtyForm(forms.ModelForm):
widgets = {
'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
'building_classification': forms.Select(attrs={'class': 'selectpicker'}),
}
def __init__(self, *args, **kwargs):
@ -168,10 +180,15 @@ class RealtyForm(forms.ModelForm):
self.fields['name'].required = False
self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()
self.fields['building_classification'].queryset = BuildingClassfication.objects.root_nodes()[0].get_descendants()
# self.fields['location'].queryset = Location.objects # Migrate with this enabled
class PortfolioForm(forms.ModelForm):
building_classification = TreeNodeChoiceField(
BuildingClassfication.objects.exclude(name='_root'),
widget=forms.Select(attrs={'class': 'selectpicker'}),
)
duplicate = forms.BooleanField(required=False, label='Some label here')
images_ids = forms.CharField(required=True)
@ -180,7 +197,6 @@ class PortfolioForm(forms.ModelForm):
fields = '__all__'
widgets = {
'building_classification': forms.Select(attrs={'class': 'selectpicker'}),
'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
'currency': forms.Select(attrs={'class': 'selectpicker'}),
'term_type': forms.Select(attrs={'class': 'selectpicker'}),
@ -202,6 +218,11 @@ class PortfolioEditForm(forms.ModelForm):
required=False,
)
building_classification = TreeNodeChoiceField(
BuildingClassfication.objects.exclude(name='_root'),
widget=forms.Select(attrs={'class': 'selectpicker'}),
)
class Meta:
model = Portfolio
@ -222,7 +243,6 @@ class PortfolioEditForm(forms.ModelForm):
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'}),
'work_type': forms.Select(attrs={'class': 'selectpicker -project-work-type-select-field'}),

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-21 20:24
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import django.db.models.manager
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('projects', '0042_portfolio_work_type'),
]
operations = [
migrations.AlterModelManagers(
name='buildingclassfication',
managers=[
('_default_manager', django.db.models.manager.Manager()),
],
),
migrations.AddField(
model_name='buildingclassfication',
name='level',
field=models.PositiveIntegerField(db_index=True, default=0, editable=False),
preserve_default=False,
),
migrations.AddField(
model_name='buildingclassfication',
name='lft',
field=models.PositiveIntegerField(db_index=True, default=0, editable=False),
preserve_default=False,
),
migrations.AddField(
model_name='buildingclassfication',
name='parent',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='projects.BuildingClassfication'),
),
migrations.AddField(
model_name='buildingclassfication',
name='rght',
field=models.PositiveIntegerField(db_index=True, default=0, editable=False),
preserve_default=False,
),
migrations.AddField(
model_name='buildingclassfication',
name='tree_id',
field=models.PositiveIntegerField(db_index=True, default=0, editable=False),
preserve_default=False,
),
]

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-21 20:53
from __future__ import unicode_literals
from django.db import migrations
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('projects', '0043_auto_20160921_2324'),
]
operations = [
migrations.AlterField(
model_name='realty',
name='building_classification',
field=mptt.fields.TreeForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realties', to='projects.BuildingClassfication'),
),
]

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-21 21:39
from __future__ import unicode_literals
from django.db import migrations
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('projects', '0044_auto_20160921_2353'),
]
operations = [
migrations.AlterField(
model_name='portfolio',
name='building_classification',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.BuildingClassfication'),
),
]

@ -5,7 +5,7 @@ from django.db.models import Q
from django.core.exceptions import ValidationError
from django.utils import timezone
from hitcount.models import HitCountMixin
from mptt.models import TreeForeignKey
from mptt.models import TreeForeignKey, MPTTModel
import pydash as _; _.map = _.map_; _.filter = _.filter_
from users.models import User, Team
@ -33,8 +33,9 @@ TERM_TYPE_MORPHS = {
}
class BuildingClassfication(models.Model):
class BuildingClassfication(MPTTModel):
name = models.CharField(max_length=255)
parent = TreeForeignKey('self', blank=True, null=True, related_name='children', db_index=True)
def __str__(self):
return self.name
@ -56,7 +57,7 @@ class ConstructionType(models.Model):
class Realty(models.Model):
building_classification = models.ForeignKey(BuildingClassfication, related_name='realties')
building_classification = TreeForeignKey(BuildingClassfication, related_name='realties')
construction_type = models.ForeignKey(ConstructionType, related_name='realties')
location = TreeForeignKey('common.Location', related_name='realties', null=True, blank=True)
name = models.CharField(max_length=255)
@ -319,7 +320,7 @@ class Candidate(models.Model):
class Portfolio(models.Model):
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios', null=True, blank=True)
building_classification = TreeForeignKey(BuildingClassfication, related_name='portfolios', null=True, blank=True)
construction_type = models.ForeignKey(ConstructionType, related_name='portfolios', null=True, blank=True)
created = models.DateTimeField(auto_now_add=True, auto_created=True)
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True)

@ -237,14 +237,15 @@
value="{{ realty_form.name.value }}">
</div>
<div class="col-lg-3">
<select
id="realtyBuildingClassificationId"
class="selectpicker"
name="{{ realty_form.building_classification.html_name }}">
{% for c in realty_form.building_classification.field.queryset %}
<option value="{{ c.pk }}" {% if realty_form.building_classification.value|int == c.pk %}selected="selected"{% endif %}>{{ c.name }}</option>
{% endfor %}
</select>
{{ realty_form.building_classification }}
{# <select#}
{# id="realtyBuildingClassificationId"#}
{# #}
{# name="{{ realty_form.building_classification.html_name }}">#}
{# {% for c in realty_form.building_classification.field.queryset %}#}
{# <option value="{{ c.pk }}" {% if realty_form.building_classification.value|int == c.pk %}selected="selected"{% endif %}>{{ c.name }}</option>#}
{# {% endfor %}#}
{# </select>#}
</div>
<div class="col-lg-3">
<select

@ -26,6 +26,7 @@ class ContractorResumeForm(forms.ModelForm):
'text',
)
class ContractorResumeFilesForm(forms.ModelForm):
class Meta:
model = ContractorResumeFiles

@ -455,11 +455,11 @@
if (project.order.team && project.order.team.id === teamId) {
window.location.href = projectOrderChatUrl
} else {
var msg = 'Вашей команде предлагается проект http://{{ request.get_host }}' + projectUrl
var msg = 'Вашей команде предлагается проект <a href="http://{{ request.get_host }}' + projectUrl + '">http://{{ request.get_host }}' + projectUrl +'</a>'
socketMain.add_message({
format_type: 'add_message_contact',
message_type: 'invite_order',
data: {
sender_id: String(customerId),
recipent_id: String(contractorId),
@ -476,11 +476,11 @@
if (project.order.contractor && project.order.contractor.id === contractorId) {
window.location.href = projectOrderChatUrl
} else {
var msg = 'Вам предлагается проект http://{{ request.get_host }}' + projectUrl
var msg = 'Вам предлагается проект <a href="http://{{ request.get_host }}' + projectUrl + '">http://{{ request.get_host }}' + projectUrl +'</a>'
socketMain.add_message({
format_type: 'add_message_contact',
message_type: 'invite_order',
data: {
sender_id: String(customerId),
recipent_id: String(contractorId),

@ -1142,7 +1142,6 @@
.parent().addClass($.support.fileInput ? undefined : 'disabled');
function add_resume_file(resumeType, imgUrl,imgPk, galleryId){
$.ajax({
url: '/users/contractorsresumefiles/create/',

@ -95,11 +95,11 @@
</div>
<div class="polsF1 disTab">
<input type="hidden" name="{{ worksell_form.contractor.html_name }}" value="{{ request.user.pk }}" />
<input type="hidden" name="{{ worksell_form.contractor.html_name }}" value="{{ request.user.pk }}" >
</div>
<div class="polsF1 disTab">
<input type="hidden" name="images-ids" id="upload-files-worksell-pk" />
<input type="hidden" name="images-ids" id="upload-files-worksell-pk" >
</div>

@ -1,9 +1,11 @@
import itertools
from django import forms
from mptt.forms import TreeNodeChoiceField
from common.models import Location, LiveImageUpload
from .models import WorkSell, WorkSellPhoto
from specializations.models import Specialization
from projects.models import BuildingClassfication
class ContractorWorkSellTrashForm(forms.Form):
@ -31,6 +33,11 @@ class WorkSellForm(forms.ModelForm):
required=False,
)
building_classification = TreeNodeChoiceField(
BuildingClassfication.objects.exclude(name='_root'),
widget=forms.Select(attrs={'class': 'selectpicker'}),
)
class Meta:
model = WorkSell
@ -38,7 +45,7 @@ class WorkSellForm(forms.ModelForm):
'building_classification',
'construction_type',
'specialization',
'contractor',
'budget',
'currency',
'description',
@ -49,7 +56,6 @@ class WorkSellForm(forms.ModelForm):
)
widgets = {
'building_classification': forms.Select(attrs={'class': 'selectpicker'}),
'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
'currency': forms.Select(attrs={'class': 'selectpicker'}),
'term_type': forms.Select(attrs={'class': 'selectpicker'}),

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-21 21:57
from __future__ import unicode_literals
from django.db import migrations
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('work_sell', '0016_worksell_work_type'),
]
operations = [
migrations.AlterField(
model_name='worksell',
name='building_classification',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='projects.BuildingClassfication'),
),
]

@ -12,7 +12,7 @@ class WorkSell(models.Model):
# TODO: Add consistency ("work_sell" vs "worksell"):
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
building_classification = models.ForeignKey(BuildingClassfication, related_name='worksells', null=True, blank=True)
building_classification = TreeForeignKey(BuildingClassfication, related_name='worksells', null=True, blank=True)
construction_type = models.ForeignKey(ConstructionType, related_name='worksells', null=True, blank=True)
contractor = models.ForeignKey(User, related_name='work_sell', null=True, blank=True) # TODO: Pluralize related name
created = models.DateTimeField(auto_now_add=True)

Loading…
Cancel
Save