portfolio detail page

remotes/origin/PR-39
PekopT 10 years ago
parent af09207792
commit 14478336d0
  1. 29
      projects/migrations/0015_auto_20160824_1538.py
  2. 15
      projects/models.py
  3. 151
      projects/templates/portfolio_detail.html
  4. 2
      projects/urls.py
  5. 9
      projects/views.py
  6. 5
      users/templates/contractor_office.html
  7. 3
      users/templates/contractor_profile.html
  8. 13
      work_sell/templates/worksell_detail.html

@ -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),
),
]

@ -271,11 +271,25 @@ class Portfolio(models.Model):
term_type = models.CharField(max_length=20, choices=TERMS, default='hour', null=True, blank=True)
user = models.ForeignKey(User, related_name='portfolios', null=True, blank=True)
worksell = models.BooleanField(default=False)
created = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.name
def get_prev(self):
try:
return self.get_previous_by_created()
except self.DoesNotExist:
return None
def get_next(self):
try:
return self.get_next_by_created()
except self.DoesNotExist:
return None
class Meta:
ordering = ['-created']
verbose_name = 'Портфолио'
verbose_name_plural = 'Портфолио'
@ -284,6 +298,7 @@ class Portfolio(models.Model):
return photo and photo.img
class PortfolioPhoto(models.Model):
img = models.ImageField(upload_to='projects/portfolio')
portfolio = models.ForeignKey(Portfolio, related_name='photos')

@ -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 %}

@ -20,6 +20,7 @@ from .views import (
ProjectFilterView,
RejectProjectAnswerView,
sort_candidates,
PortfolioDetail,
)
app_name = 'projects'
@ -40,6 +41,7 @@ urlpatterns = [
urls.url(r'^reject-project-answer/(?P<pk>\d+)/$', RejectProjectAnswerView.as_view(), name='reject-project-answer'),
urls.url(r'^portfolio/create/$', contractor_portfolio_create, name='contractor-portfolio-create'),
urls.url(r'^portfolio/(?P<pk>\d+)/?$', PortfolioDetail.as_view(), name='contractor-portfolio-detail'),
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'),

@ -650,7 +650,7 @@ class OfferOrderView(View):
return HttpResponseRedirect(redirect_url)
def contractor_portfolio_create(request):
def contractor_portfolio_create(request): # TODO: pekopt: shit. rewrite using generic
if request.is_ajax():
form = PortfolioForm(data=request.POST)
# import code; code.interact(local=dict(globals(), **locals()))
@ -707,4 +707,11 @@ class PortfolioDelete(DeleteView):
model = Portfolio
success_url = reverse_lazy('users:contractor-profile')
class PortfolioDetail(DetailView):
model = Portfolio
template_name = 'portfolio_detail.html'
# import code; code.interact(local=dict(globals(), **locals()))

@ -164,7 +164,7 @@
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ p.name }}</p>
<a href="{% url 'projects:contractor-portfolio-detail' p.pk %}">{{ p }}</a>
<div class="buttonsImg" disTab>
<a href="{% url 'projects:contractor-portfolio-edit' p.pk %}">
<div class="insetBI insetBI1">
@ -209,8 +209,7 @@
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ ws }}</p>
<a href="{% url 'work_sell:detail' ws.pk %}">{{ ws }}</a>
</div>
</div>
{% empty %}

@ -176,8 +176,7 @@
{% endthumbnail %}
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ p.name }}</p>
<a href="{% url 'projects:contractor-portfolio-detail' p.pk %}">{{ p }}</a>
{% if request.user.pk == contractor.pk %}
<div class="buttonsImg" disTab>
<a href="{% url 'projects:contractor-portfolio-edit' p.pk %}">

@ -48,6 +48,7 @@
<div class="desReadyBlock">
{% if object.text %}
<div class="col-lg-10 col-lg-offset-1">
<p class="titleReady">Описание:</p>
</div>
@ -56,12 +57,12 @@
{{ 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>
@ -77,11 +78,11 @@
</div>
</div>
</div>
<div class="col-lg-12">
<div class="triangle2"></div>
<div class="arr arr1"></div>
<div class="arr arr2"></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>

Loading…
Cancel
Save