Compare commits
28 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
9c3df89cb6 | 7 years ago |
|
|
20f706acaa | 7 years ago |
|
|
a19a96eac6 | 7 years ago |
|
|
af65dbc7ba | 7 years ago |
|
|
ce305afae2 | 7 years ago |
|
|
7321a632f1 | 7 years ago |
|
|
08e9ca1762 | 7 years ago |
|
|
7904795a30 | 7 years ago |
|
|
b073155efc | 7 years ago |
|
|
cbedba8c3f | 7 years ago |
|
|
d22034f02e | 7 years ago |
|
|
289eecb57e | 7 years ago |
|
|
a117ba8bea | 7 years ago |
|
|
19f9cc95e9 | 7 years ago |
|
|
75106ef662 | 7 years ago |
|
|
788ee4f88b | 7 years ago |
|
|
a0b1a36fc1 | 7 years ago |
|
|
06d39b615b | 7 years ago |
|
|
7cd4a3fbce | 7 years ago |
|
|
1a9e008ed0 | 7 years ago |
|
|
c56134f01e | 7 years ago |
|
|
37a855ad88 | 7 years ago |
|
|
1d192b8075 | 7 years ago |
|
|
3624239a4b | 7 years ago |
|
|
b315ef3fe8 | 7 years ago |
|
|
de0ff868be | 7 years ago |
|
|
8d2d52ae45 | 7 years ago |
|
|
ecd92b31d5 | 7 years ago |
@ -1 +0,0 @@ |
||||
[{"model": "accounts_ext.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$100000$AAP4DpqYKrFB$mQRKz7qi/1va3Zoh2O3g9j7wYKCBaMLz5LFrbszDNLA=", "last_login": "2018-08-12T20:46:54Z", "create_at": "2018-08-12T20:46:44.961Z", "updated_at": "2018-08-12T20:47:05.733Z", "status": 25, "is_superuser": true, "username": "dimkasp", "email": "dimkasp@mail.ru", "referral_user": null, "confirmed_at": null, "groups": [], "user_permissions": []}}] |
||||
@ -0,0 +1,93 @@ |
||||
|
||||
.br-theme-css-stars .br-widget { |
||||
height: 28px; |
||||
white-space: nowrap |
||||
} |
||||
|
||||
.br-theme-css-stars .br-widget a { |
||||
text-decoration: none; |
||||
height: 18px; |
||||
width: 18px; |
||||
float: left; |
||||
font-size: 23px; |
||||
margin-right: 5px |
||||
} |
||||
|
||||
.br-theme-css-stars .br-widget a:after { |
||||
content: "\2605"; |
||||
color: #d2d2d2 |
||||
} |
||||
|
||||
.br-theme-css-stars .br-widget a.br-active:after { |
||||
color: #edb867 |
||||
} |
||||
|
||||
.br-theme-css-stars .br-widget a.br-selected:after { |
||||
color: #edb867 |
||||
} |
||||
|
||||
.br-theme-css-stars .br-widget .br-current-rating { |
||||
display: none |
||||
} |
||||
|
||||
.br-theme-css-stars .br-readonly a { |
||||
cursor: default |
||||
} |
||||
|
||||
@media print { |
||||
.br-theme-css-stars .br-widget a:after { |
||||
content: "\2606"; |
||||
color: #000 |
||||
} |
||||
|
||||
.br-theme-css-stars .br-widget a.br-active:after, .br-theme-css-stars .br-widget a.br-selected:after { |
||||
content: "\2605"; |
||||
color: #000 |
||||
} |
||||
} |
||||
|
||||
.br-theme-fontawesome-stars .br-widget { |
||||
height: 28px; |
||||
white-space: nowrap |
||||
} |
||||
|
||||
.br-theme-fontawesome-stars .br-widget a { |
||||
font: normal normal normal 20px/1 FontAwesome; |
||||
text-rendering: auto; |
||||
-webkit-font-smoothing: antialiased; |
||||
text-decoration: none; |
||||
margin-right: 2px |
||||
} |
||||
|
||||
.br-theme-fontawesome-stars .br-widget a:after { |
||||
content: '\f005'; |
||||
color: #d2d2d2 |
||||
} |
||||
|
||||
.br-theme-fontawesome-stars .br-widget a.br-active:after { |
||||
color: #edb867 |
||||
} |
||||
|
||||
.br-theme-fontawesome-stars .br-widget a.br-selected:after { |
||||
color: #edb867 |
||||
} |
||||
|
||||
.br-theme-fontawesome-stars .br-widget .br-current-rating { |
||||
display: none |
||||
} |
||||
|
||||
.br-theme-fontawesome-stars .br-readonly a { |
||||
cursor: default |
||||
} |
||||
|
||||
@media print { |
||||
.br-theme-fontawesome-stars .br-widget a:after { |
||||
content: '\f006'; |
||||
color: #000 |
||||
} |
||||
|
||||
.br-theme-fontawesome-stars .br-widget a.br-active:after, .br-theme-fontawesome-stars .br-widget a.br-selected:after { |
||||
content: '\f005'; |
||||
color: #000 |
||||
} |
||||
} |
||||
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 418 KiB After Width: | Height: | Size: 418 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 266 KiB After Width: | Height: | Size: 266 KiB |
|
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 254 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 926 B After Width: | Height: | Size: 926 B |
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 721 B |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 148 KiB |
@ -0,0 +1,16 @@ |
||||
import "./asserts/css/main.css"; |
||||
import './node_modules/jquery-ui-dist/jquery-ui.min.css'; |
||||
import "./node_modules/bootstrap/dist/css/bootstrap.min.css"; |
||||
|
||||
import './node_modules/jquery/dist/jquery.js'; |
||||
import './node_modules/jquery-ui-dist/jquery-ui.js'; |
||||
import './node_modules/magnific-popup/dist/jquery.magnific-popup.js'; |
||||
import './node_modules/jquery-bar-rating/dist/jquery.barrating.min.js'; |
||||
import './node_modules/bootstrap/dist/js/bootstrap.js'; |
||||
import './node_modules/jquery-autocomplete/jquery.autocomplete.js'; |
||||
|
||||
import "./asserts/js/ajax.js"; |
||||
import "./asserts/js/basket.tools.js"; |
||||
import "./asserts/js/common.js"; |
||||
import "./asserts/js/our_search_code.js"; |
||||
|
||||
@ -0,0 +1,29 @@ |
||||
{ |
||||
"name": "eshop", |
||||
"version": "1.0.0", |
||||
"description": "", |
||||
"main": "index.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1", |
||||
"dev": "webpack --mode=development --watch", |
||||
"build": "webpack --mode=production" |
||||
}, |
||||
"author": "FUNNYDMAN", |
||||
"license": "ISC", |
||||
"devDependencies": { |
||||
"webpack": "^4.25.1", |
||||
"webpack-cli": "^3.1.2", |
||||
"css-loader": "^1.0.1", |
||||
"extract-text-webpack-plugin": "^4.0.0-beta.0", |
||||
"file-loader": "^2.0.0", |
||||
"style-loader": "^0.23.1" |
||||
}, |
||||
"dependencies": { |
||||
"bootstrap": "3.3.7", |
||||
"jquery": "^3.3.1", |
||||
"jquery-autocomplete": "^1.2.8", |
||||
"jquery-bar-rating": "^1.2.2", |
||||
"jquery-ui-dist": "1.12.1", |
||||
"magnific-popup": "^1.1.0" |
||||
} |
||||
} |
||||
@ -0,0 +1,48 @@ |
||||
const path = require('path'); |
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin'); |
||||
const webpack = require('webpack'); |
||||
|
||||
module.exports = { |
||||
entry: './index.js', |
||||
output: { |
||||
filename: './js/build-min.js', |
||||
path: path.resolve(__dirname, 'dist') |
||||
}, |
||||
module: { |
||||
rules: [{ |
||||
test: /\.(css)$/, |
||||
use: ExtractTextPlugin.extract({ |
||||
fallback: 'style-loader', |
||||
use: ['css-loader'] |
||||
}) |
||||
}, |
||||
{ |
||||
test: /\.(png|svg|jpg|gif|jpeg)$/, |
||||
use: [ |
||||
{ |
||||
loader: 'file-loader', |
||||
options: {outputPath: 'img/'} |
||||
} |
||||
] |
||||
}, { |
||||
test: /\.(woff(2)?|ttf|eot)(\?v=\d+\.\d+\.\d+)?$/, |
||||
use: [ |
||||
{ |
||||
loader: 'file-loader', |
||||
options: { |
||||
name: '[name].[ext]', |
||||
outputPath: 'fonts/' |
||||
} |
||||
} |
||||
] |
||||
} |
||||
] |
||||
}, |
||||
plugins: [ |
||||
new ExtractTextPlugin("css/build.css"), |
||||
new webpack.ProvidePlugin({ |
||||
$: "jquery", |
||||
jQuery: "jquery" |
||||
}) |
||||
] |
||||
}; |
||||
@ -0,0 +1,11 @@ |
||||
server { |
||||
server_name name_or_ip; |
||||
listen 80; |
||||
location / { |
||||
proxy_pass http://localhost:8000; |
||||
} |
||||
|
||||
location /static/ { |
||||
root path_to_static_files; |
||||
} |
||||
} |
||||
@ -0,0 +1,20 @@ |
||||
[ |
||||
{ |
||||
"model": "accounts_ext.user", |
||||
"pk": 1, |
||||
"fields": { |
||||
"password": "pbkdf2_sha256$100000$AAP4DpqYKrFB$mQRKz7qi/1va3Zoh2O3g9j7wYKCBaMLz5LFrbszDNLA=", |
||||
"last_login": "2018-08-12T20:46:54Z", |
||||
"create_at": "2018-08-12T20:46:44.961Z", |
||||
"updated_at": "2018-08-12T20:47:05.733Z", |
||||
"status": 25, |
||||
"is_superuser": true, |
||||
"username": "dimkasp", |
||||
"email": "dimkasp@mail.ru", |
||||
"referral_user": null, |
||||
"confirmed_at": null, |
||||
"groups": [], |
||||
"user_permissions": [] |
||||
} |
||||
} |
||||
] |
||||
@ -0,0 +1,110 @@ |
||||
# Generated by Django 2.0.7 on 2018-10-25 15:27 |
||||
|
||||
from django.conf import settings |
||||
import django.contrib.auth.models |
||||
import django.core.validators |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('auth', '0009_alter_user_last_name_max_length'), |
||||
('core', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='User', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('password', models.CharField(max_length=128, verbose_name='password')), |
||||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('status', models.SmallIntegerField(choices=[(0, 'Новый'), (25, 'Активный'), (50, 'Удаленный')], default=0, verbose_name='статус')), |
||||
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), |
||||
('username', models.CharField(max_length=255, verbose_name='username')), |
||||
('email', models.EmailField(error_messages={'unique': 'A user with that email already exists.'}, max_length=254, unique=True, verbose_name='email')), |
||||
('confirmed_at', models.DateTimeField(blank=True, null=True, verbose_name='подвтержден в')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'пользователь', |
||||
'verbose_name_plural': 'пользователи', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Company', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('status', models.SmallIntegerField(choices=[(0, 'Новый'), (25, 'Активный'), (50, 'Удаленный')], default=0, verbose_name='статус')), |
||||
('company_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='компания')), |
||||
('address', models.TextField(blank=True, null=True, verbose_name='адрес')), |
||||
('inn', models.CharField(blank=True, max_length=12, null=True, verbose_name='ИНН')), |
||||
('ogrn', models.CharField(blank=True, max_length=13, null=True, verbose_name='ОГРН')), |
||||
('type', models.SmallIntegerField(blank=True, choices=[(25, 'Компания'), (50, 'Физ лицо')], default=25, null=True, verbose_name='тип')), |
||||
('city', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.City')), |
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='username')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'компания', |
||||
'verbose_name_plural': 'компании', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Profile', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('status', models.SmallIntegerField(choices=[(0, 'Новый'), (25, 'Активный'), (50, 'Удаленный')], default=0, verbose_name='статус')), |
||||
('first_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='first name')), |
||||
('last_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='last name')), |
||||
('patronymic', models.CharField(blank=True, max_length=100, null=True, verbose_name='отчество')), |
||||
('birthday', models.DateField(blank=True, null=True, verbose_name='дата рождения')), |
||||
('phone', models.CharField(blank=True, max_length=12, null=True, validators=[django.core.validators.RegexValidator(message="Phone number must be entered in the format: '+99999999999'. Up to 12 digits allowed.", regex='^\\((+7)|8)?\\d{10}$')], verbose_name='телефон')), |
||||
('address', models.TextField(verbose_name='aдрес')), |
||||
('city', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.City', verbose_name='город')), |
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='username')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'профиль', |
||||
'verbose_name_plural': 'профили', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Group', |
||||
fields=[ |
||||
], |
||||
options={ |
||||
'verbose_name': 'группа', |
||||
'verbose_name_plural': 'группы', |
||||
'proxy': True, |
||||
'indexes': [], |
||||
}, |
||||
bases=('auth.group',), |
||||
managers=[ |
||||
('objects', django.contrib.auth.models.GroupManager()), |
||||
], |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='groups', |
||||
field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='referral_user', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Реферальный пользователь'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='user_permissions', |
||||
field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), |
||||
), |
||||
] |
||||
@ -1,6 +1,5 @@ |
||||
from django.forms import forms |
||||
from django.utils.translation import ugettext_lazy as _ |
||||
|
||||
from pinax.blog.forms import AdminPostForm as BaseAdminPostForm |
||||
|
||||
from blog_ext.models import Post |
||||
@ -0,0 +1,93 @@ |
||||
# Generated by Django 2.0.7 on 2018-10-25 15:27 |
||||
|
||||
import blog_ext.models |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('blog', '0001_initial'), |
||||
('pinax_images', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='ImageSet', |
||||
fields=[ |
||||
('imageset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pinax_images.ImageSet')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Коллаж', |
||||
'verbose_name_plural': 'Коллажи', |
||||
}, |
||||
bases=('pinax_images.imageset', models.Model), |
||||
), |
||||
migrations.CreateModel( |
||||
name='Post', |
||||
fields=[ |
||||
('post_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='blog.Post')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('status', models.SmallIntegerField(choices=[(0, 'Новый'), (25, 'Активный'), (50, 'Удаленный')], default=0, verbose_name='статус')), |
||||
('preview_image', models.FileField(blank=True, null=True, upload_to=blog_ext.models.Post.upload_file_to, verbose_name='Превью изображение')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Пост', |
||||
'verbose_name_plural': 'Посты', |
||||
}, |
||||
bases=('blog.post', models.Model), |
||||
), |
||||
migrations.CreateModel( |
||||
name='ReviewComment', |
||||
fields=[ |
||||
('reviewcomment_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='blog.ReviewComment')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Комментарий', |
||||
'verbose_name_plural': 'Комментарий', |
||||
}, |
||||
bases=('blog.reviewcomment',), |
||||
), |
||||
migrations.CreateModel( |
||||
name='Revision', |
||||
fields=[ |
||||
('revision_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='blog.Revision')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Ревизия', |
||||
'verbose_name_plural': 'Ревизии', |
||||
}, |
||||
bases=('blog.revision',), |
||||
), |
||||
migrations.CreateModel( |
||||
name='Section', |
||||
fields=[ |
||||
('section_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='blog.Section')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Секция', |
||||
'verbose_name_plural': 'Секции', |
||||
}, |
||||
bases=('blog.section', models.Model), |
||||
), |
||||
migrations.CreateModel( |
||||
name='PostImageSet', |
||||
fields=[ |
||||
], |
||||
options={ |
||||
'verbose_name': 'Изображение', |
||||
'verbose_name_plural': 'Изображения', |
||||
'proxy': True, |
||||
'indexes': [], |
||||
}, |
||||
bases=('blog_ext.imageset',), |
||||
), |
||||
] |
||||
@ -1,6 +1,6 @@ |
||||
from django.urls import re_path |
||||
from . import views |
||||
|
||||
from . import views |
||||
|
||||
urlpatterns = [ |
||||
re_path(r"^$", views.BlogIndexView.as_view(), name="blog"), |
||||
@ -1,4 +1,3 @@ |
||||
from django.conf import settings |
||||
from django.core.paginator import Paginator |
||||
from django.utils.translation import ugettext_lazy as _ |
||||
|
||||
@ -1,25 +1,22 @@ |
||||
import uuid |
||||
|
||||
from crispy_forms.helper import FormHelper |
||||
from crispy_forms.layout import Layout, Field, Div, HTML, Hidden, Fieldset, Submit |
||||
from crispy_forms.layout import Layout, Field, Div, HTML, Submit |
||||
from django import forms |
||||
from django.conf import settings |
||||
from django.core.exceptions import ValidationError |
||||
from django.core.validators import MaxValueValidator, MinValueValidator |
||||
from django.forms import ALL_FIELDS, formset_factory |
||||
from django.urls import reverse_lazy |
||||
from django.utils.translation import ugettext_lazy as _ |
||||
|
||||
from cart.models import ( |
||||
Buying, BUYING_STATUS_IN_CART, Offer, SupplyType, SupplyTarget, Discount, Order |
||||
Buying, Offer, SupplyType, SupplyTarget, Discount, Order |
||||
) |
||||
from cart.tasks import send_user_order_notification, send_admin_order_notification |
||||
from contact_us.mixins import RequestNotifiable |
||||
from core.forms import QueryFormBase |
||||
from core.models import City |
||||
from core.utils import parse_path |
||||
from django.utils.translation import ugettext_lazy as _ |
||||
|
||||
from products.models import Product |
||||
|
||||
|
||||
class CartAddInlineForm(forms.ModelForm): |
||||
@ -0,0 +1,195 @@ |
||||
# Generated by Django 2.0.7 on 2018-10-25 15:27 |
||||
|
||||
import autoslug.fields |
||||
import cart.models |
||||
import datetime |
||||
from django.conf import settings |
||||
import django.core.validators |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import django.db.models.manager |
||||
from django.utils.timezone import utc |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('products', '0001_initial'), |
||||
('core', '0001_initial'), |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Buying', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('bonus_points', models.IntegerField(validators=[django.core.validators.MinValueValidator(0)], verbose_name='бонусы')), |
||||
('status', models.SmallIntegerField(choices=[(25, 'В корзине'), (50, 'Обрабатываеться'), (75, 'Оплаченно')], default=25, verbose_name='статус')), |
||||
('amount', models.SmallIntegerField(default=0, verbose_name='колличество')), |
||||
('total_price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='цена')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Покупка', |
||||
'verbose_name_plural': 'Покупки', |
||||
}, |
||||
managers=[ |
||||
('active', django.db.models.manager.Manager()), |
||||
], |
||||
), |
||||
migrations.CreateModel( |
||||
name='Cashback', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('cashback', models.DecimalField(decimal_places=2, default=0, max_digits=7, verbose_name='Сумма')), |
||||
('status', models.SmallIntegerField(choices=[(0, 'заработанный'), (100, 'потраченный')], default=0, verbose_name='статус')), |
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'cashback', |
||||
'verbose_name_plural': 'cashback', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Client', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('status', models.SmallIntegerField(choices=[(0, 'Новый'), (25, 'Активный'), (50, 'Удаленный')], default=0, verbose_name='статус')), |
||||
('name', models.CharField(max_length=255, verbose_name='Название')), |
||||
('image', models.FileField(upload_to=cart.models.Client.upload_file_to, verbose_name='Изображение')), |
||||
('preview', models.FileField(upload_to=cart.models.Client.upload_file_to, verbose_name='Миниатюрка')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Клиент', |
||||
'verbose_name_plural': 'Клиенты', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Discount', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('name', models.CharField(max_length=255, verbose_name='Имя')), |
||||
('image', models.FileField(blank=True, null=True, upload_to=cart.models.Discount.upload_file_to, verbose_name='Изображение')), |
||||
('code', models.CharField(blank=True, default='f09d1c83-a6f8-40b5-a980-c7e69f7f585c', max_length=50, unique=True, verbose_name='Код')), |
||||
('valid_from', models.DateTimeField(auto_now_add=True, verbose_name='Начало')), |
||||
('valid_to', models.DateTimeField(blank=True, default=datetime.datetime(2018, 11, 1, 15, 27, 27, 195955, tzinfo=utc), verbose_name='Конец')), |
||||
('value', models.IntegerField(default=0, help_text='Указываем целым числом. Пример: 30 = 30%', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100)], verbose_name='Процент')), |
||||
('active', models.BooleanField(default=True, verbose_name='Активная')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Дисконт', |
||||
'verbose_name_plural': 'Дисконт', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Offer', |
||||
fields=[ |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('status', models.SmallIntegerField(choices=[(0, 'Новый'), (25, 'Активный'), (50, 'Удаленный')], default=0, verbose_name='статус')), |
||||
('product', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='products.Product', verbose_name='Продукт')), |
||||
('vendor_code', models.CharField(help_text='Должен быть уникальным', max_length=255, unique=True, verbose_name='Артикул')), |
||||
('price', models.DecimalField(decimal_places=2, help_text='Цена за продукт', max_digits=10, validators=[django.core.validators.MinValueValidator(1.0)], verbose_name='цена')), |
||||
('amount', models.IntegerField(default=1, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Колличество')), |
||||
('cashback', models.DecimalField(decimal_places=2, default=0, help_text='Указаная сумма будет отображаться в выбранной валюте позиции', max_digits=6, verbose_name='Кешбек')), |
||||
('note', models.TextField(blank=True, null=True, verbose_name='Пометка')), |
||||
('account_nds', models.BooleanField(default=False, verbose_name='с учетом НДС')), |
||||
('currency', models.ForeignKey(help_text='Цена по умолчанию в рублях', on_delete=django.db.models.deletion.PROTECT, to='core.Currency', verbose_name='Валюта')), |
||||
('discount', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='cart.Discount', verbose_name='Дисконт')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Позиция', |
||||
'verbose_name_plural': 'Позиции', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Order', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('order_code', models.CharField(max_length=255, verbose_name='код заказа')), |
||||
('customer_name', models.CharField(max_length=255, verbose_name='имя')), |
||||
('customer_email', models.EmailField(blank=True, default=None, max_length=254, null=True, verbose_name='email')), |
||||
('phone', models.CharField(max_length=12, validators=[django.core.validators.RegexValidator(message="Phone number must be entered in the format: '+99999999999'. Up to 12 digits allowed.", regex='^((\\+7)|8)?\\d{10}$')], verbose_name='телефон')), |
||||
('customer_address', models.TextField(verbose_name='адрес')), |
||||
('total_price', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='стоимость')), |
||||
('comment', models.TextField(blank=True, default=None, null=True, verbose_name='комментарий')), |
||||
('status', models.SmallIntegerField(choices=[(0, 'Новый'), (50, 'Обрабатывается'), (100, 'Оплаченно')], default=0, verbose_name='статус')), |
||||
('city', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='core.City', verbose_name='Город')), |
||||
('customer_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='пользователь')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Заказ', |
||||
'verbose_name_plural': 'Заказы', |
||||
'ordering': ('-create_at',), |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='SupplyTarget', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('name', models.CharField(max_length=255, verbose_name='Назначение')), |
||||
('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True)), |
||||
('status', models.PositiveSmallIntegerField(help_text='Необходимо указать числовой код статус', verbose_name='статус')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Лицензия', |
||||
'verbose_name_plural': 'Лицензии', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='SupplyType', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('create_at', models.DateTimeField(auto_now_add=True, verbose_name='создан в')), |
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='обновлен')), |
||||
('name', models.CharField(max_length=255, verbose_name='Тип')), |
||||
('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True)), |
||||
('min_term', models.IntegerField(help_text='Минимальный срок поставки', verbose_name='от')), |
||||
('max_term', models.IntegerField(help_text='Максимальный срок поставки', verbose_name='до')), |
||||
('term_dimension', models.SmallIntegerField(choices=[(0, 'Час'), (0, 'День'), (0, 'Неделя'), (0, 'Месяц')], default=0, verbose_name='размерность')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Тип поставки', |
||||
'verbose_name_plural': 'Тип поставки', |
||||
}, |
||||
), |
||||
migrations.AddField( |
||||
model_name='offer', |
||||
name='supply_target', |
||||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='cart.SupplyTarget', verbose_name='Лицензия'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='offer', |
||||
name='supply_type', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='cart.SupplyType', verbose_name='Поставка'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='buying', |
||||
name='offer', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cart.Offer', verbose_name='позиция'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='buying', |
||||
name='order', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cart.Order', verbose_name='пользователь'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='buying', |
||||
name='user', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='пользователь'), |
||||
), |
||||
] |
||||
@ -0,0 +1,25 @@ |
||||
# Generated by Django 2.0.7 on 2018-10-27 16:53 |
||||
|
||||
import datetime |
||||
from django.db import migrations, models |
||||
from django.utils.timezone import utc |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('cart', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='discount', |
||||
name='code', |
||||
field=models.CharField(blank=True, default='866872fd-bf5a-48bc-8e22-c3581eb7a307', max_length=50, unique=True, verbose_name='Код'), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='discount', |
||||
name='valid_to', |
||||
field=models.DateTimeField(blank=True, default=datetime.datetime(2018, 11, 3, 16, 53, 38, 906817, tzinfo=utc), verbose_name='Конец'), |
||||
), |
||||
] |
||||