#ARC-23 Add models , forms and views for print documents

remotes/origin/setup
Mukhtar 10 years ago
parent 2d968c670b
commit 5440e8758a
  1. 1
      archilance/urls.py
  2. 1
      chat/templates/chat_contractor.html
  3. 4
      common/admin.py
  4. 28
      common/forms.py
  5. 49
      common/migrations/0002_auto_20160729_1530.py
  6. 30
      common/migrations/0003_auto_20160729_1747.py
  7. 36
      common/models.py
  8. 4
      common/templates/document_email.html
  9. 100
      common/templates/printdocument_create.html
  10. 11
      common/urls.py
  11. 50
      common/views.py
  12. 4
      templates/partials/base.html
  13. 6
      users/templates/contractor_profile.html
  14. 19
      users/templates/portfolio_create_form.html
  15. 21
      wallets/migrations/0003_auto_20160729_1209.py

@ -18,6 +18,7 @@ urlpatterns = [
url(r'^chat/', include('chat.urls')), url(r'^chat/', include('chat.urls')),
url(r'^specializations/', include('specializations.urls')), url(r'^specializations/', include('specializations.urls')),
url(r'^users/', include('users.urls')), url(r'^users/', include('users.urls')),
url(r'^common/', include('common.urls')),
url(r'^users/', include('registration.backends.default.urls')), url(r'^users/', include('registration.backends.default.urls')),
url(r'^admin/', admin.site.urls), url(r'^admin/', admin.site.urls),

@ -149,7 +149,6 @@
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<ul class="notes-block"> <ul class="notes-block">
</ul> </ul>
<p>Для заметок</p> <p>Для заметок</p>
<form id="add-form-order-note"> <form id="add-form-order-note">

@ -1,7 +1,7 @@
from django.contrib import admin from django.contrib import admin
from mptt.admin import MPTTModelAdmin from mptt.admin import MPTTModelAdmin
from .models import Location, MainPage, Settings from .models import Location, MainPage, Settings, PrintOrder, PrintDocuments
class LocationAdmin(MPTTModelAdmin): class LocationAdmin(MPTTModelAdmin):
readonly_fields = ('pk', 'lft', 'rght', 'tree_id', 'level') readonly_fields = ('pk', 'lft', 'rght', 'tree_id', 'level')
@ -9,3 +9,5 @@ class LocationAdmin(MPTTModelAdmin):
admin.site.register(Location, LocationAdmin) admin.site.register(Location, LocationAdmin)
admin.site.register(MainPage) admin.site.register(MainPage)
admin.site.register(Settings) admin.site.register(Settings)
admin.site.register(PrintOrder)
admin.site.register(PrintDocuments)

@ -0,0 +1,28 @@
from django import forms
from .models import PrintOrder, PrintDocuments
class PrintOrderForm(forms.ModelForm):
files = forms.ModelMultipleChoiceField(
queryset=PrintDocuments.objects.none(),
widget=forms.CheckboxSelectMultiple,
required=False,
)
class Meta:
model = PrintOrder
fields = (
'sender',
'phone',
'address',
'shipping',
'files',
'text',
)
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
if self.instance.pk:
self.fields['files'].queryset = self.instance.files

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-29 12:30
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('common', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='PrintDocuments',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('file', models.FileField(upload_to='common/printdocuments/')),
],
options={
'verbose_name': 'Документы на распечатку',
'verbose_name_plural': 'Документы на распечатку',
},
),
migrations.CreateModel(
name='PrintOrder',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sender', models.CharField(max_length=150)),
('phone', models.CharField(max_length=50)),
('address', models.CharField(max_length=255)),
('created', models.DateTimeField(default=django.utils.timezone.now)),
('shipping', models.CharField(choices=[('self_delivery', 'Самовывоз'), ('courier_delivery', 'Доставка курьером')], default='self_delivery', max_length=30)),
('text', models.TextField()),
],
options={
'verbose_name': 'Заявка на распечатку',
'verbose_name_plural': 'Заявки на распечатку',
},
),
migrations.AddField(
model_name='printdocuments',
name='printorder',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='print_documents', to='common.PrintOrder'),
),
]

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-29 14:47
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('common', '0002_auto_20160729_1530'),
]
operations = [
migrations.AddField(
model_name='settings',
name='document_send_description',
field=models.TextField(blank=True),
),
migrations.AddField(
model_name='settings',
name='document_send_email',
field=models.EmailField(default='muhtarzubanchi05@gmail.com', max_length=100),
),
migrations.AddField(
model_name='settings',
name='document_send_time_remove',
field=models.IntegerField(default=14),
),
]

@ -1,4 +1,5 @@
from django.db import models from django.db import models
from django.utils import timezone
from mptt.models import TreeForeignKey, MPTTModel from mptt.models import TreeForeignKey, MPTTModel
@ -36,6 +37,9 @@ class MainPage(models.Model):
class Settings(models.Model): class Settings(models.Model):
time_notification = models.IntegerField(default=180) time_notification = models.IntegerField(default=180)
document_send_email = models.EmailField(max_length=100, default="muhtarzubanchi05@gmail.com")
document_send_description = models.TextField(blank=True)
document_send_time_remove = models.IntegerField(default=14)
def __str__(self): def __str__(self):
return 'Настройки сайта' return 'Настройки сайта'
@ -43,3 +47,35 @@ class Settings(models.Model):
class Meta: class Meta:
verbose_name = 'Настройки сайта' verbose_name = 'Настройки сайта'
verbose_name_plural = 'Настройки сайта' verbose_name_plural = 'Настройки сайта'
class PrintOrder(models.Model):
SHIPPINGS = (
('self_delivery', 'Самовывоз'),
('courier_delivery', 'Доставка курьером'),
)
sender = models.CharField(max_length=150)
phone = models.CharField(max_length=50)
address = models.CharField(max_length=255)
created = models.DateTimeField(default=timezone.now)
shipping = models.CharField(max_length=30, default='self_delivery', choices=SHIPPINGS)
text = models.TextField()
def __str__(self):
return self.sender
class Meta:
verbose_name = 'Заявка на распечатку'
verbose_name_plural = 'Заявки на распечатку'
class PrintDocuments(models.Model):
printorder = models.ForeignKey(PrintOrder, related_name='print_documents')
file = models.FileField(upload_to='common/printdocuments/')
def __str__(self):
return self.file.url
class Meta:
verbose_name = 'Документы на распечатку'
verbose_name_plural = 'Документы на распечатку'

@ -0,0 +1,4 @@
Welcome {{ username }}!
Your username is {{ username }} and your password is {{ files }}.

@ -0,0 +1,100 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% load thumbnail %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<h1>Услуга по распечатке документов</h1>
<form method="POST" enctype="multipart/form-data" novalidate>
{% csrf_token %}
<div class="chatBlock new-rass new-rass2 disTab">
<div class="col-lg-7">
<p class="new-pp new-pp3">Формирование заказа</p>
{% if form.non_field_errors %}
<div class="new-pp3" style="color: red; margin-top: 70px">{{ form.non_field_errors }}</div>
{% endif %}
<div class="col-lg-3 wrChat1">
<div id="fileUploadContainer" class="col-lg-12 documentsChat">
<div class="upload">
<p id="fileUploadAddBtn" style="margin: 0">+ добавить файл (до 100 файлов)</p>
</div>
<ul class="list-new-new">
<li class="file-upload-widget" style="display: none">
<input type="file" name="new_files" class="file-upload-input"
style="position: absolute; top: -1000px; left: -1000px">
<p class="file-upload-label"></p>
<div class="file-upload-remove-btn"></div>
</li>
</ul>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Описание <span style="color: red">{{ form.text.errors.as_text }}</span></p>
<textarea name="{{ form.text.html_name }}" id="text-new">{{ form.text.value }}</textarea>
</div>
<div class="searchF1 polsF1 polsFF radio-afer">
<div class="col-lg-6">
<label>
<input
type="radio"
name="{{ form.shipping.html_name }}"
value="self_delivery">
<span></span>
</label>
<p class="text-afer">Самовывоз</p>
</div>
<div class="col-lg-6">
<label>
<input
type="radio"
name="{{ form.shipping.html_name }}"
value="courier_delivery">
<span></span>
</label>
<p class="text-afer">Доставка курьером</p>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Получатель<span style="color: red">{{ form.sender.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.sender.html_name }}"
value="{{ form.sender.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Телефон<span style="color: red">{{ form.phone.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.phone.html_name }}"
value="{{ form.phone.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Адрес<span style="color: red">{{ form.address.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.address.html_name }}"
value="{{ form.address.value }}">
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Отправить">
</div>
</div>
<div class="col-lg-5">
<p class="new-pp new-pp3">Описание услуги и расценки</p>
</div>
</div>
</form>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -0,0 +1,11 @@
from django.conf import urls
from .views import (
PrintDocumentCreate,
)
app_name = 'common'
urlpatterns = [
urls.url(r'^printdocument/create/$', PrintDocumentCreate.as_view(), name='create'),
]

@ -1,3 +1,49 @@
from django.shortcuts import render from django.shortcuts import render, redirect
from django.contrib import messages
from django.core.mail import send_mail
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
from django.views.generic import View
from archilance.mixins import BaseMixin
# Create your views here. from .forms import PrintOrderForm
from .models import PrintDocuments, PrintOrder
class PrintDocumentCreate(BaseMixin, View):
form_class = PrintOrderForm
template_name = 'printdocument_create.html'
def get(self, request, *args, **kwargs):
form = self.form_class(request=request)
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST, request.FILES, request=request)
if form.is_valid():
print_order = form.save(commit=False)
print_order.save()
for file in request.FILES.getlist('new_files'):
print_doc = PrintDocuments.objects.create(file=file, printorder=print_order)
print_doc.save()
send_mail('Заявка на распечатку',
get_template('document_email.html').render(
{
'username': 'Mukhtar',
'files': 'This is files list'
}
),
'dagdahzub@mail.ru',
['muhtarzubanchi05@gmail.com'],
fail_silently=True
)
messages.info(request, 'Заявка на распечатку принята')
return redirect('common:create')
# import code; code.interact(local=dict(globals(), **locals()))
else:
context = self.get_context_data(**kwargs)
context.update({'form': form})
return render(request, self.template_name, context)

@ -60,8 +60,8 @@
<script src='{% static "lib/jquery.fileupload/js/jquery.fileupload.js" %}'></script> <script src='{% static "lib/jquery.fileupload/js/jquery.fileupload.js" %}'></script>
<script src='{% static "lib/jquery.fileupload/js/jquery.fileupload-process.js" %}'></script> <script src='{% static "lib/jquery.fileupload/js/jquery.fileupload-process.js" %}'></script>
{#<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>#} <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
{#<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.js"></script>#} <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.js"></script>
<script src='{% static "my-libs.js" %}'></script> <script src='{% static "my-libs.js" %}'></script>

@ -492,6 +492,10 @@
url: url, url: url,
crossDomain: false, crossDomain: false,
beforeSend: function (xhr, settings) { beforeSend: function (xhr, settings) {
$('#progress .progress-bar').css(
'width',
'0%'
);
if (!csrfSafeMethod(settings.type)) { if (!csrfSafeMethod(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", csrftoken); xhr.setRequestHeader("X-CSRFToken", csrftoken);
} }
@ -500,7 +504,7 @@
done: function (e, data) { done: function (e, data) {
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;margin:10px;">').attr('src', file.url).appendTo("#files");
console.log(file); console.log(file);
var currentValue = $("#upload-files-pk").val(); var currentValue = $("#upload-files-pk").val();
currentValue += file.id + ';'; currentValue += file.id + ';';

@ -81,12 +81,16 @@
</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 -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i> {# <span class="btn btn-success fileinput-button">#}
<span>Выберите файлы</span> {# <i class="glyphicon glyphicon-plus"></i>#}
<!-- The file input field used as target for the file upload widget --> {# <span>Выберите файлы</span>#}
{# <!-- The file input field used as target for the file upload widget -->#}
{# <input id="fileupload" type="file" name="file" multiple>#}
{# </span>#}
<input id="fileupload" type="file" name="file" multiple> <input id="fileupload" type="file" name="file" multiple>
</span>
<br> <br>
<br> <br>
<!-- The global progress bar --> <!-- The global progress bar -->
@ -96,12 +100,9 @@
<!-- The container for the uploaded files --> <!-- The container for the uploaded files -->
<div id="files" class="files"></div> <div id="files" class="files"></div>
<br> <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>
</form> </form>
</div> </div>

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-29 09:09
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('wallets', '0002_auto_20160727_1835'),
]
operations = [
migrations.AlterField(
model_name='invoicehistory',
name='created',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]
Loading…
Cancel
Save