| @@ -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 |