361
-
362 360
         cusi, _ = ConsumeUserStatisticInfo.objects.get_or_create(
363 361
             brand_id=brand.brand_id,
364 362
             ymd=ymd,

+ 16 - 17
api/staff_views.py

@@ -1,19 +1,18 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3 3
 from django.conf import settings
4
-from django.contrib.admin.views.decorators import staff_member_required
5 4
 from django.db import transaction
6 5
 from django_logit import logit
7 6
 from django_response import response
8 7
 
9
-from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo
10
-from mch.models import BrandInfo, DistributorInfo, ModelInfo, SaleclerkInfo, ConsumeInfoSubmitLogInfo, ActivityInfo
11
-from staff.models import StaffDeleteClerkSaleSubmitLogInfo
12
-from coupon.models import CouponInfo, UserCouponInfo
13 8
 from account.models import UserInfo
9
+from coupon.models import CouponInfo, UserCouponInfo
10
+from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo
11
+from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo
14 12
 from member.models import RightInfo
15
-from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,
16
-                              SaleclerkSaleStatisticInfo, SaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeDistributorSaleStatisticInfo, ConsumeModelSaleStatisticInfo, ConsumeProvinceSaleStatisticInfo, ConsumeUserStatisticInfo)
13
+from statistic.models import (ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo,
14
+                              DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,
15
+                              SaleclerkSaleStatisticInfo, SaleStatisticInfo)
17 16
 
18 17
 
19 18
 def exec_del_clerk_sale_submit(pk):
@@ -52,15 +51,15 @@ def exec_del_clerk_sale_submit(pk):
52 51
     ymd = str(ssli.ymd)
53 52
 
54 53
     if not clerk.test_user and not ssli.dupload:
55
-        #删除积分
56
-
54
+        # 删除积分
57 55
         try:
58 56
             income = SaleclerkIntegralIncomeExpensesInfo.objects.select_for_update().get(model_id=model.model_id, code=ssli.code, clerk_id=ssli.clerk_id)
59
-            income.status = False
60
-            income.save()
61 57
         except SaleclerkIntegralIncomeExpensesInfo.DoesNotExist:
62 58
             return response()
63
-        
59
+
60
+        income.status = False
61
+        income.save()
62
+
64 63
         integral = model.integral
65 64
 
66 65
         clerk.num -= 1
@@ -221,6 +220,7 @@ def del_clerk_sale_submit_api(request):
221 220
 
222 221
     return response(200, 'Del Success', u'删除成功')
223 222
 
223
+
224 224
 def exec_del_consumer_submit(pk):
225 225
     try:
226 226
         ssli = ConsumeInfoSubmitLogInfo.objects.select_for_update().get(pk=pk)
@@ -236,7 +236,7 @@ def exec_del_consumer_submit(pk):
236 236
     ssli.save()
237 237
 
238 238
     ConsumeInfoSubmitLogInfo.objects.filter(serialNo=sn, model_id=ssli.model_id, dupload=True, status=True).update(status=False)
239
-    
239
+
240 240
     if ssli.dupload:
241 241
         return response()
242 242
 
@@ -255,7 +255,7 @@ def exec_del_consumer_submit(pk):
255 255
     except UserInfo.DoesNotExist:
256 256
         return response()
257 257
 
258
-    #消除用户劵
258
+    # 消除用户劵
259 259
     if user.shots_num <= 5:
260 260
         rights = RightInfo.objects.filter(is_send_coupon=True, status=True)
261 261
         for right in rights:
@@ -285,12 +285,12 @@ def exec_del_consumer_submit(pk):
285 285
             user_coupons = UserCouponInfo.objects.filter(user_id=user.user_id, coupon_id=coupon_id, coupon_from='MEMBER_BENEFITS', status=True, has_used=False).values_list('pk', flat=True)
286 286
             # 防止用户部分劵已使用,不够消除
287 287
             UserCouponInfo.objects.filter(pk__in=list(user_coupons)[0:min(coupon_num, len(user_coupons))]).update(status=False)
288
-    
288
+
289 289
     # 消除活动劵
290 290
     if ssli.submit_during_activity:
291 291
         UserCouponInfo.objects.filter(user_id=user.user_id, coupon_from='PROMOTION', submit_pk=ssli.pk).update(status=False)
292 292
 
293
-    #消除积分及会员等级
293
+    # 消除积分及会员等级
294 294
     integral = model.shot_member_integral
295 295
 
296 296
     if user.shots_num <= 5:
@@ -327,7 +327,6 @@ def exec_del_consumer_submit(pk):
327 327
         ssi.num -= 1
328 328
         ssi.save()
329 329
 
330
-
331 330
         # 日用户统计
332 331
         ussi, _ = ConsumeUserStatisticInfo.objects.select_for_update().get_or_create(
333 332
             brand_id=brand.brand_id,

+ 2 - 2
commands/management/commands/qiniu.py

@@ -44,14 +44,14 @@ class Command(CompatibilityBaseCommand):
44 44
                     try:
45 45
                         upload_file_path(ssli.image.path, key=ssli.image.name, bucket='tamron')
46 46
                         os.remove(ssli.image.path)
47
-                    except:
47
+                    except Exception:
48 48
                         pass
49 49
 
50 50
                 if ssli.code_image:
51 51
                     try:
52 52
                         upload_file_path(ssli.code_image.path, key=ssli.code_image.name, bucket='tamron')
53 53
                         os.remove(ssli.code_image.path)
54
-                    except:
54
+                    except Exception:
55 55
                         pass
56 56
 
57 57
                 ssli.is_upload_qiniu = True

+ 2 - 2
commands/management/commands/qiniuproducer.py

@@ -21,6 +21,6 @@ class Command(CompatibilityBaseCommand):
21 21
 
22 22
         for ssli in sslis:
23 23
             r.rpushjson(QINIU_UPLOAD_LIST, {
24
-               'model': 'SaleclerkSubmitLogInfo',
25
-               'pk': ssli.pk,
24
+                'model': 'SaleclerkSubmitLogInfo',
25
+                'pk': ssli.pk,
26 26
             })

+ 1 - 1
isort.sh

@@ -1,3 +1,3 @@
1 1
 #!/bin/bash
2 2
 
3
-isort -rc -sp . .
3
+isort .

+ 5 - 2
kodo/oauth_settings.py

@@ -44,15 +44,16 @@ def DJANGO_WE_MESSAGE_CALLBACK_FUNC(request, data, decrypted=None):
44 44
 
45 45
 def DJANGO_WE_COMPONENT_CALLBACK_FUNC(request, appid, data, decrypted=None):
46 46
     """ WeChat Component Message Callback Func """
47
-    from account.models import UserInfo
48 47
     from django_we.models import SubscribeUserInfo
49 48
     from pywe_component_authorizer_token import authorizer_access_token
50 49
     from pywe_custom_message import send_custom_card_message
51 50
     from pywe_event_message import parse_eventkey
52 51
     from pywe_storage import RedisStorage
53 52
     from pywe_user import get_user_info
53
+
54
+    from account.models import UserInfo
54 55
     from utils.redis.connect import r
55
-    from utils.redis.rkeys import SUBSCRIBE_USERINFO_LIST, MEMBERCARD_USERINFO_LIST
56
+    from utils.redis.rkeys import MEMBERCARD_USERINFO_LIST, SUBSCRIBE_USERINFO_LIST
56 57
 
57 58
     logger.info(appid)
58 59
     logger.info(data)
@@ -202,6 +203,7 @@ def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):
202 203
     zbar = int(request.POST.get('zbar', 0))
203 204
     if zbar:
204 205
         import os
206
+
205 207
         from utils.zbar.zbar import zbar
206 208
 
207 209
         file_path = os.path.join(settings.MEDIA_ROOT, file_path)
@@ -214,6 +216,7 @@ def DJANGO_FILE_UPLOAD_CALLBACK_FUNC(request, file_path=None, file_url=None):
214 216
     zbar2 = int(request.POST.get('zbar2', 0))
215 217
     if zbar:
216 218
         import os
219
+
217 220
         from utils.zbar.zbar2 import zbar2
218 221
 
219 222
         file_path = os.path.join(settings.MEDIA_ROOT, file_path)

+ 4 - 3
logs/models.py

@@ -3,10 +3,11 @@
3 3
 from django.db import models
4 4
 from django.utils.translation import ugettext_lazy as _
5 5
 from django_models_ext import BaseModelMixin, upload_file_url, upload_path
6
-from mch.models import ModelInfo, OperatorInfo
7 6
 from shortuuidfield import ShortUUIDField
8 7
 from TimeConvert import TimeConvert as tc
9 8
 
9
+from mch.models import ModelInfo, OperatorInfo
10
+
10 11
 
11 12
 class MchInfoEncryptLogInfo(BaseModelMixin):
12 13
     plaintext = models.CharField(_(u'plaintext'), max_length=64, blank=True, null=True, help_text=u'待加密字符串', db_index=True, unique=True)
@@ -36,13 +37,13 @@ class MchInfoEncryptLogInfo(BaseModelMixin):
36 37
 
37 38
     def __unicode__(self):
38 39
         return unicode(self.pk)
39
-    
40
+
40 41
     @property
41 42
     def admindata(self):
42 43
         model = ModelInfo.objects.get(pk=self.model_pk, status=True)
43 44
         try:
44 45
             operator_name = OperatorInfo.objects.get(operator_id=self.operator_id).name
45
-        except:
46
+        except OperatorInfo.DoesNotExist:
46 47
             operator_name = '深圳捷成'
47 48
 
48 49
         return {

+ 1 - 2
member/models.py

@@ -135,7 +135,7 @@ class GoodsOrderInfo(BaseModelMixin):
135 135
 
136 136
     def __unicode__(self):
137 137
         return unicode(self.pk)
138
-    
138
+
139 139
     @property
140 140
     def admindata(self):
141 141
         good = GoodsInfo.objects.get(good_id=self.good_id)
@@ -312,7 +312,6 @@ class MemberActivityInfo(BaseModelMixin):
312 312
 
313 313
     position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True)
314 314
 
315
-
316 315
     is_signup = models.BooleanField(_(u'is_signup'), default=True, help_text=u'是否有报名功能', db_index=True)
317 316
 
318 317
     class Meta:

+ 4 - 3
miniapp/views.py

@@ -156,14 +156,15 @@ def mini_login_api(request):
156 156
     user.appid = appId
157 157
     if unionid:
158 158
         user.unionid = unionid
159
-    
159
+
160 160
     # 同步销售员手机号
161 161
     try:
162 162
         saleclerk = SaleclerkInfo.objects.get(unionid=unionid, is_auth=True, status=True)
163
-        user.phone = saleclerk.clerk_phone
164 163
     except SaleclerkInfo.DoesNotExist:
165
-        saleclerk = None        
164
+        saleclerk = None
166 165
 
166
+    if saleclerk:
167
+        user.phone = saleclerk.clerk_phone
167 168
     user.user_status = UserInfo.ACTIVATED
168 169
     user.signup_ip = client_ip(request)
169 170
     user.signup_at = tc.utc_datetime()

+ 1 - 1
simditor/urls.py

@@ -24,7 +24,7 @@ elif django.VERSION >= (1, 8):
24 24
             name='simditor_upload'),
25 25
     ]
26 26
 else:
27
-    from django.conf.urls import patterns    # pylint disable=C0411
27
+    from django.conf.urls import patterns  # pylint disable=C0411
28 28
 
29 29
     # pylint disable=C0103
30 30
     urlpatterns = patterns(

+ 1 - 1
simditor/widgets.py

@@ -25,7 +25,7 @@ try:
25 25
     from django.forms.utils import flatatt
26 26
 except ImportError:
27 27
     # Django <1.7
28
-    from django.forms.util import flatatt        # pylint disable=E0611, E0401
28
+    from django.forms.util import flatatt  # pylint disable=E0611, E0401
29 29
 
30 30
 
31 31
 class LazyEncoder(DjangoJSONEncoder):

+ 0 - 1
utils/zbar/zbar.py

@@ -2,7 +2,6 @@
2 2
 
3 3
 from django.conf import settings
4 4
 from PIL import Image, ImageEnhance
5
-
6 5
 from pyzbar import pyzbar
7 6
 
8 7
 

kodo - Gogs: Go Git Service

No Description

basic.html 8.8KB

    {% load staticfiles %} <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="format-detection" content="telephone=no,email=no,address=no"> <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <title>{% block title %}{% endblock %}</title> <link href="//cdnjs.cloudflare.com/ajax/libs/pure/0.6.2/pure-min.css" rel="stylesheet"> <link href="//cdnjs.cloudflare.com/ajax/libs/flexslider/2.6.3/flexslider.min.css" rel="stylesheet"> <link href="//res.wx.qq.com/open/libs/weui/0.4.3/weui.min.css" rel="stylesheet" type="text/css" /> <link href="{% static 'page/css/flexslider.ext.css' %}" rel="stylesheet" type="text/css" /> <link href="{% static 'page/css/weui.ext.css' %}" rel="stylesheet" type="text/css" /> {% block link %}{% endblock %} <style> body { font-family: Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif !important; background: #fff; } img { pointer-events: none; } .clickable { pointer-events: auto; } /* Input 自动填充后,移除 Chrome 默认黄色 */ input:-webkit-autofill { box-shadow: 0 0 0 1000px white inset !important; } .container { padding-bottom: 45px; } .text-center { text-align: center; } .empty { color: #999; padding: .9375rem 0; font-size: .625rem; } .text_ellipsis { overflow:hidden; white-space:nowrap; text-overflow: ellipsis; } .fl { float: left; } .fr { float: right; } .clearfix { zoom: 1; } .clearfix:after { content: "\200B"; display: block; height: 0; clear: both; } </style> {% block tohomecss %} <style> .tohome { width: 40px; height: 40px; background-color: rgba(139, 139, 139, 0.7); position: fixed; right: 10px; bottom: 20px; border-radius: 9999px; border-top-left-radius: 9999px; border-top-right-radius: 9999px; border-bottom-left-radius: 9999px; border-bottom-right-radius: 9999px; z-index: 99999999; } .tohome img { display: block; width: 18px; height: 13px; margin: 6px auto 2px; } .tohome p { color: #ffffff; } </style> {% endblock %} {% block css %}{% endblock %} <script> {% block rem %} //这段js的最后面有两个参数记得要设置,一个为设计稿实际宽度,一个为制作稿最大宽度,例如设计稿为750,最大宽度为750,则为(750,750) !function(e,t){function n(){var n=l.getBoundingClientRect().width;t=t||540,n>t&&(n=t);var i=100*n/e;r.innerHTML="html{font-size:"+i+"px;}"}var i,d=document,o=window,l=d.documentElement,r=document.createElement("style");if(l.firstElementChild)l.firstElementChild.appendChild(r);else{var a=d.createElement("div");a.appendChild(r),d.write(a.innerHTML),a=null}n(),o.addEventListener("resize",function(){clearTimeout(i),i=setTimeout(n,300)},!1),o.addEventListener("pageshow",function(e){e.persisted&&(clearTimeout(i),i=setTimeout(n,300))},!1),"complete"===d.readyState?d.body.style.fontSize="16px":d.addEventListener("DOMContentLoaded",function(e){d.body.style.fontSize="16px"},!1)}(750,750); {% endblock %} </script> </head> <body> {% block somehtml %}{% endblock %} <div class="container"> {% block container %}{% endblock %} {% block tohomehtml %} <div class="tohome"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAeCAMAAABzP0xhAAAAS1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////+DmQsHAAAAGHRSTlMAoHDw+q0VCufg187DuI+OgGJUSDwyKCBlxSbJAAAAi0lEQVQ4y+3SuRKEIBBFUaQbcd+X9/9fOpRDjaXQGJnNiW/SiwpkmXpiW6C16Sav4dR5qtlKHMpNbhaCR4vUTIwfnuKNxoWONR1uunB0g4Cxt9EbRDSXVewVoqr9bNYCgmJV3kwQ0fxtRkYCj8oZ8GBQqieHIWByev9DEPjfeisy+mDk6Dy9/kevRR9/MjHbEpIcQAAAAABJRU5ErkJggg=="> <p style="text-align:center;font-size:8px">回首页</p> </div> {% endblock %} </div> {% block somehtml2 %}{% endblock %} <script> window.onerror = function(errorMessage, scriptURI, lineNo, columnNo, error) { // 构建错误对象 var errorObj = { lineNo: lineNo || null, columnNo: columnNo || null, scriptURI: scriptURI || null, errorMessage: errorMessage || null, stack: error && error.stack ? error.stack : null }; // 构建Http请求 if (XMLHttpRequest) { var xhr = new XMLHttpRequest(); xhr.open('post', '/e/report', true); xhr.setRequestHeader('Content-Type', 'application/json'); // 设置请求头 xhr.send(JSON.stringify(errorObj)); // 发送参数 } } </script> {# <script src="//cdnjs.cloudflare.com/ajax/libs/zepto/1.1.6/zepto.min.js"></script>#} <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/flexslider/2.6.3/jquery.flexslider-min.js"></script> {% block script %}{% endblock %} <script> // History 压入本地连接 function pushHistory() { var state = { title: "title", url: "#" }; window.history.pushState(state, "title", "#"); } pushHistory(); // 延时监听 setTimeout(function () { // 监听``返回``、``后退``、``上一页`` window.addEventListener("popstate", function (e) { if (confirm("确认退出") == true) { window.history.back(-1); } else { pushHistory(); } }, false); }, 300); </script> <script> {% block glbjs %}{% endblock %} $(function() { /** 格式化输入字符串**/ //用法: "hello{0}".format('world');返回'hello world' String.prototype.format= function(){ var args = arguments; return this.replace(/\{(\d+)\}/g,function(s,i){ return args[i]; }); } {% block flexsliderjs %} // 轮播图 $('.flexslider').flexslider({ slideshowSpeed: 2000, pauseOnHover: true, controlNav: false, directionNav: false, }); {% endblock %} {% block tohomejs %} // 返回首页 $('.tohome').click(function () { window.location.href = '{{ domain }}/page/nav?{{ params|safe }}' }) {% endblock %} {% block js %}{% endblock %} }); </script> <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script type="text/javascript" src="{% static 'machine/js/jswe-1.0.0.js' %}"></script> <script> {# V.initWxData({#} {# imgUrl: '{{ domain }}{% static 'page/img/logo.jpg' %}',#} {# link: 'http://hpsgift.hphcclub.com/we/ws',#} {# desc: '惠普销售红包系统',#} {# title: '惠普销售红包系统',#} {# timeLine: ''#} {# }, true);#} V.hideOptionMenu(); {% block jswe %}{% endblock %} </script> {% block scriptag %}{% endblock %} </body> </html>