class="add-code nl-26 ol-26">
+ 'reason': reason,
+ })
+
+ return response(200, 'Consume Shot Unbinding Success', u'消费者镜头解绑成功')
+
+
@@ -6,7 +6,7 @@ from django_file_upload import views as file_views |
||
| 6 | 6 |
from api import (admin_views, clerk_views, complement_views, distributor_views, encrypt_views, express_views, log_views, |
| 7 | 7 |
maintenance_point_views, maintenance_views, mch_views, member_views, model_views, operator_views, |
| 8 | 8 |
refresh_views, sr_views, staff_views, tenancy_admin_views, tenancy_views, tencentcloud_views, wx_views, |
| 9 |
- wxa_views) |
|
| 9 |
+ wxa_views, consumer_admin_view) |
|
| 10 | 10 |
from miniapp import qy_views |
| 11 | 11 |
from miniapp import views as mini_views |
| 12 | 12 |
from page import oauth_views, sale_views, screen_views |
@@ -58,7 +58,8 @@ urlpatterns += [ |
||
| 58 | 58 |
url(r'^consumer_phone$', mch_views.consumer_phone_api, name='consumer_phone_api'), |
| 59 | 59 |
url(r'^consumer_info$', mch_views.consumer_info_api, name='consumer_info_api'), |
| 60 | 60 |
url(r'^consumer_snlist$', mch_views.consumer_snlist_api, name='consumer_snlist_api'), |
| 61 |
- url(r'^consumer_model_list$', mch_views.consumer_model_list, name='consumer_model_list') |
|
| 61 |
+ url(r'^consumer_model_list$', mch_views.consumer_model_list, name='consumer_model_list'), |
|
| 62 |
+ url(r'^consumer/shot/unbinding$', mch_views.consumer_shot_unbinding, name='consumer_shot_unbinding'), |
|
| 62 | 63 |
] |
| 63 | 64 |
|
| 64 | 65 |
urlpatterns += [ |
@@ -159,6 +160,7 @@ urlpatterns += [ |
||
| 159 | 160 |
url(r'^admin/record/sale$', admin_views.record_sale, name='record_sale'), |
| 160 | 161 |
url(r'^admin/record/sale/batch$', admin_views.record_sale_batch, name='record_sale_batch'), |
| 161 | 162 |
url(r'^admin/record/warehouse$', admin_views.record_warehouse, name='record_warehouse'), |
| 163 |
+ url(r'^admin/consumer/shot/unbinding/list$', consumer_admin_view.consumer_shot_unbinding_list, name='consumer_shot_unbinding_list'), |
|
| 162 | 164 |
|
| 163 | 165 |
url(r'^admin/list/model$', admin_views.model_list, name='model_list'), |
| 164 | 166 |
url(r'^admin/list/distributor$', admin_views.distributor_list, name='distributor_list'), |
@@ -0,0 +1,37 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+# Generated by Django 3.2.6 on 2023-03-01 07:25 |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations, models |
|
| 6 |
+ |
|
| 7 |
+ |
|
| 8 |
+class Migration(migrations.Migration): |
|
| 9 |
+ |
|
| 10 |
+ dependencies = [ |
|
| 11 |
+ ('mch', '0066_auto_20230208_1344'),
|
|
| 12 |
+ ] |
|
| 13 |
+ |
|
| 14 |
+ operations = [ |
|
| 15 |
+ migrations.CreateModel( |
|
| 16 |
+ name='ConsumeShotUnbindingInfo', |
|
| 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 |
+ ('brand_id', models.CharField(blank=True, db_index=True, help_text='品牌唯一标识', max_length=32, null=True, verbose_name='brand_id')),
|
|
| 23 |
+ ('brand_name', models.CharField(blank=True, help_text='品牌名称', max_length=255, null=True, verbose_name='brand_name')),
|
|
| 24 |
+ ('user_id', models.CharField(blank=True, db_index=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')),
|
|
| 25 |
+ ('submit_pk', models.IntegerField(blank=True, default=0, help_text='消费者提交ID', null=True, verbose_name='submit_pk')),
|
|
| 26 |
+ ('submit_at', models.DateTimeField(blank=True, help_text='消费者提交时间', null=True, verbose_name='submit_at')),
|
|
| 27 |
+ ('model_id', models.CharField(blank=True, db_index=True, help_text='型号唯一标识', max_length=32, null=True, verbose_name='model_id')),
|
|
| 28 |
+ ('sn', models.CharField(blank=True, db_index=True, help_text='序列号', max_length=16, null=True, verbose_name='sn')),
|
|
| 29 |
+ ('reason', models.CharField(blank=True, db_index=True, help_text='解绑理由', max_length=256, null=True, verbose_name='model_id')),
|
|
| 30 |
+ ], |
|
| 31 |
+ options={
|
|
| 32 |
+ 'verbose_name': '消费者镜头解绑记录', |
|
| 33 |
+ 'verbose_name_plural': '消费者镜头解绑记录', |
|
| 34 |
+ 'unique_together': {('user_id', 'submit_pk')},
|
|
| 35 |
+ }, |
|
| 36 |
+ ), |
|
| 37 |
+ ] |
@@ -0,0 +1,20 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+# Generated by Django 3.2.6 on 2023-03-01 10:21 |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations, models |
|
| 6 |
+ |
|
| 7 |
+ |
|
| 8 |
+class Migration(migrations.Migration): |
|
| 9 |
+ |
|
| 10 |
+ dependencies = [ |
|
| 11 |
+ ('mch', '0067_consumeshotunbindinginfo'),
|
|
| 12 |
+ ] |
|
| 13 |
+ |
|
| 14 |
+ operations = [ |
|
| 15 |
+ migrations.AlterField( |
|
| 16 |
+ model_name='consumeshotunbindinginfo', |
|
| 17 |
+ name='reason', |
|
| 18 |
+ field=models.CharField(blank=True, db_index=True, help_text='解绑理由', max_length=256, null=True, verbose_name='reason'), |
|
| 19 |
+ ), |
|
| 20 |
+ ] |
@@ -9,6 +9,7 @@ from jsonfield import JSONField |
||
| 9 | 9 |
from shortuuidfield import ShortUUIDField |
| 10 | 10 |
from TimeConvert import TimeConvert as tc |
| 11 | 11 |
|
| 12 |
+from kodo.basemodels import BrandInfoMixin |
|
| 12 | 13 |
from coupon.models import CouponInfo |
| 13 | 14 |
|
| 14 | 15 |
|
@@ -770,6 +771,7 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin): |
||
| 770 | 771 |
'final_coupon_info': act.coupon_info(created_at=self.created_at) if act else self.coupon_info, |
| 771 | 772 |
'has_used': self.has_used, |
| 772 | 773 |
'used_at': self.used_at, |
| 774 |
+ 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M'), |
|
| 773 | 775 |
} |
| 774 | 776 |
|
| 775 | 777 |
@property |
@@ -800,6 +802,44 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin): |
||
| 800 | 802 |
} |
| 801 | 803 |
|
| 802 | 804 |
|
| 805 |
+class ConsumeShotUnbindingInfo(BaseModelMixin, BrandInfoMixin): |
|
| 806 |
+ user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
| 807 |
+ submit_pk = models.IntegerField(_(u'submit_pk'), default=0, blank=True, null=True, help_text=u'消费者提交ID') |
|
| 808 |
+ submit_at = models.DateTimeField(_(u'submit_at'), blank=True, null=True, help_text=u'消费者提交时间') |
|
| 809 |
+ model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True) |
|
| 810 |
+ sn = models.CharField(_(u'sn'), max_length=16, blank=True, null=True, help_text=u'序列号', db_index=True) |
|
| 811 |
+ reason = models.CharField(_(u'reason'), max_length=256, blank=True, null=True, help_text=u'解绑理由', db_index=True) |
|
| 812 |
+ |
|
| 813 |
+ class Meta: |
|
| 814 |
+ verbose_name = _(u'消费者镜头解绑记录') |
|
| 815 |
+ verbose_name_plural = _(u'消费者镜头解绑记录') |
|
| 816 |
+ |
|
| 817 |
+ unique_together = ( |
|
| 818 |
+ ('user_id', 'submit_pk'),
|
|
| 819 |
+ ) |
|
| 820 |
+ |
|
| 821 |
+ def __unicode__(self): |
|
| 822 |
+ return '%d' % self.pk |
|
| 823 |
+ |
|
| 824 |
+ @property |
|
| 825 |
+ def admindata(self): |
|
| 826 |
+ from account.models import UserInfo |
|
| 827 |
+ |
|
| 828 |
+ info = ModelInfo.objects.get(model_id=self.model_id).fulldata |
|
| 829 |
+ user = UserInfo.objects.get(user_id=self.user_id) |
|
| 830 |
+ |
|
| 831 |
+ return {
|
|
| 832 |
+ 'user_id': self.user_id, |
|
| 833 |
+ 'phone': user.phone, |
|
| 834 |
+ 'model_info': model_info, |
|
| 835 |
+ 'sn': self.sn, |
|
| 836 |
+ 'reason': self.reason, |
|
| 837 |
+ 'submit_pk': self.submit_pk, |
|
| 838 |
+ 'submit_at': self.submit_at, |
|
| 839 |
+ 'created_at': self.created_at, |
|
| 840 |
+ } |
|
| 841 |
+ |
|
| 842 |
+ |
|
| 803 | 843 |
class ActivityInfo(BaseModelMixin): |
| 804 | 844 |
FIXED_EXPIRED_TIME = 0 |
| 805 | 845 |
CHANGED_EXPIRED_TIME = 1 |