#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'^specializations/', include('specializations.urls')),
url(r'^users/', include('users.urls')),
url(r'^common/', include('common.urls')),
url(r'^users/', include('registration.backends.default.urls')),
url(r'^admin/', admin.site.urls),

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

@ -1,7 +1,7 @@
from django.contrib import admin
from mptt.admin import MPTTModelAdmin
from .models import Location, MainPage, Settings
from .models import Location, MainPage, Settings, PrintOrder, PrintDocuments
class LocationAdmin(MPTTModelAdmin):
readonly_fields = ('pk', 'lft', 'rght', 'tree_id', 'level')
@ -9,3 +9,5 @@ class LocationAdmin(MPTTModelAdmin):
admin.site.register(Location, LocationAdmin)
admin.site.register(MainPage)
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.utils import timezone
from mptt.models import TreeForeignKey, MPTTModel
@ -36,6 +37,9 @@ class MainPage(models.Model):
class Settings(models.Model):
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):
return 'Настройки сайта'
@ -43,3 +47,35 @@ class Settings(models.Model):
class Meta:
verbose_name = 'Настройки сайта'
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-process.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="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='{% static "my-libs.js" %}'></script>

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

@ -81,12 +81,16 @@
</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 -->
{# <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>#}
<input id="fileupload" type="file" name="file" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
@ -96,12 +100,9 @@
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить портфолио">
</div>
</div>
</form>
</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