remotes/origin/mitri4
spacenergy 10 years ago
parent d67ee6aa8e
commit 6a132cde5b
  1. 8
      accounts/admin.py
  2. 17
      accounts/forms.py
  3. 19
      accounts/migrations/0005_profile_sale.py
  4. 1
      accounts/models.py
  5. 16
      accounts/views.py
  6. 5
      batiskaf/templates/jinja2/accounts/index.jinja
  7. 2
      batiskaf/templates/jinja2/index.jinja
  8. 2
      batiskaf/templates/jinja2/mail/registration.jinja
  9. 1
      batiskaf/templates/jinja2/order_ok.jinja
  10. 19
      store/migrations/0048_auto_20160302_0839.py
  11. 20
      store/models.py
  12. 22
      store/views.py

@ -32,7 +32,9 @@ class ProfileCreationForm(forms.ModelForm):
class ProfileChangeForm(forms.ModelForm): class ProfileChangeForm(forms.ModelForm):
password = ReadOnlyPasswordHashField() password = ReadOnlyPasswordHashField(
label= ("Password"),
help_text= ("<a href=\"password/\">ИЗМЕНИТЬ ПАРОЛЬ</a>"))
class Meta: class Meta:
model = Profile model = Profile
@ -46,11 +48,11 @@ class ProfileAdmin(UserAdmin):
form = ProfileChangeForm form = ProfileChangeForm
add_form = ProfileCreationForm add_form = ProfileCreationForm
list_display = ('phone', 'first_name', 'last_name', 'email', 'is_superuser', 'date_joined') list_display = ('phone', 'first_name', 'last_name', 'email','sale','date_joined')
list_filter = ('is_superuser',) list_filter = ('is_superuser',)
fieldsets = ( fieldsets = (
(None, {'fields': ( (None, {'fields': (
'phone', 'email', 'password', 'first_name', 'last_name' 'phone', 'email', 'password', 'first_name', 'last_name', 'sale'
)}), )}),
('Инфо', {'fields': ('date_joined',)}), ('Инфо', {'fields': ('date_joined',)}),
('Доступ', {'fields': ('is_superuser', 'is_active')}), ('Доступ', {'fields': ('is_superuser', 'is_active')}),

@ -2,22 +2,33 @@ from django import forms
from accounts.models import Profile from accounts.models import Profile
from random import randint from random import randint
from accounts.utils import normalize_phone from accounts.utils import normalize_phone
from django.contrib.auth import authenticate
class LoginForm(forms.Form): class LoginForm(forms.Form):
phone = forms.CharField(label='Номер мобильного телефона', max_length=45, required=True) phone = forms.CharField(label='Номер мобильного телефона', max_length=45, required=True)
password = forms.CharField(label='Пароль', widget=forms.PasswordInput, max_length=45, required=True)
def clean_phone(self): def clean_phone(self):
data = normalize_phone(self.cleaned_data['phone']) data = normalize_phone(self.cleaned_data['phone'])
try: try:
profile = Profile.objects.get(phone=data) profile = Profile.objects.get(phone=data)
profile.temp_password = randint(1000000, 9999999)
self.temp_password = profile.temp_password
profile.save()
except Profile.DoesNotExist: except Profile.DoesNotExist:
raise forms.ValidationError("Вы еще не совершали покупки в нашем магазине") raise forms.ValidationError("Вы еще не совершали покупки в нашем магазине")
return data return data
def clean(self):
phone = normalize_phone(self.cleaned_data['phone'])
password = self.cleaned_data['password']
try:
profile = Profile.objects.get(phone=phone)
user = authenticate(username=profile.phone, password=password)
if not user:
raise forms.ValidationError("Такой комбинации номер телефона/пароль не существует")
except Profile.DoesNotExist:
raise forms.ValidationError("Вы еще не совершали покупки в нашем магазине")
return self.cleaned_data
class LoginSmsForm(forms.Form): class LoginSmsForm(forms.Form):
sms = forms.IntegerField(label='Одноразовый пароль', required=True) sms = forms.IntegerField(label='Одноразовый пароль', required=True)

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('accounts', '0004_auto_20160229_1409'),
]
operations = [
migrations.AddField(
model_name='profile',
name='sale',
field=models.IntegerField(verbose_name='Индивидуальная скидка %', default=0),
),
]

@ -37,6 +37,7 @@ class Profile(AbstractBaseUser):
is_superuser = models.BooleanField('Админ', default=False) is_superuser = models.BooleanField('Админ', default=False)
is_active = models.BooleanField('Активный', default=True, db_index=True) is_active = models.BooleanField('Активный', default=True, db_index=True)
temp_password = models.IntegerField('Одноразовый пароль', default=None, blank=True, null=True) temp_password = models.IntegerField('Одноразовый пароль', default=None, blank=True, null=True)
sale = models.IntegerField('Индивидуальная скидка (Beuchat и Scorpena) %', default=0, blank=False, null=False)
USERNAME_FIELD = 'phone' USERNAME_FIELD = 'phone'
REQUIRED_FIELDS = ['email'] REQUIRED_FIELDS = ['email']

@ -18,15 +18,13 @@ class LoginView(FormView):
def login_view(request): def login_view(request):
form = LoginForm(request.POST or None) form = LoginForm(request.POST or None)
if form.is_valid(): if form.is_valid():
phone = form.cleaned_data['phone'] phone = normalize_phone(form.cleaned_data['phone'])
params = dict( password = form.cleaned_data['password']
login='Jango.kz', profile = Profile.objects.get(phone=phone)
psw='AcEMXtLGz042Fc1ZJUSl', user = authenticate(username=profile.phone, password=password)
phones='7{}'.format(phone), if user.is_active:
mes='Batiskaf.kz odnorazoviy parol: {}'.format(form.temp_password) login(request, user)
) return redirect('/account/')
requests.get('http://smsc.ru/sys/send.php', params=params)
return redirect('/account/login/sms/?phone=' + phone)
c = dict(form=form) c = dict(form=form)
return render(request, 'accounts/login.jinja', c) return render(request, 'accounts/login.jinja', c)

@ -9,6 +9,11 @@
<li class="active"><span>Личный кабинет</span></li> <li class="active"><span>Личный кабинет</span></li>
</ol> </ol>
</div> </div>
{% if request.user.sale %}
<div class="text-right">
<span class="label label-success">Индивидуальная скидка: {{request.user.sale}}%</span>
</div>
{% endif %}
<h2>Ваши заказы, {{ request.user.first_name }}:</h2> <h2>Ваши заказы, {{ request.user.first_name }}:</h2>
<br/> <br/>
<div class="row"> <div class="row">

@ -47,7 +47,7 @@
</a> </a>
</div> </div>
<div class="price"> <div class="price">
{{ product.min_price() }} ₸ {{ product.min_price(request.user) }} ₸
</div> </div>
{% if product.in_stock() %} {% if product.in_stock() %}
<div class="state-yes"> <div class="state-yes">

@ -4,7 +4,7 @@
Для того, чтобы его было удобнее отслеживать, мы создали для вас аккаунт в нашем интернет-магазине. Для того, чтобы его было удобнее отслеживать, мы создали для вас аккаунт в нашем интернет-магазине.
Вы можете войти в него, используя свой номер телефона +7{{ user.phone }}: Вы можете войти в него, используя свой номер телефона +7{{ user.phone }}. Пароль был отправлен в SMS-сообщении на указанный Вами номер телефона:
http://batiskaf-kz.kz/account/ http://batiskaf-kz.kz/account/
{% endblock %} {% endblock %}

@ -7,6 +7,7 @@
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4>Спасибо!</h4> <h4>Спасибо!</h4>
<p>Ваш заказ успешно принят и поступит в обработку сразу после оплаты.</p> <p>Ваш заказ успешно принят и поступит в обработку сразу после оплаты.</p>
<p>Пароль для доступа в Личный Кабинет был отправлен в виде СМС на указанный Вами номер телефона.</p>
{# <p><a class="btn btn-success" target="_blank" href="/order/{{ order.pk }}/print/">Распечатать квитанцию для#} {# <p><a class="btn btn-success" target="_blank" href="/order/{{ order.pk }}/print/">Распечатать квитанцию для#}
{# оплаты</a></p>#} {# оплаты</a></p>#}
</div> </div>

File diff suppressed because one or more lines are too long

@ -205,8 +205,8 @@ class Product(models.Model):
min_v = v min_v = v
return min_v return min_v
def min_price(self): def min_price(self, profile=None):
return self.min_price_variation().get_price() return self.min_price_variation().get_price(profile)
def is_discount(self): def is_discount(self):
return self.variations.filter(discount__gt=0).count() > 0 return self.variations.filter(discount__gt=0).count() > 0
@ -258,14 +258,18 @@ class ProductVariation(models.Model):
def __str__(self): def __str__(self):
return self.variation return self.variation
def get_price(self): def get_price(self, profile=None):
if self.discount: if profile and self.product.brand.slug in ['beuchat', 'scorpena']:
return int(self.price - (self.price / 100 * self.discount)) return int(self.price - (self.price / Decimal(100) * Decimal(profile.sale)))
else: else:
if self.price > 10000: print(profile)
return int(self.price * Decimal('.95')) if self.discount:
return int(self.price - (self.price / 100 * self.discount))
else: else:
return int(self.price * Decimal('.93')) if self.price > 10000:
return int(self.price * Decimal('.95'))
else:
return int(self.price * Decimal('.93'))
class AttributesInProduct(models.Model): class AttributesInProduct(models.Model):

@ -290,24 +290,38 @@ class CartDetailView(TemplateView):
order.amount = int(amount) + cart.total order.amount = int(amount) + cart.total
order.kazpost_city = int(request.POST['kazpost_city']) order.kazpost_city = int(request.POST['kazpost_city'])
order.address = request.POST['kazpost_address'] order.address = request.POST['kazpost_address']
profile = None profile = None
try: try:
profile = Profile.objects.get(phone=normalize_phone(order.phone)) profile = Profile.objects.get(phone=normalize_phone(order.phone))
profile.set_password(settings.PROFILE_TEMP_PASSWORD) #profile.set_password(settings.PROFILE_TEMP_PASSWORD)
profile.save() #profile.save()
send_email(profile, template='mail/order.jinja') send_email(profile, template='mail/order.jinja')
except: except:
from random import randint
import requests
password = randint(10000000, 99999999)
profile = Profile.objects.create( profile = Profile.objects.create(
phone=normalize_phone(order.phone), phone=normalize_phone(order.phone),
email=order.email, email=order.email,
first_name=order.first_name, first_name=order.first_name,
last_name=order.last_name, last_name=order.last_name,
) )
profile.set_password(settings.PROFILE_TEMP_PASSWORD) profile.set_password(password)
profile.save() profile.save()
phone = normalize_phone(order.phone)
params = dict(
login='Jango.kz',
psw='AcEMXtLGz042Fc1ZJUSl',
phones='7{}'.format(phone),
mes='Batiskaf.kz - Vash parol: {}'.format(password)
)
requests.get('http://smsc.ru/sys/send.php', params=params)
send_email(profile, template='mail/registration.jinja') send_email(profile, template='mail/registration.jinja')
user = authenticate(username=profile.phone, password=settings.PROFILE_TEMP_PASSWORD) user = authenticate(username=profile.phone, password=password)
if user.is_active: if user.is_active:
login(request, user) login(request, user)

Loading…
Cancel
Save