commit
83e07bfd96
32 changed files with 1230 additions and 555 deletions
@ -0,0 +1,24 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.7 on 2016-08-23 16:12 |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('projects', '0013_auto_20160819_1735'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AlterModelOptions( |
||||||
|
name='project', |
||||||
|
options={'ordering': ('-created',), 'verbose_name': 'Проект', 'verbose_name_plural': 'Проекты'}, |
||||||
|
), |
||||||
|
migrations.AddField( |
||||||
|
model_name='answer', |
||||||
|
name='rejected', |
||||||
|
field=models.BooleanField(default=False), |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,29 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.7 on 2016-08-24 12:38 |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
import django.utils.timezone |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('projects', '0014_auto_20160823_1912'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AlterModelOptions( |
||||||
|
name='portfolio', |
||||||
|
options={'ordering': ['-created'], 'verbose_name': 'Портфолио', 'verbose_name_plural': 'Портфолио'}, |
||||||
|
), |
||||||
|
migrations.RemoveField( |
||||||
|
model_name='project', |
||||||
|
name='rejected_answers_count', |
||||||
|
), |
||||||
|
migrations.AddField( |
||||||
|
model_name='portfolio', |
||||||
|
name='created', |
||||||
|
field=models.DateTimeField(default=django.utils.timezone.now), |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,151 @@ |
|||||||
|
{% extends 'partials/base.html' %} |
||||||
|
{% load staticfiles %} |
||||||
|
{% load thumbnail %} |
||||||
|
{% block content %} |
||||||
|
{% include 'partials/header.html' %} |
||||||
|
<div class="container mainScore"> |
||||||
|
<div class="row"> |
||||||
|
<div class="col-lg-12 allProjects"> |
||||||
|
<p class="titleScore">{{ object }}</p> |
||||||
|
|
||||||
|
{% if object.get_prev %} |
||||||
|
<div class="all all1"> |
||||||
|
<p><a href="{% url 'projects:contractor-portfolio-detail' object.get_prev.pk %}"> предыдущий</a></p> |
||||||
|
</div> |
||||||
|
{% endif %} |
||||||
|
|
||||||
|
{% if object.get_next %} |
||||||
|
<div class="all all2"> |
||||||
|
<p><a href="{% url 'projects:contractor-portfolio-detail' object.get_next.pk %}">следующий</a></p> |
||||||
|
</div> |
||||||
|
{% endif %} |
||||||
|
</div> |
||||||
|
{# <div class="btnReadyBlock disTab">#} |
||||||
|
{# <div class="triangle1"></div>#} |
||||||
|
{# <div class="col-lg-3">#} |
||||||
|
{# <p class="cenaReady">{{ object.budget }} <i class="fa fa-rub"></i></p>#} |
||||||
|
{# </div>#} |
||||||
|
{# {% if request.user.is_authenticated %}#} |
||||||
|
{# <div class="col-lg-3">#} |
||||||
|
{# <a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR1">#} |
||||||
|
{# купить#} |
||||||
|
{# </a>#} |
||||||
|
{# </div>#} |
||||||
|
{##} |
||||||
|
{# <div class="col-lg-3">#} |
||||||
|
{# <a href="{% url 'chat:chat-user' %}?user_id={{ object.contractor.pk }}" class="linkReady LR2">#} |
||||||
|
{# Написать сообщение#} |
||||||
|
{# </a>#} |
||||||
|
{# </div>#} |
||||||
|
{# {% endif %}#} |
||||||
|
{# <div class="col-lg-3">#} |
||||||
|
{# <a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR3">#} |
||||||
|
{# посмотреть контакты#} |
||||||
|
{# </a>#} |
||||||
|
{# </div>#} |
||||||
|
{# </div>#} |
||||||
|
|
||||||
|
|
||||||
|
<div class="desReadyBlock"> |
||||||
|
{% if object.text %} |
||||||
|
<div class="col-lg-10 col-lg-offset-1"> |
||||||
|
<p class="titleReady">Описание:</p> |
||||||
|
</div> |
||||||
|
<div class="col-lg-10 col-lg-offset-1"> |
||||||
|
<p class="textReady"> |
||||||
|
{{ object.text }} |
||||||
|
</p> |
||||||
|
</div> |
||||||
|
{% endif %} |
||||||
|
<div class="col-lg-12 sliderReady"> |
||||||
|
<div class="arroww prev3"></div> |
||||||
|
<div class="arroww next3"></div> |
||||||
|
<div class="swiper-container gallery-top"> |
||||||
|
<div class="swiper-wrapper"> |
||||||
|
<div class="swiper-slide" style="background-image:url('{% static object.get_cover.url %}')"></div> |
||||||
|
{% for photo in object.photos.all %} |
||||||
|
<div class="swiper-slide" style="background-image:url('{% static photo.img.url %}')"></div> |
||||||
|
{% endfor %} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="swiper-container gallery-thumbs"> |
||||||
|
<div class="swiper-wrapper"> |
||||||
|
<div class="swiper-slide is-selected" |
||||||
|
style="background-image:url('{% static object.get_cover.url %}')"></div> |
||||||
|
{% for photo in object.photos.all %} |
||||||
|
<div class="swiper-slide" style="background-image:url('{% static photo.img.url %}')"></div> |
||||||
|
{% endfor %} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
{# <div class="col-lg-12">#} |
||||||
|
{# <div class="triangle2"></div>#} |
||||||
|
{# <div class="arr arr1"></div>#} |
||||||
|
{# <div class="arr arr2"></div>#} |
||||||
|
{# </div>#} |
||||||
|
</div> |
||||||
|
{# <div class="col-lg-12 sibl">#} |
||||||
|
{# <p>Похожие работы</p>#} |
||||||
|
{# </div>#} |
||||||
|
{# <div class="gallMini disTab">#} |
||||||
|
{# {% for worksell in worksell_related %}#} |
||||||
|
{# <div class="col-lg-3">#} |
||||||
|
{##} |
||||||
|
{# <div class="insetCol box-sizing disTab">#} |
||||||
|
{# {% thumbnail worksell.get_cover "265x265" crop="center" as im %}#} |
||||||
|
{# <div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;">#} |
||||||
|
{# <div class="imgFigure"></div>#} |
||||||
|
{# </div>#} |
||||||
|
{# {% endthumbnail %}#} |
||||||
|
{# </div>#} |
||||||
|
{# </div>#} |
||||||
|
{# {% endfor %}#} |
||||||
|
{# </div>#} |
||||||
|
|
||||||
|
{% include 'partials/footer.html' %} |
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
{% endblock %} |
||||||
|
{% block js_block %} |
||||||
|
<script src="{% static 'js/swiper.min.js' %}"></script> |
||||||
|
<script> |
||||||
|
var galleryTop = new Swiper('.gallery-top', { |
||||||
|
nextButton: '.next3', |
||||||
|
prevButton: '.prev3', |
||||||
|
spaceBetween: 10, |
||||||
|
}); |
||||||
|
var galleryTop = new Swiper('.gallery-top', { |
||||||
|
nextButton: '.next3', |
||||||
|
prevButton: '.prev3', |
||||||
|
spaceBetween: 15, |
||||||
|
onSlideChangeEnd: function (swiper) { |
||||||
|
var activeIndex = swiper.activeIndex; |
||||||
|
$(galleryThumbs.slides).removeClass('is-selected'); |
||||||
|
$(galleryThumbs.slides).eq(activeIndex).addClass('is-selected'); |
||||||
|
galleryThumbs.slideTo(activeIndex, 300, false); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
var galleryThumbs = new Swiper('.gallery-thumbs', { |
||||||
|
spaceBetween: 15, |
||||||
|
freeMode: true, |
||||||
|
centeredSlides: false, |
||||||
|
slidesPerView: 6, |
||||||
|
touchRatio: 0.2, |
||||||
|
nextButton: '.arr2', |
||||||
|
prevButton: '.arr1', |
||||||
|
onClick: function (swiper, event) { |
||||||
|
var clicked = swiper.clickedIndex |
||||||
|
swiper.activeIndex = clicked; |
||||||
|
swiper.updateClasses() |
||||||
|
$(swiper.slides).removeClass('is-selected'); |
||||||
|
$(swiper.clickedSlide).addClass('is-selected'); |
||||||
|
galleryTop.slideTo(clicked, 300, false); |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
</script> |
||||||
|
{% endblock %} |
||||||
@ -0,0 +1,26 @@ |
|||||||
|
from django import template |
||||||
|
from pprint import pprint, pformat |
||||||
|
|
||||||
|
from archilance import util |
||||||
|
|
||||||
|
|
||||||
|
register = template.Library() |
||||||
|
|
||||||
|
@register.filter |
||||||
|
def get_candidates(project): |
||||||
|
return tuple(c.answer.author for c in project.candidates.all()) |
||||||
|
|
||||||
|
@register.filter |
||||||
|
def get_new_answers(project): |
||||||
|
return set(project.answers.filter(rejected=False)) - set(c.answer for c in project.candidates.filter(answer__rejected=False)) |
||||||
|
|
||||||
|
@register.filter |
||||||
|
def get_candidate_answers(project): |
||||||
|
return tuple(c.answer for c in project.candidates.filter(answer__rejected=False)) |
||||||
|
|
||||||
|
@register.filter |
||||||
|
def get_rejected_answers(project): |
||||||
|
return project.answers.filter(rejected=True) |
||||||
|
|
||||||
|
|
||||||
|
# import code; code.interact(local=dict(globals(), **locals())) |
||||||
Loading…
Reference in new issue