finance update

feature/fix_generate_pass
Andrey 8 years ago
parent 973752bd05
commit 1715657ff5
  1. 1
      access/init_group.py
  2. 19
      access/migrations/0007_auto_20171106_1808.py
  3. 4
      access/models.py
  4. 4
      access/views.py
  5. 24
      csv/load_bills.py
  6. 14
      csv/load_student_teachers_threads.py
  7. 25
      finance/migrations/0003_auto_20171106_1723.py
  8. 25
      finance/migrations/0004_auto_20171106_1723.py
  9. 4
      finance/models.py
  10. 112
      journals/default_threads.py
  11. 19
      journals/migrations/0008_remove_journal_children.py
  12. 6
      journals/models.py
  13. 2
      journals/serilizers.py

@ -8,6 +8,7 @@ django.setup()
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
if __name__ == '__main__': if __name__ == '__main__':
Group.objects.get_or_create(name='admin')
Group.objects.get_or_create(name='students') Group.objects.get_or_create(name='students')
Group.objects.get_or_create(name='teachers') Group.objects.get_or_create(name='teachers')
Group.objects.get_or_create(name='managers') Group.objects.get_or_create(name='managers')

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-11-06 18:08
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('access', '0006_auto_20171019_1243'),
]
operations = [
migrations.AlterModelOptions(
name='user',
options={'verbose_name': 'Пользователь', 'verbose_name_plural': 'Пользователи'},
),
]

@ -160,8 +160,8 @@ class User(AbstractBaseUser, PermissionsMixin):
return self.first_name return self.first_name
class Meta: class Meta:
verbose_name = _('user') verbose_name = _('Пользователь')
verbose_name_plural = _('users') verbose_name_plural = _('Пользователи')
class Progress(models.Model): class Progress(models.Model):

@ -62,8 +62,8 @@ class FindUserView(APIView):
res = res[:(count if len(res) > count else len(res))] res = res[:(count if len(res) > count else len(res))]
return Response([ return Response(
UserSearchSerializer(i).data for i in res], [UserSearchSerializer(i).data for i in res],
status=self.status_code status=self.status_code
) )

@ -21,8 +21,28 @@ if __name__ == '__main__':
opener_id = row.pop('opener__id', None) opener_id = row.pop('opener__id', None)
bill_kwarg['opener'] = get_user_model().objects.get(id=opener_id) if opener_id \ bill_kwarg['opener'] = get_user_model().objects.get(id=opener_id) if opener_id \
else get_user_model().objects.get(email="kate.gazukina@skillbox.ru") else get_user_model().objects.get(email="kate.gazukina@skillbox.ru")
bill_kwarg['user'] = get_user_model().objects.get(email=row.pop('user__email', None))
email = row.pop('user__email', None)
try:
email = email[:email.index("\n")]
except ValueError:
pass
try:
bill_kwarg['user'] = get_user_model().objects.get(email=email.lower())
except get_user_model().DoesNotExist:
print([email, bill_kwarg['id']])
bill_kwarg['comment'] = row.pop('comment', None) bill_kwarg['comment'] = row.pop('comment', None)
bill_kwarg['description'] = row.pop('description', None) bill_kwarg['description'] = row.pop('description', None)
bill = Bill.objects.create(**bill_kwarg) bill = Bill.objects.create(**bill_kwarg)
Invoice.objects.create(bill=bill, **row) try:
price = int(row.pop('price', None))
except ValueError:
price = None
try:
real_price = int(row.pop('real_price', None))
except ValueError:
real_price = None
Invoice.objects.create(bill=bill, price=price, real_price=real_price, **row)

@ -0,0 +1,14 @@
import os, sys, django, csv
sys.path.append("../")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from library.models import Tags, ArticleSection, Article
if __name__ == '__main__':
with open('./management/comment.csv') as comment_csv:
comment_reader = csv.DictReader(comment_csv)
for row in comment_reader:
if row['type'] == 'task':
print(row)

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-11-06 17:23
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('finance', '0002_auto_20171023_1037'),
]
operations = [
migrations.AlterField(
model_name='invoice',
name='price',
field=models.IntegerField(blank=True, max_length=255, null=True, verbose_name='Сумма'),
),
migrations.AlterField(
model_name='invoice',
name='real_price',
field=models.IntegerField(blank=True, help_text='Сумма, минус комиссия', max_length=255, null=True, verbose_name='Полученная сумма'),
),
]

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-11-06 17:23
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('finance', '0003_auto_20171106_1723'),
]
operations = [
migrations.AlterField(
model_name='invoice',
name='price',
field=models.IntegerField(blank=True, null=True, verbose_name='Сумма'),
),
migrations.AlterField(
model_name='invoice',
name='real_price',
field=models.IntegerField(blank=True, help_text='Сумма, минус комиссия', null=True, verbose_name='Полученная сумма'),
),
]

@ -39,8 +39,8 @@ class Invoice(models.Model):
('H', 'Сгорел') ('H', 'Сгорел')
) )
status = models.CharField(verbose_name='Статус', max_length=1, default='W', choices=BILL_STATUSES) status = models.CharField(verbose_name='Статус', max_length=1, default='W', choices=BILL_STATUSES)
price = models.CharField(verbose_name='Сумма', max_length=255, null=True, blank=True) price = models.IntegerField(verbose_name='Сумма', null=True, blank=True)
real_price = models.CharField(verbose_name='Полученная сумма', max_length=255, null=True, blank=True, real_price = models.IntegerField(verbose_name='Полученная сумма', null=True, blank=True,
help_text='Сумма, минус комиссия') help_text='Сумма, минус комиссия')
bill_method = models.CharField(verbose_name='Способ оплаты', max_length=2, default='Y', choices=BILL_METHOD) bill_method = models.CharField(verbose_name='Способ оплаты', max_length=2, default='Y', choices=BILL_METHOD)
key = models.CharField(verbose_name='Ключ платежа', blank=True, max_length=255, default='', editable=False) key = models.CharField(verbose_name='Ключ платежа', blank=True, max_length=255, default='', editable=False)

@ -6,74 +6,72 @@ django.setup()
from journals.models import Thread from journals.models import Thread
from django.contrib.auth import get_user_model from django.contrib.auth.models import Group
from lms.global_decorators import transaction_decorator from lms.global_decorators import transaction_decorator
@transaction_decorator @transaction_decorator
def main_threads(): def main_threads():
Thread.objects.all().delete()
admin_thread, _is_create = Thread.objects.get_or_create( admin_thread = Thread.objects.create(
key='Admin', key='Admin',
text='Тред для админов, сюда падают все журналируемые сообщения в системе', text='Тред для админов, сюда падают все журналируемые сообщения в системе',
is_staff=True, is_staff=True,
is_recurse=True,
) )
for i in get_user_model().objects.filter(is_superuser=True): admin_thread.groups.add(Group.objects.get(name='admin'))
admin_thread.subscribers.add(i)
management_thread = Thread.objects.create(
# management_thread, _is_create = Thread.objects.get_or_create( key='Project_management',
# key='Project_management', text='Тред для проджект-менеджеров, сюда падает статистика разного рода',
# text='Тред для проджект-менеджеров, сюда падает статистика разного рода', is_staff=True,
# is_staff=True, is_recurse=True,
# ) )
#
# management_thread.parent.add(admin_thread) management_thread.groups.add(Group.objects.get(name='project_managers'))
# management_thread.parent.add(admin_thread)
# support_thread, _is_create = Thread.objects.get_or_create(
# key='Support', support_thread = Thread.objects.create(
# text='Тред сапортов, занимаются поддержкой клиента', key='Support',
# is_staff=True, text='Тред сапортов, занимаются поддержкой клиента',
# ) is_staff=True,
# is_recurse=True,
# for i in get_user_model().objects.filter(email__in=support_list): )
# support_thread.subscribers.add(i)
# support_thread.groups.add(Group.objects.get(name='supports'))
# support_thread.parent.add(admin_thread) support_thread.parent.add(admin_thread)
#
# res['library_thread'], _is_create = Thread.objects.get_or_create( lead_managers = Thread.objects.create(
# key='Library', key='Sale_lead',
# text='Тред <<Библиотека>> сюда прилетает вся инфа по статьям', text='Тред лидов, сейлзов',
# is_staff=True, is_staff=True,
# ) is_recurse=True,
# )
# res['library_thread'].parent.add(management_thread)
# lead_managers.groups.add(Group.objects.get(name='lead_managers'))
# course_thread, _is_create = Thread.objects.get_or_create( lead_managers.parent.add(admin_thread)
# key='Course_thread',
# text='Тред курсов', managers = Thread.objects.create(
# is_staff=True, key='Sale',
# ) text='Тред сейлзов',
# is_staff=True,
# course_thread.parent.add(management_thread) is_recurse=True,
# )
# start_and_end_thread, _is_create = Thread.objects.get_or_create(
# key='Start_and_end', managers.groups.add(Group.objects.get(name='managers'))
# text='Тред начала и завершения прохождения какого-либо этапа обучения', managers.parent.add(lead_managers)
# is_staff=True,
# ) st_tch = Thread.objects.create(
# key='Student_teacher',
# start_and_end_thread.parent.add(course_thread) text='Тред студентов и учителей',
# is_staff=True,
# res['task_thread'], _is_create = Thread.objects.get_or_create( is_recurse=True,
# key='Tasks', )
# text='Сюда пободают все переписки студентов и преподов',
# is_staff=True, st_tch.parent.add(support_thread)
# ) st_tch.parent.add(management_thread)
#
# res['task_thread'].parent.add(support_thread)
#
# return res
if __name__ == '__main__': if __name__ == '__main__':

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-11-06 18:13
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('journals', '0007_journal_files'),
]
operations = [
migrations.RemoveField(
model_name='journal',
name='children',
),
]

@ -9,6 +9,7 @@ from django.db import models
from courses.models import Achievements, Course, CourseMap, Diploma from courses.models import Achievements, Course, CourseMap, Diploma
from finance.models import Bill from finance.models import Bill
from storage.models import Storage
ACTION_CHOICES = ( ACTION_CHOICES = (
(0, 'try'), (0, 'try'),
@ -27,7 +28,6 @@ ACTION_CHOICES = (
) )
# Новое API
class Journal(models.Model): class Journal(models.Model):
thread = models.ForeignKey(to='Thread', verbose_name='Тред') thread = models.ForeignKey(to='Thread', verbose_name='Тред')
user = models.ForeignKey( user = models.ForeignKey(
@ -39,7 +39,7 @@ class Journal(models.Model):
content_object = GenericForeignKey('content_type', 'object_id') content_object = GenericForeignKey('content_type', 'object_id')
action_type = models.SmallIntegerField(choices=ACTION_CHOICES) action_type = models.SmallIntegerField(choices=ACTION_CHOICES)
date = models.DateTimeField(auto_now=True) date = models.DateTimeField(auto_now=True)
children = models.ManyToManyField(to='self', blank=True, symmetrical=False) files = models.ManyToManyField(to=Storage, blank=True)
def __str__(self): def __str__(self):
return '%d Пользователь %s %s %s' % (self.id, self.user.email, self.get_action_type_display(), self.thread.key) return '%d Пользователь %s %s %s' % (self.id, self.user.email, self.get_action_type_display(), self.thread.key)
@ -47,7 +47,7 @@ class Journal(models.Model):
class Thread(models.Model): class Thread(models.Model):
key = models.CharField(max_length=200) key = models.CharField(max_length=200)
text = models.TextField(default='', verbose_name=u'Описание треда') text = models.TextField(default='', verbose_name='Описание треда')
is_staff = models.BooleanField(default=False, verbose_name='Админская ли табличка') is_staff = models.BooleanField(default=False, verbose_name='Админская ли табличка')
is_recurse = models.BooleanField(default=False, verbose_name='Поле аптимизации поиска') is_recurse = models.BooleanField(default=False, verbose_name='Поле аптимизации поиска')
subscribers = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Подписчики', blank=True) subscribers = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Подписчики', blank=True)

@ -14,7 +14,7 @@ class ThreadSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Thread model = Thread
exclude = ('is_staff', 'recurse_step') exclude = ('is_staff', )
class ThreadAdminSerializer(ThreadSerializer): class ThreadAdminSerializer(ThreadSerializer):

Loading…
Cancel
Save