@@ -20,7 +20,7 @@ from coupon.models import UserCouponInfo, CouponInfo  | 
            ||
| 20 | 20 | 
                from integral.models import SaleclerkSubmitLogInfo  | 
            
| 21 | 21 | 
                from logs.models import MchInfoEncryptLogInfo  | 
            
| 22 | 22 | 
                from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo  | 
            
| 23 | 
                -from member.models import GoodsOrderInfo, MemberActivityInfo, MemberActivityGroupShareInfo  | 
            |
| 23 | 
                +from member.models import GoodsOrderInfo, MemberActivityInfo, MemberActivityGroupShareInfo, GoodsInfo  | 
            |
| 24 | 24 | 
                from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo  | 
            
| 25 | 25 | 
                from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatusCode, ProductCouponStatusCode,  | 
            
| 26 | 26 | 
                ProductMachineStatusCode, UserStatusCode)  | 
            
                @@ -1198,3 +1198,129 @@ def coupon_delete(request):  | 
            ||
| 1198 | 1198 | 
                 | 
            
| 1199 | 1199 | 
                return response(200, 'CouponInfo Delete Success', u'劵删除成功')  | 
            
| 1200 | 1200 | 
                 | 
            
| 1201 | 
                +def member_goods_list(request):  | 
            |
| 1202 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 1203 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 1204 | 
                +    title = request.POST.get('title', '')
               | 
            |
| 1205 | 
                +    page = request.POST.get('page', 1)
               | 
            |
| 1206 | 
                +    num = request.POST.get('num', 20)
               | 
            |
| 1207 | 
                +  | 
            |
| 1208 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 1209 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 1210 | 
                +  | 
            |
| 1211 | 
                + try:  | 
            |
| 1212 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 1213 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 1214 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 1215 | 
                +  | 
            |
| 1216 | 
                +    logs = GoodsInfo.objects.filter(title__icontains=title, only_for_member=False).order_by('-created_at')
               | 
            |
| 1217 | 
                +  | 
            |
| 1218 | 
                + count = logs.count()  | 
            |
| 1219 | 
                + logs, left = pagination(logs, page, num)  | 
            |
| 1220 | 
                + logs = [log.admindata for log in logs]  | 
            |
| 1221 | 
                +    return response(200, 'Get Member Goods Success', u'获取会员商品成功', data={
               | 
            |
| 1222 | 
                + 'logs': logs,  | 
            |
| 1223 | 
                + 'left': left,  | 
            |
| 1224 | 
                + 'count': count  | 
            |
| 1225 | 
                + })  | 
            |
| 1226 | 
                +  | 
            |
| 1227 | 
                +def member_goods_details(request):  | 
            |
| 1228 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 1229 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 1230 | 
                +    good_id = request.POST.get('good_id', '')
               | 
            |
| 1231 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 1232 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 1233 | 
                +  | 
            |
| 1234 | 
                + try:  | 
            |
| 1235 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 1236 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 1237 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 1238 | 
                +  | 
            |
| 1239 | 
                + try:  | 
            |
| 1240 | 
                + log = GoodsInfo.objects.get(good_id=good_id)  | 
            |
| 1241 | 
                + except:  | 
            |
| 1242 | 
                + return response()  | 
            |
| 1243 | 
                +  | 
            |
| 1244 | 
                + log = log.admindetails  | 
            |
| 1245 | 
                +  | 
            |
| 1246 | 
                +    return response(200, 'Get Member Goods Details Success', u'获取积分商品详情成功', data={
               | 
            |
| 1247 | 
                + 'log': log,  | 
            |
| 1248 | 
                + })  | 
            |
| 1249 | 
                +  | 
            |
| 1250 | 
                +def member_goods_update(request):  | 
            |
| 1251 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 1252 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 1253 | 
                +    good_id = request.POST.get('good_id', '')
               | 
            |
| 1254 | 
                +    title = request.POST.get('title', '')
               | 
            |
| 1255 | 
                +    desc = request.POST.get('desc', '')
               | 
            |
| 1256 | 
                +    value = int(request.POST.get('value', 0))
               | 
            |
| 1257 | 
                +    left_num = int(request.POST.get('left_num', 0))
               | 
            |
| 1258 | 
                +    image = request.POST.get('image_path', '')
               | 
            |
| 1259 | 
                +    coupon_id = request.POST.get('coupon_id', '')
               | 
            |
| 1260 | 
                +    slider_image = request.POST.get('slider_path', '')
               | 
            |
| 1261 | 
                +    integral = int(request.POST.get('integral', 0))
               | 
            |
| 1262 | 
                +    fee = int(request.POST.get('fee', 0))
               | 
            |
| 1263 | 
                +  | 
            |
| 1264 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 1265 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 1266 | 
                +  | 
            |
| 1267 | 
                + try:  | 
            |
| 1268 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 1269 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 1270 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 1271 | 
                +  | 
            |
| 1272 | 
                + try:  | 
            |
| 1273 | 
                + log = GoodsInfo.objects.get(good_id=good_id, status=True)  | 
            |
| 1274 | 
                + except:  | 
            |
| 1275 | 
                + return response()  | 
            |
| 1276 | 
                +  | 
            |
| 1277 | 
                + log.title = title  | 
            |
| 1278 | 
                + log.desc = desc  | 
            |
| 1279 | 
                + log.value = value  | 
            |
| 1280 | 
                + log.left_num = left_num  | 
            |
| 1281 | 
                + log.image = image  | 
            |
| 1282 | 
                + log.coupon_id = coupon_id  | 
            |
| 1283 | 
                + log.slider_image = slider_image  | 
            |
| 1284 | 
                + log.integral = integral  | 
            |
| 1285 | 
                + log.fee = fee  | 
            |
| 1286 | 
                + log.save()  | 
            |
| 1287 | 
                +  | 
            |
| 1288 | 
                + return response(200, 'GoodsInfo Update Success', u'积分商品更新成功')  | 
            |
| 1289 | 
                +  | 
            |
| 1290 | 
                +def member_goods_create(request):  | 
            |
| 1291 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 1292 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 1293 | 
                +    good_type = int(request.POST.get('good_type', 0))
               | 
            |
| 1294 | 
                +    title = request.POST.get('title', '')
               | 
            |
| 1295 | 
                +    desc = request.POST.get('desc', '')
               | 
            |
| 1296 | 
                +    value = int(request.POST.get('value', 0))
               | 
            |
| 1297 | 
                +    left_num = int(request.POST.get('left_num', 0))
               | 
            |
| 1298 | 
                +    image = request.POST.get('image_path', '')
               | 
            |
| 1299 | 
                +    coupon_id = request.POST.get('coupon_id', '')
               | 
            |
| 1300 | 
                +    slider_image = request.POST.get('slider_path', '')
               | 
            |
| 1301 | 
                +    integral = int(request.POST.get('integral', 0))
               | 
            |
| 1302 | 
                +    fee = int(request.POST.get('fee', 0))
               | 
            |
| 1303 | 
                +  | 
            |
| 1304 | 
                + if brand_id != settings.KODO_DEFAULT_BRAND_ID:  | 
            |
| 1305 | 
                + return response(ProductBrandStatusCode.BRAND_NOT_MATCH)  | 
            |
| 1306 | 
                +  | 
            |
| 1307 | 
                + try:  | 
            |
| 1308 | 
                + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)  | 
            |
| 1309 | 
                + except AdministratorInfo.DoesNotExist:  | 
            |
| 1310 | 
                + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)  | 
            |
| 1311 | 
                +  | 
            |
| 1312 | 
                + GoodsInfo.objects.create(  | 
            |
| 1313 | 
                + brand_id=administrator.brand_id,  | 
            |
| 1314 | 
                + good_type=good_type,  | 
            |
| 1315 | 
                + title=title,  | 
            |
| 1316 | 
                + desc=desc,  | 
            |
| 1317 | 
                + value=value,  | 
            |
| 1318 | 
                + left_num=left_num,  | 
            |
| 1319 | 
                + image=image,  | 
            |
| 1320 | 
                + coupon_id=coupon_id,  | 
            |
| 1321 | 
                + slider_image=slider_image,  | 
            |
| 1322 | 
                + integral=integral,  | 
            |
| 1323 | 
                + fee=fee,  | 
            |
| 1324 | 
                + )  | 
            |
| 1325 | 
                +  | 
            |
| 1326 | 
                + return response(200, 'GoodsInfo Create Success', u'积分商品创建成功')  | 
            
                @@ -172,6 +172,11 @@ urlpatterns += [  | 
            ||
| 172 | 172 | 
                url(r'^admin/coupon/create$', admin_views.coupon_create, name='coupon_create'),  | 
            
| 173 | 173 | 
                url(r'^admin/coupon/update$', admin_views.coupon_update, name='coupon_update'),  | 
            
| 174 | 174 | 
                url(r'^admin/coupon/delete$', admin_views.coupon_delete, name='coupon_delete'),  | 
            
| 175 | 
                +  | 
            |
| 176 | 
                + url(r'^admin/member/goods/list$', admin_views.member_goods_list, name='member_goods_list'),  | 
            |
| 177 | 
                + url(r'^admin/member/goods/details$', admin_views.member_goods_details, name='member_goods_details'),  | 
            |
| 178 | 
                + url(r'^admin/member/goods/create$', admin_views.member_goods_create, name='member_goods_create'),  | 
            |
| 179 | 
                + url(r'^admin/member/goods/update$', admin_views.member_goods_update, name='member_goods_update'),  | 
            |
| 175 | 180 | 
                ]  | 
            
| 176 | 181 | 
                 | 
            
| 177 | 182 | 
                urlpatterns += [  | 
            
                @@ -7,6 +7,7 @@ from shortuuidfield import ShortUUIDField  | 
            ||
| 7 | 7 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 8 | 8 | 
                 | 
            
| 9 | 9 | 
                from mch.models import ModelInfo  | 
            
| 10 | 
                +from coupon.models import CouponInfo  | 
            |
| 10 | 11 | 
                from simditor.fields import RichTextField  | 
            
| 11 | 12 | 
                 | 
            
| 12 | 13 | 
                 | 
            
                @@ -97,6 +98,50 @@ class GoodsInfo(BaseModelMixin):  | 
            ||
| 97 | 98 | 
                detail['desc'] = self.desc  | 
            
| 98 | 99 | 
                return detail  | 
            
| 99 | 100 | 
                 | 
            
| 101 | 
                + @property  | 
            |
| 102 | 
                + def admindata(self):  | 
            |
| 103 | 
                + try:  | 
            |
| 104 | 
                + coupon = CouponInfo.objects.get(coupon_id=self.coupon_id).admindata  | 
            |
| 105 | 
                + except:  | 
            |
| 106 | 
                +            coupon = {}
               | 
            |
| 107 | 
                +        return {
               | 
            |
| 108 | 
                + 'good_id': self.good_id,  | 
            |
| 109 | 
                + 'good_type': self.good_type,  | 
            |
| 110 | 
                + 'title': self.title,  | 
            |
| 111 | 
                + 'image': self.image_url,  | 
            |
| 112 | 
                + 'image_path': self.image_path,  | 
            |
| 113 | 
                + 'slider_image': self.slider_image_url,  | 
            |
| 114 | 
                + 'slider_path': self.slider_image_path,  | 
            |
| 115 | 
                + 'integral': self.integral,  | 
            |
| 116 | 
                + 'fee': self.fee,  | 
            |
| 117 | 
                + 'value': self.value,  | 
            |
| 118 | 
                + 'left_num': self.left_num,  | 
            |
| 119 | 
                + 'coupon': coupon,  | 
            |
| 120 | 
                + 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'),  | 
            |
| 121 | 
                + }  | 
            |
| 122 | 
                +  | 
            |
| 123 | 
                + @property  | 
            |
| 124 | 
                + def admindetails(self):  | 
            |
| 125 | 
                + try:  | 
            |
| 126 | 
                + coupon = CouponInfo.objects.get(coupon_id=self.coupon_id).admindata  | 
            |
| 127 | 
                + except:  | 
            |
| 128 | 
                +            coupon = {}
               | 
            |
| 129 | 
                +        return {
               | 
            |
| 130 | 
                + 'good_id': self.good_id,  | 
            |
| 131 | 
                + 'good_type': self.good_type,  | 
            |
| 132 | 
                + 'title': self.title,  | 
            |
| 133 | 
                + 'image': self.image_url,  | 
            |
| 134 | 
                + 'image_path': self.image_path,  | 
            |
| 135 | 
                + 'slider_image': self.slider_image_url,  | 
            |
| 136 | 
                + 'slider_path': self.slider_image_path,  | 
            |
| 137 | 
                + 'integral': self.integral,  | 
            |
| 138 | 
                + 'fee': self.fee,  | 
            |
| 139 | 
                + 'value': self.value,  | 
            |
| 140 | 
                + 'desc': self.desc,  | 
            |
| 141 | 
                + 'left_num': self.left_num,  | 
            |
| 142 | 
                + 'coupon': coupon,  | 
            |
| 143 | 
                + 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'),  | 
            |
| 144 | 
                + }  | 
            |
| 100 | 145 | 
                 | 
            
| 101 | 146 | 
                class GoodsOrderInfo(BaseModelMixin):  | 
            
| 102 | 147 | 
                PHYSICAL = 0  |