#ARC-18 add reserve models

remotes/origin/setup
Mukhtar 10 years ago
parent a0fe73f49a
commit c8e216f428
  1. 2
      api/urls.py
  2. 18
      api/views.py
  3. 1
      archilance/settings/base.py
  4. 4
      assets/css/extra.css
  5. 12
      chat/filters.py
  6. 17
      chat/serializers.py
  7. 124
      chat/templates/chat_contractor.html
  8. 113
      chat/templates/chat_customer.html
  9. 22
      projects/migrations/0005_auto_20160726_1957.py
  10. 27
      projects/migrations/0006_auto_20160727_1835.py
  11. 21
      projects/migrations/0007_auto_20160727_1835.py
  12. 3
      projects/models.py
  13. 2
      users/serializers.py
  14. 34
      users/templates/contractor_profile.html
  15. 20
      users/templates/portfolio_create_form.html
  16. 8
      users/templates/worksell_create_form.html
  17. 0
      wallets/__init__.py
  18. 5
      wallets/admin.py
  19. 5
      wallets/apps.py
  20. 36
      wallets/migrations/0001_initial.py
  21. 22
      wallets/migrations/0002_auto_20160727_1835.py
  22. 0
      wallets/migrations/__init__.py
  23. 26
      wallets/models.py
  24. 3
      wallets/tests.py
  25. 3
      wallets/views.py
  26. 1
      work_sell/serialize.py

@ -8,6 +8,7 @@ from .views import (
UserViewSet, UserViewSet,
MessageViewSet, MessageViewSet,
StageViewSet, StageViewSet,
NoteViewSet,
) )
@ -20,5 +21,6 @@ router.register(r'realties', RealtyViewSet)
router.register(r'specializations', SpecializationViewSet) router.register(r'specializations', SpecializationViewSet)
router.register(r'users', UserViewSet) router.register(r'users', UserViewSet)
router.register(r'message', MessageViewSet) router.register(r'message', MessageViewSet)
router.register(r'note', NoteViewSet)
urlpatterns = router.urls urlpatterns = router.urls

@ -18,9 +18,9 @@ from common.models import Location
from common.serializers import LocationSerializer from common.serializers import LocationSerializer
from common.filters import LocationFilterSet from common.filters import LocationFilterSet
from chat.models import Message from chat.models import Message, Notes
from chat.serializers import MessageSerializer from chat.serializers import MessageSerializer, NoteSerializer
from chat.filters import MessageFilterSet from chat.filters import MessageFilterSet, NoteFilterSet
class StageViewSet(ModelViewSet): class StageViewSet(ModelViewSet):
@ -29,10 +29,6 @@ class StageViewSet(ModelViewSet):
filter_class = StageFilterSet filter_class = StageFilterSet
permission_classes = (permissions.IsAuthenticatedOrReadOnly,) permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
# def put(self, request, *args, **kwargs):
# # import code; code.interact(local=dict(globals(), **locals()))
# return super().update(request, *args, **kwargs)
class ProjectViewSet(ModelViewSet): class ProjectViewSet(ModelViewSet):
queryset = Project.objects.all() queryset = Project.objects.all()
@ -40,6 +36,12 @@ class ProjectViewSet(ModelViewSet):
filter_class = ProjectFilterSet filter_class = ProjectFilterSet
class NoteViewSet(ModelViewSet):
queryset = Notes.objects.all()
serializer_class = NoteSerializer
filter_class = NoteFilterSet
class MessageViewSet(ModelViewSet): class MessageViewSet(ModelViewSet):
queryset = Message.objects.all() queryset = Message.objects.all()
serializer_class = MessageSerializer serializer_class = MessageSerializer
@ -57,14 +59,12 @@ class MessageViewSet(ModelViewSet):
return queryset return queryset
class RealtyViewSet(ModelViewSet): class RealtyViewSet(ModelViewSet):
queryset = Realty.objects.all() queryset = Realty.objects.all()
serializer_class = RealtySerializer serializer_class = RealtySerializer
filter_class = RealtyFilterSet filter_class = RealtyFilterSet
class SpecializationViewSet(ModelViewSet): class SpecializationViewSet(ModelViewSet):
queryset = Specialization.objects.root_nodes()[0].get_descendants() queryset = Specialization.objects.root_nodes()[0].get_descendants()
# queryset = Specialization.objects # Migrate with this enabled # queryset = Specialization.objects # Migrate with this enabled

@ -52,6 +52,7 @@ LOCAL_APPS = [
'users', 'users',
'reviews', 'reviews',
'chat', 'chat',
'wallets',
] ]
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS

@ -64,3 +64,7 @@
background-color: #00bb7b; background-color: #00bb7b;
font-size: 17px; font-size: 17px;
} }
.textAreaBlock2 input[type="text"] {
margin: 0;
}

@ -1,6 +1,6 @@
from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter
from .models import Message from .models import Message, Notes
class MessageFilterSet(FilterSet): class MessageFilterSet(FilterSet):
@ -12,3 +12,13 @@ class MessageFilterSet(FilterSet):
class Meta: class Meta:
model = Message model = Message
class NoteFilterSet(FilterSet):
text = AllLookupsFilter()
created = AllLookupsFilter()
sender = RelatedFilter('users.filters.UserFilterSet')
recipent = RelatedFilter('users.filters.UserFilterSet')
class Meta:
model = Notes

@ -20,7 +20,16 @@ class MessageSerializer(ModelSerializer):
) )
# class NotesSerializer(ModelSerializer): class NoteSerializer(ModelSerializer):
#
# class Meta: class Meta:
# model = Notes model = Notes
fields = (
'text',
'created',
'order',
'sender',
'recipent',
)

@ -8,6 +8,7 @@
<div class="col-lg-12 allProjects"> <div class="col-lg-12 allProjects">
<h1>Чат {{ request.user }} {{ request.user.pk }}</h1> <h1>Чат {{ request.user }} {{ request.user.pk }}</h1>
</div> </div>
<div class="btnReadyBlock disTab"> <div class="btnReadyBlock disTab">
<div class="triangle1"></div> <div class="triangle1"></div>
<div class="col-lg-6 col-lg-offset-3 tabsChat"> <div class="col-lg-6 col-lg-offset-3 tabsChat">
@ -29,7 +30,9 @@
</div> </div>
</div> </div>
</div> </div>
<div class="tab-content"> <div class="tab-content">
<!-- Tab1 contacts block -->
<div class="chatBlock disTab tab-pane fade in active" id="tab1"> <div class="chatBlock disTab tab-pane fade in active" id="tab1">
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="messageBlock box-sizing disTab">
@ -56,102 +59,46 @@
</div> </div>
</div> </div>
<div class="col-lg-6 commChat" id="contact-chat">
<div id="message-chat-space">
</div> <div class="col-lg-6 commChat" id="contact-chat">
<div id="message-chat-space"></div>
<form id="contact-chat-form"> <form id="contact-chat-form">
<input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderId"/> <input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderId"/>
<input type="hidden" value="" name="recipentId" id="recipentId"/> <input type="hidden" value="" name="recipentId" id="recipentId"/>
<textarea id="chat" name="chat_message" class="box-sizing"></textarea> <textarea id="chat" name="chat_message" class="box-sizing"></textarea>
<div class="bunChat"> <div class="bunChat">
<div class="setChat box-sizing"> <div class="setChat box-sizing">
<p>Прикрепить файл</p> <p>Прикрепить файл</p>
<span> <span>Не более 10 файлов с общим объемом 500мб</span>
Не более 10 файлов с общим объемом 500мб
</span>
</div> </div>
<a id="contact-chat-add-message" href="javascript:void(0)">отправить</a> <a id="contact-chat-add-message" href="javascript:void(0)">отправить</a>
</div> </div>
</form> </form>
</div> </div>
<div class="col-lg-3 wrChat1">
<div class="messageBlock box-sizing disTab">
<p>Контакты</p>
<div class="message">
<div class="imgMess">
<img src="img/mess.png" alt="mess-image">
</div>
<p class="nameMess">
<a href="#">Иванов Петр Иванович</a>
</p>
<a href="javascript:void(0)" class="conMess">Контакты</a>
</div>
</div>
<div class="col-lg-12 startChat">
<div class="insetSC1">
Начало:
<span>Срок сдачи:</span>
</div>
<div class="insetSC2">
13.0.2016
<span>13.0.2016</span>
</div>
</div>
<div class="col-lg-12 documentsChat">
<p>Входящие документы</p>
<ul>
<li>
Архитерурное 2.jpg
<span>7мб</span>
<div></div>
</li>
</ul> <div class="col-lg-3 wrChat1">
<a href="javascript:void(0)">
Распечатать с помощью ресурса
</a>
</div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<p>Для заметок</p> <p>Для заметок</p>
<textarea id="chat2"></textarea> <textarea id="chat2"></textarea>
<a href="javascript:void()">сохранить</a> <a href="javascript:void()">сохранить</a>
</div> </div>
<div class="closeChat closeChat1">
<a href="javascript:void(0)">
Закрыть проект<br>и оставить отзыв
</a>
</div>
<div class="closeChat closeChat2">
<a href="javascript:void(0)">
Закрыть проект<br>и оставить отзыв
</a>
</div>
</div> </div>
</div> </div>
<!-- End block Tab1 -->
<!-- Tab2 chat order block -->
<div class="chatBlock disTab tab-pane fade" id="tab2"> <div class="chatBlock disTab tab-pane fade" id="tab2">
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="messageBlock box-sizing disTab">
<p>Заказы</p> <p>Заказы</p>
{% for order in orders %} {% for order in orders %}
<div class="orderBlock box-sizing order-block" <div class="orderBlock box-sizing order-block" data-recipent-id="{{ order.project.customer.pk }}" data-id="{{ order.id }}">
data-recipent-id="{{ order.project.customer.pk }}" data-id="{{ order.id }}">
<span class="dimovChat"></span> <span class="dimovChat"></span>
<p class="titleOB"> <p class="titleOB">{{ order }}</p>
{{ order }}
</p>
<div class="hideOBB"> <div class="hideOBB">
<p class="pOB"> <p class="pOB"><span>Испонитель:</span> {{ request.user.get_full_name }}</p>
<span>Испонитель:</span> {{ request.user.get_full_name }} <p class="pOB"><span>Чаты:</span> Иванов, Петров</p>
</p>
<p class="pOB">
<span>Чаты:</span> Иванов, Петров, Пенкин
</p>
<a href="javascript:void(0)" class="linkChat11"> <a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа Полное описание заказа
@ -163,27 +110,24 @@
</div> </div>
<div class="col-lg-6 commChat"> <div class="col-lg-6 commChat">
<div id="message-chat-order-space"> <div id="message-chat-order-space"></div>
</div>
<form id="chat-contractor-order"> <form id="chat-contractor-order">
<input type="text" id="orderId"/> <input type="hidden" id="orderId"/>
<input type="text" id="senderOrderId" value="{{ request.user.pk }}"/> <input type="hidden" id="senderOrderId" value="{{ request.user.pk }}"/>
<input type="text" id="recipentOrderId"/> <input type="hidden" id="recipentOrderId"/>
<textarea id="chat" class="box-sizing"></textarea> <textarea id="chat" class="box-sizing"></textarea>
<div class="bunChat"> <div class="bunChat">
<div class="setChat box-sizing"> <div class="setChat box-sizing">
<p>Прикрепить файл</p> <p>Прикрепить файл</p>
<span> <span>Не более 10 файлов с общим объемом 500мб</span>
Не более 10 файлов с общим объемом 500мб
</span>
</div> </div>
<a href="javascript:void(0)" id="order-chat-add-message">отправить</a> <a href="javascript:void(0)" id="order-chat-add-message">отправить</a>
</div> </div>
</form> </form>
</div>
<div class="col-lg-3 wrTAB">
</div>
<div class="col-lg-3 wrstepschat">
<p>Этапы работы</p> <p>Этапы работы</p>
<div class="stepssBlock box-sizing disTab"> <div class="stepssBlock box-sizing disTab">
<p class="titleStepss">1 / Согласование условий</p> <p class="titleStepss">1 / Согласование условий</p>
@ -193,16 +137,20 @@
</div> </div>
<div id="order-stages"></div> <div id="order-stages"></div>
<div class="textAreaBlock2 FFD box-sizing disTab">
<a id="approve-stages" href="javascript:void()">согласовать</a>
</div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<p>Для заметок</p> <p>Для заметок</p>
<textarea id="chat2"></textarea> <textarea id="chat2"></textarea>
<a href="javascript:void()">сохранить</a> <a href="javascript:void()">сохранить</a>
</div> </div>
<div class="linkChatB box-sizing disTab">
<a href="javascript:void(0)">предложить проект</a>
</div>
</div> </div>
</div> </div>
<!-- End block Tab2-->
<!-- Tab3 groups block -->
<div class="chatBlock disTab tab-pane fade" id="tab3"> <div class="chatBlock disTab tab-pane fade" id="tab3">
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="messageBlock box-sizing disTab">
@ -272,6 +220,7 @@
</div> </div>
</div> </div>
</div> </div>
<!-- End block Tab3-->
</div> </div>
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}
</div> </div>
@ -282,10 +231,6 @@
{% block js_block %} {% block js_block %}
{# <script type="text/javascript" src="{% static 'js/chat.js' %}"></script>#} {# <script type="text/javascript" src="{% static 'js/chat.js' %}"></script>#}
<script type="text/javascript"> <script type="text/javascript">
/**
* Created by mukhtar on 04.07.16.
*/
var SocketHandler = function () { var SocketHandler = function () {
var userId = {{ request.user.pk }}; var userId = {{ request.user.pk }};
@ -339,7 +284,6 @@
sock.send(JSON.stringify(data)); sock.send(JSON.stringify(data));
var textareaMessage = document.getElementById("message"); var textareaMessage = document.getElementById("message");
textareaMessage.value = ""; textareaMessage.value = "";
} }
} }
@ -350,6 +294,13 @@
var form = document.getElementById('message_form'); var form = document.getElementById('message_form');
var csrftoken = getCookie('csrftoken'); var csrftoken = getCookie('csrftoken');
$("#approve-stages").on('click', function(){
$(".stage-block-approve").each(function(){
var stageId = $(this).attr('data-id');
alert(stageId);
});
});
// Вытащить сообщения для чата заказа // Вытащить сообщения для чата заказа
$('.order-block').on('click', function () { $('.order-block').on('click', function () {
var orderId = $(this).attr('data-id'); var orderId = $(this).attr('data-id');
@ -366,7 +317,6 @@
dataType: 'json', dataType: 'json',
success: function (json) { success: function (json) {
$.each(json.results, function (i, v) { $.each(json.results, function (i, v) {
var senderName = 'Вы'; var senderName = 'Вы';
var className = 'youChat'; var className = 'youChat';
if (v.sender.id !== currentChatUser) { if (v.sender.id !== currentChatUser) {
@ -390,7 +340,7 @@
console.log(json.results); console.log(json.results);
var htmlInbox = ""; var htmlInbox = "";
$.each(json.results, function (i, v) { $.each(json.results, function (i, v) {
htmlInbox += '<div class="numberStepp box-sizing"><div class="insetNumStepp">' + htmlInbox += '<div data-id="'+ v.id +'" class="numberStepp box-sizing stage-block-approve"><div class="insetNumStepp">' +
'<p class="titleNumStepp"><span>Этап '+ v.pos +'</span>'+ v.name +'</p>' + '<p class="titleNumStepp"><span>Этап '+ v.pos +'</span>'+ v.name +'</p>' +
'<p class="textNumStepp">Результаты этапа:'+ v.result+'</p><div>' + '<p class="textNumStepp">Результаты этапа:'+ v.result+'</p><div>' +
'<p>до 16.03.2015</p><span>'+ v.cost +'<i class="fa fa-rub"></i></span></div></div></div>'; '<p>до 16.03.2015</p><span>'+ v.cost +'<i class="fa fa-rub"></i></span></div></div></div>';

@ -24,6 +24,7 @@
</div> </div>
</div> </div>
<div class="tab-content"> <div class="tab-content">
<!-- Tab1 (contacts block)-->
<div class="chatBlock disTab tab-pane fade in active" id="tab1"> <div class="chatBlock disTab tab-pane fade in active" id="tab1">
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="messageBlock box-sizing disTab">
@ -52,8 +53,8 @@
<div id="message-chat-space"> <div id="message-chat-space">
</div> </div>
<form id="contact-chat-form"> <form id="contact-chat-form">
<input type="text" value="{{ request.user.pk }}" name="senderId" id="senderId"/> <input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderId"/>
<input type="text" value="" name="recipentId" id="recipentId"/> <input type="hidden" value="" name="recipentId" id="recipentId"/>
<textarea id="chat" name="chat_message" class="box-sizing"></textarea> <textarea id="chat" name="chat_message" class="box-sizing"></textarea>
<div class="bunChat"> <div class="bunChat">
@ -71,77 +72,29 @@
</div> </div>
<div class="col-lg-3 wrChat1"> <div class="col-lg-3 wrChat1">
<div class="messageBlock box-sizing disTab">
<p>Контакты</p>
<div class="message">
<div class="imgMess">
<img src="img/mess.png" alt="mess-image">
</div>
<p class="nameMess">
<a href="#">Иванов Петр Иванович</a>
</p>
<a href="javascript:void(0)" class="conMess">Контакты</a>
</div>
</div>
<div class="col-lg-12 startChat">
<div class="insetSC1">
Начало:
<span>Срок сдачи:</span>
</div>
<div class="insetSC2">
13.0.2016
<span>13.0.2016</span>
</div>
</div>
<div class="col-lg-12 documentsChat">
<p>Входящие документы</p>
<ul>
<li>
Архитерурное 2.jpg
<span>7мб</span>
<div></div>
</li>
</ul>
<a href="javascript:void(0)">
Распечатать с помощью ресурса
</a>
</div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<p>Для заметок</p> <p>Для заметок</p>
<textarea id="chat2"></textarea> <textarea id="chat2"></textarea>
<a href="javascript:void()">сохранить</a> <a href="javascript:void()">сохранить</a>
</div> </div>
<div class="closeChat closeChat1">
<a href="javascript:void(0)">
Закрыть проект<br>и оставить отзыв
</a>
</div>
<div class="closeChat closeChat2">
<a href="javascript:void(0)">
Закрыть проект<br>и оставить отзыв
</a>
</div>
</div> </div>
</div> </div>
<!-- End block Tab1(contacts block)-->
<!-- Tab2 (chat order block)-->
<div class="chatBlock disTab tab-pane fade" id="tab2"> <div class="chatBlock disTab tab-pane fade" id="tab2">
<div class="col-lg-3 wrMessages"> <div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab"> <div class="messageBlock box-sizing disTab">
<p>Заказы</p> <p>Заказы</p>
{% for order in orders %} {% for order in orders %}
<div class="orderBlock box-sizing order-block" <div class="orderBlock box-sizing order-block"
data-recipent-id="{{ order.order.contractor.pk }}" data-id="{{ order.order.id }}"> data-recipent-id="{{ order.order.contractor.pk }}" data-id="{{ order.order.id }}">
<span class="dimovChat"></span> <span class="dimovChat"></span>
<p class="titleOB"> <p class="titleOB">{{ order }}</p>
{{ order }}
</p>
<div class="hideOBB"> <div class="hideOBB">
<p class="pOB"> <p class="pOB">
<span>Испонитель:</span> {{ order.order.contractor.get_full_name }} <span>Испонитель:</span> {{ order.order.contractor.get_full_name }}
</p> </p>
{# <p class="pOB">#}
{# <span>Чаты:</span> Иванов, Петров, Пенкин#}
{# </p>#}
<a href="javascript:void(0)" class="linkChat11"> <a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа Полное описание заказа
@ -181,14 +134,13 @@
<p class="textStepss"> <p class="textStepss">
Обсуджение задания и условий выполнения работы. Подтверждение заказа исполнителем. Обсуджение задания и условий выполнения работы. Подтверждение заказа исполнителем.
</p> </p>
<p></p>
</div> </div>
<div class="stepssBlock box-sizing disTab"> <div class="stepssBlock box-sizing disTab">
<p class="textStepss"> <p class="textStepss">
Какое кол-во этапов подразумевает работа? <input type="text" id="countStage" size="3"/> Какое кол-во этапов подразумевает работа? <input type="text" id="countStage" size="3"/>
</p> </p>
<div id="formsetStage" class="numberStepp box-sizing" style="display: none;"> <div id="formsetStage" class="numberStepp box-sizing" style="display: none;">
<div class="insetNumStepp" id="stage1"> <div class="insetNumStepp" id="stage1">
<p class="titleNumStepp"> <p class="titleNumStepp">
<span>Этап </span> <span>Этап </span>
@ -207,7 +159,7 @@
</div> </div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<a href="javascript:void()" id="addStagesForm">сохранить</a> <a href="javascript:void()" id="addStagesForm">отправить на согласование</a>
</div> </div>
</div> </div>
@ -218,6 +170,49 @@
<div id="order-stages"></div> <div id="order-stages"></div>
<div class="stepssBlock box-sizing disTab">
<p class="titleStepss">2 / Резервирование</p>
<p class="textStepss">
Резервирование заказчиком суммы оплаты по заказ. Деньги перечисляются и хранятся на сайте.
</p>
<div class="textAreaBlock2 FFD box-sizing disTab">
<a href="#" data-toggle="modal" data-target="#reserve-stage-modal">Зарезирвировать</a>
</div>
</div>
<!-- Зарезервировать средства (модальное окно)-->
<div id="reserve-stage-modal" class="modal fade">
<div class="modal-dialog" style="width:900px;">
<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">
<div class="textAreaBlock2 text-nn box-sizing disTab">
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить">
</div>
</div>
<div class="modal-footer"></div>
</div>
</div>
</div>
<!-- Конец блока -->
<div class="stepssBlock box-sizing disTab">
<p class="titleStepss">3 / Выполнение работы</p>
<p class="textStepss">
Процесс выполнения задания в заказе до получения заказчиком итогового результата работы.
</p>
</div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<p>Для заметок</p> <p>Для заметок</p>
<textarea id="chat2"></textarea> <textarea id="chat2"></textarea>
@ -228,6 +223,7 @@
</div> </div>
</div> </div>
</div> </div>
<!-- End block (chat order block) -->
</div> </div>
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}
</div> </div>
@ -324,6 +320,7 @@
dataType: 'json', dataType: 'json',
success: function (json) { success: function (json) {
var htmlInbox = ""; var htmlInbox = "";
console.log(json.results.length);
$.each(json.results, function (i, v) { $.each(json.results, function (i, v) {
if (v.status == "not_agreed") { if (v.status == "not_agreed") {
htmlInbox += '<div class="numberStepp box-sizing">' + htmlInbox += '<div class="numberStepp box-sizing">' +

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-26 16:57
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('projects', '0004_auto_20160726_1931'),
]
operations = [
migrations.AlterField(
model_name='stage',
name='created',
field=models.DateTimeField(default=datetime.datetime(2016, 7, 26, 16, 57, 39, 517305, tzinfo=utc)),
),
]

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-27 15:35
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('projects', '0005_auto_20160726_1957'),
]
operations = [
migrations.AddField(
model_name='stage',
name='is_paid',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='stage',
name='created',
field=models.DateTimeField(default=datetime.datetime(2016, 7, 27, 15, 35, 21, 468300, tzinfo=utc)),
),
]

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-27 15:35
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('projects', '0006_auto_20160727_1835'),
]
operations = [
migrations.AlterField(
model_name='stage',
name='created',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

@ -165,8 +165,9 @@ class Stage(models.Model):
term = models.IntegerField(default=0) term = models.IntegerField(default=0)
term_type = models.CharField(max_length=10, choices=TERMS, default='hour') term_type = models.CharField(max_length=10, choices=TERMS, default='hour')
status = models.CharField(choices=STATUSES, max_length=30, default='not_agreed') status = models.CharField(choices=STATUSES, max_length=30, default='not_agreed')
created = models.DateTimeField(default=timezone.now()) created = models.DateTimeField(default=timezone.now)
pos = models.IntegerField(default=0, null=True, blank=True) pos = models.IntegerField(default=0, null=True, blank=True)
is_paid = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return self.name return self.name

@ -10,7 +10,7 @@ class UserSerializer(ModelSerializer):
fields = ( fields = (
'avatar', 'avatar',
'contractor_financial_info', 'financial_info',
'contractor_specializations', 'contractor_specializations',
'contractor_status', 'contractor_status',
'created', 'created',

@ -287,7 +287,34 @@
<div class="pluss-block"> <div class="pluss-block">
{{ contractor.contractor_resume.text }} {{ contractor.contractor_resume.text }}
<a href="#" data-toggle="modal" data-target="#resume-text-edit">Редактировать</a>
</div> </div>
<!-- Редактирование текста резюме (модальное окно)-->
<div id="resume-text-edit" class="modal fade">
<div class="modal-dialog" style="width:900px;">
<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">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Описание резюме</p>
<textarea name="" id="text-new">{{ contractor.contractor_resume.text }}</textarea>
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить">
</div>
</div>
<div class="modal-footer"></div>
</div>
</div>
</div>
<!-- Конец блока (resume-modal)-->
<div class="gal-pluss"> <div class="gal-pluss">
<div class="inset-gp"> <div class="inset-gp">
<p class="title-gp">Дипломы / Сертификаты</p> <p class="title-gp">Дипломы / Сертификаты</p>
@ -459,8 +486,6 @@
}); });
}); });
var url = '/work_sell/basic/'; var url = '/work_sell/basic/';
var csrftoken = $.cookie('csrftoken'); var csrftoken = $.cookie('csrftoken');
$('#fileupload').fileupload({ $('#fileupload').fileupload({
@ -476,6 +501,11 @@
console.log(data); console.log(data);
$.each(data.result.files, function (index, file) { $.each(data.result.files, function (index, file) {
var img = $('<img style="width:200px;height:200px;">').attr('src', file.url).appendTo("#files"); var img = $('<img style="width:200px;height:200px;">').attr('src', file.url).appendTo("#files");
console.log(file);
var currentValue = $("#upload-files-pk").val();
currentValue += file.id + ';';
$("#upload-files-pk").val(currentValue);
}); });
}, },
progressall: function (e, data) { progressall: function (e, data) {

@ -77,9 +77,27 @@
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<input type="file" name="{{ portfolio_form.img.html_name }}" > <input type="hidden" name="" id="upload-files-pk" value="" />
</div> </div>
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Выберите файлы</span>
<!-- The file input field used as target for the file upload widget -->
<input id="fileupload" type="file" name="file" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<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>

@ -72,12 +72,12 @@
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<input type="text" 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>
<div class="polsF1 polsF2 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>#}
<!-- The fileinput-button span is used to style the file input field as button --> <!-- The fileinput-button span is used to style the file input field as button -->

@ -0,0 +1,5 @@
from django.contrib import admin
from .models import InvoiceHistory
admin.site.register(InvoiceHistory)

@ -0,0 +1,5 @@
from django.apps import AppConfig
class WalletsConfig(AppConfig):
name = 'wallets'

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-27 15:35
from __future__ import unicode_literals
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
from django.utils.timezone import utc
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='InvoiceHistory',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('comment', models.TextField(blank=True)),
('created', models.DateTimeField(default=datetime.datetime(2016, 7, 27, 15, 35, 21, 502073, tzinfo=utc))),
('sum', models.DecimalField(blank=True, decimal_places=0, default=0, max_digits=10, null=True)),
('type', models.CharField(max_length=20)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invoice_history', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'Счет(История)',
'verbose_name_plural': 'Счет(История)',
},
),
]

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-27 15:35
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('wallets', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='invoicehistory',
name='created',
field=models.DateTimeField(default=datetime.datetime(2016, 7, 27, 15, 35, 53, 331650, tzinfo=utc)),
),
]

@ -0,0 +1,26 @@
from django.db import models
from django.utils import timezone
from users.models import User
TYPES = (
('minus', 'Снятие'),
('plus', 'Приход'),
)
class InvoiceHistory(models.Model):
comment = models.TextField(blank=True)
created = models.DateTimeField(default=timezone.now)
sum = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
type = models.CharField(max_length=20)
user = models.ForeignKey(User, related_name='invoice_history')
def __str__(self):
return self.pk
class Meta:
verbose_name = 'Счет(История)'
verbose_name_plural = 'Счет(История)'

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

@ -5,6 +5,7 @@ from django.core.urlresolvers import reverse
def serialize(instance, file_attr='file'): def serialize(instance, file_attr='file'):
obj = getattr(instance, file_attr) obj = getattr(instance, file_attr)
return { return {
'id': instance.id,
'url': obj.url, 'url': obj.url,
'name': obj.name, 'name': obj.name,
'type': mimetypes.guess_type(obj.path)[0] or 'image/png', 'type': mimetypes.guess_type(obj.path)[0] or 'image/png',

Loading…
Cancel
Save