@@ -1,5 +1,7 @@ |
||
1 | 1 |
# -*- coding: utf-8 -*- |
2 | 2 |
|
3 |
+import json |
|
4 |
+ |
|
3 | 5 |
from django.conf import settings |
4 | 6 |
from django.db import transaction |
5 | 7 |
from django_logit import logit |
@@ -8,14 +10,16 @@ from django_response import response |
||
8 | 10 |
from account.models import UserInfo |
9 | 11 |
from coupon.models import CouponInfo, UserCouponInfo |
10 | 12 |
from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo |
11 |
-from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo |
|
13 |
+from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo, AdministratorInfo |
|
14 |
+from staff.models import StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteConsumerSubmitLogInfo |
|
12 | 15 |
from member.models import RightInfo |
13 | 16 |
from statistic.models import (ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo, |
14 | 17 |
DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo, |
15 | 18 |
SaleclerkSaleStatisticInfo, SaleStatisticInfo) |
19 |
+from utils.error.errno_utils import AdministratorStatusCode |
|
16 | 20 |
|
17 | 21 |
|
18 |
-def exec_del_clerk_sale_submit(pk): |
|
22 |
+def exec_del_clerk_sale_submit(pk, admin_id): |
|
19 | 23 |
try: |
20 | 24 |
ssli = SaleclerkSubmitLogInfo.objects.select_for_update().get(pk=pk) |
21 | 25 |
except SaleclerkSubmitLogInfo.DoesNotExist: |
@@ -66,6 +70,15 @@ def exec_del_clerk_sale_submit(pk): |
||
66 | 70 |
clerk.integral -= integral |
67 | 71 |
clerk.total_integral -= integral |
68 | 72 |
clerk.save() |
73 |
+ |
|
74 |
+ #记录删除日志 |
|
75 |
+ StaffDeleteClerkSaleSubmitLogInfo.objects.create( |
|
76 |
+ admin_id=admin_id, |
|
77 |
+ log_pk=pk, |
|
78 |
+ model_name=model.model_name, |
|
79 |
+ code=model.code |
|
80 |
+ ) |
|
81 |
+ |
|
69 | 82 |
# 日销量统计 |
70 | 83 |
ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create( |
71 | 84 |
brand_id=brand.brand_id, |
@@ -214,14 +227,33 @@ def exec_del_clerk_sale_submit(pk): |
||
214 | 227 |
@transaction.atomic |
215 | 228 |
def del_clerk_sale_submit_api(request): |
216 | 229 |
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) |
230 |
+ admin_id = request.POST.get('admin_id', '') |
|
217 | 231 |
pk = int(request.POST.get('pk', '')) |
218 | 232 |
|
219 |
- exec_del_clerk_sale_submit(pk) |
|
233 |
+ if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists(): |
|
234 |
+ return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND) |
|
235 |
+ |
|
236 |
+ exec_del_clerk_sale_submit(pk, admin_id) |
|
220 | 237 |
|
221 | 238 |
return response(200, 'Del Success', u'删除成功') |
222 | 239 |
|
240 |
+@logit |
|
241 |
+@transaction.atomic |
|
242 |
+def batch_del_clerk_sale_submit_api(request): |
|
243 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) |
|
244 |
+ admin_id = request.POST.get('admin_id', '') |
|
245 |
+ pk = json.loads(request.POST.get('pks', [])) |
|
246 |
+ |
|
247 |
+ if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists(): |
|
248 |
+ return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND) |
|
223 | 249 |
|
224 |
-def exec_del_consumer_submit(pk): |
|
250 |
+ for pk in pks: |
|
251 |
+ exec_del_clerk_sale_submit(pk, admin_id) |
|
252 |
+ |
|
253 |
+ return response(200, 'Del Success', u'删除成功') |
|
254 |
+ |
|
255 |
+ |
|
256 |
+def exec_del_consumer_submit(pk, admin_id): |
|
225 | 257 |
try: |
226 | 258 |
ssli = ConsumeInfoSubmitLogInfo.objects.select_for_update().get(pk=pk) |
227 | 259 |
except ConsumeInfoSubmitLogInfo.DoesNotExist: |
@@ -254,6 +286,14 @@ def exec_del_consumer_submit(pk): |
||
254 | 286 |
user = UserInfo.objects.select_for_update().get(user_id=ssli.user_id) |
255 | 287 |
except UserInfo.DoesNotExist: |
256 | 288 |
return response() |
289 |
+ |
|
290 |
+ #记录删除日志 |
|
291 |
+ StaffDeleteConsumerSubmitLogInfo.objects.create( |
|
292 |
+ admin_id=admin_id, |
|
293 |
+ log_pk=pk, |
|
294 |
+ model_name=model.model_name, |
|
295 |
+ code=model.code |
|
296 |
+ ) |
|
257 | 297 |
|
258 | 298 |
# 消除用户劵 |
259 | 299 |
if user.shots_num <= 5: |
@@ -437,8 +477,28 @@ def exec_del_consumer_submit(pk): |
||
437 | 477 |
@transaction.atomic |
438 | 478 |
def del_consumer_submit_api(request): |
439 | 479 |
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) |
480 |
+ admin_id = request.POST.get('admin_id', '') |
|
440 | 481 |
pk = int(request.POST.get('pk', '')) |
441 | 482 |
|
442 |
- exec_del_consumer_submit(pk) |
|
483 |
+ if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists(): |
|
484 |
+ return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND) |
|
485 |
+ |
|
486 |
+ exec_del_consumer_submit(pk, admin_id) |
|
443 | 487 |
|
444 | 488 |
return response(200, 'Del Success', u'删除成功') |
489 |
+ |
|
490 |
+ |
|
491 |
+@logit |
|
492 |
+@transaction.atomic |
|
493 |
+def batch_del_consumer_submit_api(request): |
|
494 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) |
|
495 |
+ admin_id = request.POST.get('admin_id', '') |
|
496 |
+ pk = json.loads(request.POST.get('pks', [])) |
|
497 |
+ |
|
498 |
+ if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists(): |
|
499 |
+ return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND) |
|
500 |
+ |
|
501 |
+ for pk in pks: |
|
502 |
+ exec_del_consumer_submit(pk, admin_id) |
|
503 |
+ |
|
504 |
+ return response(200, 'Del Success', u'删除成功') |
@@ -2,11 +2,16 @@ |
||
2 | 2 |
|
3 | 3 |
from django.contrib import admin |
4 | 4 |
|
5 |
-from staff.models import StaffDeleteClerkSaleSubmitLogInfo |
|
5 |
+from staff.models import StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteConsumerSubmitLogInfo |
|
6 | 6 |
|
7 | 7 |
|
8 | 8 |
class StaffDeleteClerkSaleSubmitLogInfoAdmin(admin.ModelAdmin): |
9 |
- list_display = ('username', 'code', 'status', 'created_at', 'updated_at') |
|
9 |
+ list_display = ('admin_id', 'log_pk', 'model_name', 'code', 'status', 'created_at', 'updated_at') |
|
10 |
+ |
|
11 |
+class StaffDeleteConsumerSubmitLogInfoAdmin(admin.ModelAdmin): |
|
12 |
+ list_display = ('admin_id', 'log_pk', 'model_name', 'code', 'status', 'created_at', 'updated_at') |
|
10 | 13 |
|
11 | 14 |
|
12 | 15 |
admin.site.register(StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteClerkSaleSubmitLogInfoAdmin) |
16 |
+admin.site.register(StaffDeleteConsumerSubmitLogInfo, StaffDeleteConsumerSubmitLogInfoAdmin) |
|
17 |
+ |
@@ -0,0 +1,51 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 1.11.26 on 2020-12-25 06:00 |
|
3 |
+from __future__ import unicode_literals |
|
4 |
+ |
|
5 |
+from django.db import migrations, models |
|
6 |
+ |
|
7 |
+ |
|
8 |
+class Migration(migrations.Migration): |
|
9 |
+ |
|
10 |
+ dependencies = [ |
|
11 |
+ ('staff', '0002_auto_20201130_0131'), |
|
12 |
+ ] |
|
13 |
+ |
|
14 |
+ operations = [ |
|
15 |
+ migrations.CreateModel( |
|
16 |
+ name='StaffDeleteConsumerSubmitLogInfo', |
|
17 |
+ fields=[ |
|
18 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|
19 |
+ ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')), |
|
20 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')), |
|
21 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')), |
|
22 |
+ ('admin_id', models.CharField(blank=True, db_index=True, help_text='\u7ba1\u7406\u5458ID', max_length=32, null=True, verbose_name='admin_id')), |
|
23 |
+ ('log_pk', models.CharField(blank=True, db_index=True, help_text='\u6d88\u8d39\u8005\u63d0\u4ea4\u8bb0\u5f55\u5173\u8054pk', max_length=32, null=True, verbose_name='log_pk')), |
|
24 |
+ ('model_name', models.CharField(blank=True, db_index=True, help_text='\u578b\u53f7', max_length=32, null=True, verbose_name='model_name')), |
|
25 |
+ ('code', models.CharField(blank=True, db_index=True, help_text='\u673a\u8eab\u7801', max_length=32, null=True, verbose_name='code')), |
|
26 |
+ ], |
|
27 |
+ options={ |
|
28 |
+ 'verbose_name': 'StaffDeleteConsumerSubmitLogInfo', |
|
29 |
+ 'verbose_name_plural': 'StaffDeleteConsumerSubmitLogInfo', |
|
30 |
+ }, |
|
31 |
+ ), |
|
32 |
+ migrations.RemoveField( |
|
33 |
+ model_name='staffdeleteclerksalesubmitloginfo', |
|
34 |
+ name='username', |
|
35 |
+ ), |
|
36 |
+ migrations.AddField( |
|
37 |
+ model_name='staffdeleteclerksalesubmitloginfo', |
|
38 |
+ name='admin_id', |
|
39 |
+ field=models.CharField(blank=True, db_index=True, help_text='\u7ba1\u7406\u5458ID', max_length=32, null=True, verbose_name='admin_id'), |
|
40 |
+ ), |
|
41 |
+ migrations.AddField( |
|
42 |
+ model_name='staffdeleteclerksalesubmitloginfo', |
|
43 |
+ name='log_pk', |
|
44 |
+ field=models.CharField(blank=True, db_index=True, help_text='\u9500\u552e\u5458\u63d0\u4ea4\u8bb0\u5f55\u5173\u8054pk', max_length=32, null=True, verbose_name='log_pk'), |
|
45 |
+ ), |
|
46 |
+ migrations.AddField( |
|
47 |
+ model_name='staffdeleteclerksalesubmitloginfo', |
|
48 |
+ name='model_name', |
|
49 |
+ field=models.CharField(blank=True, db_index=True, help_text='\u578b\u53f7', max_length=32, null=True, verbose_name='model_name'), |
|
50 |
+ ), |
|
51 |
+ ] |
@@ -6,7 +6,9 @@ from django_models_ext import BaseModelMixin |
||
6 | 6 |
|
7 | 7 |
|
8 | 8 |
class StaffDeleteClerkSaleSubmitLogInfo(BaseModelMixin): |
9 |
- username = models.CharField(_(u'username'), max_length=32, blank=True, null=True, help_text=u'用户名', db_index=True) |
|
9 |
+ admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'管理员ID', db_index=True) |
|
10 |
+ log_pk = models.CharField(_(u'log_pk'), max_length=32, blank=True, null=True, help_text=u'销售员提交记录关联pk', db_index=True) |
|
11 |
+ model_name = models.CharField(_(u'model_name'), max_length=32, blank=True, null=True, help_text=u'型号', db_index=True) |
|
10 | 12 |
code = models.CharField(_(u'code'), max_length=32, blank=True, null=True, help_text=u'机身码', db_index=True) |
11 | 13 |
|
12 | 14 |
class Meta: |
@@ -15,3 +17,16 @@ class StaffDeleteClerkSaleSubmitLogInfo(BaseModelMixin): |
||
15 | 17 |
|
16 | 18 |
def __unicode__(self): |
17 | 19 |
return '%d' % self.pk |
20 |
+ |
|
21 |
+class StaffDeleteConsumerSubmitLogInfo(BaseModelMixin): |
|
22 |
+ admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'管理员ID', db_index=True) |
|
23 |
+ log_pk = models.CharField(_(u'log_pk'), max_length=32, blank=True, null=True, help_text=u'消费者提交记录关联pk', db_index=True) |
|
24 |
+ model_name = models.CharField(_(u'model_name'), max_length=32, blank=True, null=True, help_text=u'型号', db_index=True) |
|
25 |
+ code = models.CharField(_(u'code'), max_length=32, blank=True, null=True, help_text=u'机身码', db_index=True) |
|
26 |
+ |
|
27 |
+ class Meta: |
|
28 |
+ verbose_name = _(u'StaffDeleteConsumerSubmitLogInfo') |
|
29 |
+ verbose_name_plural = _(u'StaffDeleteConsumerSubmitLogInfo') |
|
30 |
+ |
|
31 |
+ def __unicode__(self): |
|
32 |
+ return '%d' % self.pk |