def POST(self): web.header("Content-Type", "application/json") if helper.logged(helper.PRIV_USER): user_data = web.input(product_id='') if user_data.product_id == '': return json.dumps({'ret': -1, 'msg': '参数错误'}) # 查找shop db_shop = helper.get_shop_by_uid() # 查sku商品信息 db_sku = db.sku_store.find_one( {'product_id': user_data.product_id}) if not db_sku: return json.dumps({'ret': -1, 'msg': '未查到商品信息!'}) # 查base_sku base_sku = db.dereference(db_sku['base_sku']) # 返回结果 ret = { 'ret': 0, 'data': { 'product_id': db_sku['product_id'], 'name': base_sku['name'], 'unit_name': helper.UNIT_TYPE[db_sku['unit']], 'is_pack': db_sku['is_pack'], 'cost_price': db_sku['ref_cost'], } } return json.dumps(ret) else: return json.dumps({'ret': -3, 'msg': '无权限访问'})
def POST(self): web.header("Content-Type", "application/json") if helper.logged(helper.PRIV_USER, 'POS_INVENTORY'): user_data = web.input(product_id='', online='') if '' in (user_data.product_id, user_data.online): return json.dumps({'ret': -1, 'msg': '参数错误'}) # 查找shop db_shop = helper.get_shop_by_uid() db_invent = db.inventory.update_one( { 'product_id': user_data.product_id, 'shop': db_shop['shop'], }, { '$set': { 'online': int(user_data.online) }, '$push': { 'history': (helper.time_str(), helper.get_session_uname(), '上下架标志修改为 %s' % str(user_data.online)) }, }) return json.dumps({'ret': 0, 'msg': '操作完成'}) else: return json.dumps({'ret': -3, 'msg': '无权限访问'})
def GET(self): if helper.logged(helper.PRIV_DELIVERY, 'DELVERY_ORDER'): render = helper.create_render(globals={'str': str}) user_data = web.input(order='', status='') if '' in (user_data.order, user_data.status): return render.info('错误的参数!') # 查找门店 db_shop = helper.get_shop_by_uid() # 查询工单信息 db_order = db.order_app.find_one({ 'order_id': user_data.order, 'shop': ObjectId(db_shop['shop']) }) if db_order == None: return render.info('order错误的参数!') # 查询 站点信息 s = db.base_shop.find_one({'_id': db_shop['shop']}, { 'name': 1, 'type': 1 }) shop_name = '%s(%s)' % (s['name'].encode('utf-8'), helper.SHOP_TYPE[s['type']]) return render.delivery_order_view(helper.get_session_uname(), helper.get_privilege_name(), db_order, shop_name, user_data.status, helper.ORDER_STATUS, db_order['history']) else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER): render = helper.create_render() user_data = web.input(sku='') if user_data.sku == '': return render.info('错误的参数!') # 检查用户是否有此店权限 db_shop = helper.get_shop_by_uid() # 查找店面信息 db_shop2 = helper.get_shop(db_shop['shop']) if db_shop2 == None: return render.info('未找到所属门店!') db_sku = db.sku_store.find_one({'_id': ObjectId(user_data.sku)}) if db_sku != None: base_sku = db.dereference(db_sku['base_sku']) return render.damage_sku( helper.get_session_uname(), helper.get_privilege_name(), db_sku, { 'name': base_sku['name'], 'original': base_sku['original'] }, helper.UNIT_TYPE, (str(db_shop2['_id']), db_shop2['name'], helper.SHOP_TYPE[db_shop2['type']]), helper.get_inventory(ObjectId(user_data.sku), db_shop['shop'])) else: return render.info('错误的参数!') else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER, 'BATCH_JOB'): render = helper.create_render() user_data = web.input(tuan_id='', sheng='') # 查找shop db_shop = helper.get_shop_by_uid() shop_name = helper.get_shop(db_shop['shop']) # 统计线上订单 condition = { 'shop': db_shop['shop'], 'status': 'PAID', 'type': { '$in': ['TUAN', 'SINGLE'] }, # 目前只拼团用 'address.8': re.compile('^%s.*' % user_data.sheng.strip().encode('utf-8')) } db_sale2 = db.order_app.find( condition, { 'order_id': 1, 'paid_time': 1, 'cart': 1, 'type': 1, 'status': 1, 'address': 1, }).sort([('_id', 1)]) r = db.pt_store.find_one({'tuan_id': user_data['tuan_id']}, {'title': 1}) if r: title = r['title'] else: title = 'n/a' skus = [] count = 0 for i in db_sale2: if i['cart'][0]['tuan_id'] != user_data['tuan_id']: continue else: # 只记录知道活动的订单号 skus.append(i['order_id']) count += 1 if count == 100: # 一次只处理100个 break return render.batch_paid(helper.get_session_uname(), helper.get_privilege_name(), skus, len(skus), shop_name, user_data['tuan_id'], title, user_data['sheng']) else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_DELIVERY, 'DELVERY_ORDER'): render = helper.create_render(globals={'str': str}) param = web.input(status='') if param.status == '': return render.info('错误的参数!') # 查找门店 db_shop = helper.get_shop_by_uid() condition = { 'shop': ObjectId(db_shop['shop']), 'runner.uname': helper.get_session_uname(), } if param.status == 'DISPATCH': condition['status'] = 'DISPATCH' elif param.status == 'ONROAD': condition['status'] = 'ONROAD' elif param.status == 'COMPLETE': condition['status'] = 'COMPLETE' else: condition['status'] = { '$nin': ['COMPLETE', 'DISPATCH', 'ONROAD', 'DUE', 'TIMEOUT'] } if param.status in ['COMPLETE']: tday = helper.time_str(format=1) begin_d = '%s 00:00:00' % tday end_d = '%s 23:59:59' % tday begin_t = int( time.mktime(time.strptime(begin_d, "%Y-%m-%d %H:%M:%S"))) end_t = int( time.mktime(time.strptime(end_d, "%Y-%m-%d %H:%M:%S"))) condition['$and'] = [{ 'b_time': { '$gt': begin_t } }, { 'b_time': { '$lt': end_t } }] db_order = db.order_app.find(condition, { 'order_id': 1, 'status': 1, 'address': 1, 'history': 1 }).sort([('_id', 1)]) return render.delivery_order(helper.get_session_uname(), helper.get_privilege_name(), db_order, helper.ORDER_STATUS, param.status) else: raise web.seeother('/')
def POST(self): web.header("Content-Type", "application/json") if helper.logged(helper.PRIV_USER, 'ONLINE_MAN') or helper.logged( helper.PRIV_USER, 'BATCH_JOB'): param = web.input(id='', order_id='') if param.id == '' and param.order_id == '': return json.dumps({'ret': -1, 'msg': '参数错误'}) # 查找门店 db_shop = helper.get_shop_by_uid() condition = { 'shop': db_shop['shop'], 'status': 'DISPATCH', } if len(param.order_id) > 0: condition['order_id'] = param.order_id elif len(param.id) > 0: condition['_id'] = ObjectId(param.id) # 更新订单状态,进入派送 r = db.order_app.find_one_and_update( condition, { '$set': { 'status': 'ONROAD', 'man': 0, #'comment' : '', }, '$push': { 'history': (helper.time_str(), helper.get_session_uname(), '开始派送') } }, { '_id': 1, 'uname': 1 }) if r: # 推送通知 if len(r['uname']) == 11 and r['uname'][0] == '1': jpush.jpush( '水果君&零食君正欢快的向您奔来,准备与他们尽情的玩耍吧!掌柜承诺:19.9元包邮,不满意退款', r['uname']) return json.dumps({ 'ret': 0, 'msg': '开始派送', 'id': str(r['_id']) }) else: return json.dumps({'ret': 3, 'msg': '订单状态不是待配送'}) else: return json.dumps({'ret': -1, 'msg': '无访问权限'})
def GET(self): # 计算盘点数据 if helper.logged(helper.PRIV_USER, 'POS_AUDIT'): render = helper.create_render() user_data = web.input(audit='', cat='2') if user_data.audit == '': return render.info('参数错误!') # 查找shop db_shop = helper.get_shop_by_uid() # 是否还有未结束账期的 db_audit = db.shop_audit.find_one({ '_id': ObjectId(user_data.audit), 'shop': db_shop['shop'], }) if db_audit == None: return render.info('未查到账期数据!') audit_stock = db_audit['stock'].copy() skus = [] for i in audit_stock.keys(): skus.append(audit_stock[i]['sku']) #print skus # 取得sku信息 db_sku = db.sku_store.find({'_id': { '$in': skus }}, { 'unit': 1, 'base_sku': 1 }) tmp_sku = {} for i in db_sku: base_sku = db.dereference(i['base_sku']) tmp_sku[i['_id']] = (base_sku['name'], helper.UNIT_TYPE[i['unit']]) #print tmp_sku if user_data.cat == '1': return render.pos_audit_commit( helper.get_session_uname(), helper.get_privilege_name(), (db_audit['begin_date'], db_audit['end_date']), audit_stock, tmp_sku, (db_audit['revenue'], db_audit['cost'], db_audit['gross'], db_audit['loss'])) else: return render.pos_audit_commit2( helper.get_session_uname(), helper.get_privilege_name(), (db_audit['begin_date'], db_audit['end_date']), audit_stock, tmp_sku, (db_audit['revenue'], db_audit['cost'], db_audit['gross'], db_audit['loss'])) else: raise web.seeother('/')
def POST(self): # 发货处理 if helper.logged(helper.PRIV_USER, 'DELVERY_ORDER'): render = helper.create_render() user_data = web.input(order='', next_status='') if '' in (user_data.order, user_data.next_status): return render.info('参数错误!') # 查找门店 db_shop = helper.get_shop_by_uid() # 更新订单状态,进入派送 r = db.order_app.find_one_and_update( { 'order_id': user_data.order, 'shop': db_shop['shop'], 'status': { '$ne': user_data.next_status }, }, { '$set': { 'status': user_data.next_status, 'man': 0, 'comment': '', }, '$push': { 'history': (helper.time_str(), helper.get_session_uname(), u'状态转换为' + user_data.next_status) } }, { '_id': 1, 'status': 1, 'uname': 1 }) if r: # 推送通知 if len(r['uname']) == 11 and r['uname'][0] == '1': #if user_data.next_status=='DISPATCH': # text = '您的订单已拣货完成,准备派送。' if user_data.next_status == 'ONROAD': text = '您的订单开始派送,请等待收货。' #elif user_data.next_status=='COMPLETE': # text = '您的订单派送成功。' else: text = None if text != None: jpush.jpush(text, r['uname']) return render.info('成功保存!', '/delivery/order?status=' + r['status']) else: raise web.seeother('/')
def POST(self): # 提交订货单,json返回 web.header("Content-Type", "application/json") if helper.logged(helper.PRIV_USER): user_data = web.input(cart='') if user_data.cart == '': return json.dumps({'ret': -1, 'msg': '参数错误'}) # 查找shop db_shop = helper.get_shop_by_uid() #print user_data.cart cart = json.loads(user_data.cart) if len(cart) == 0: return json.dumps({'ret': -1, 'msg': '无数据'}) order = { 'type': 'BOOK', # 订货单 'status': 'WAIT', 'shop_from': '', # 发货点未知 'shop_to': db_shop['shop'], # 收货店 'cart': [], 'history': [(helper.time_str(), helper.get_session_uname(), '建立订货单')] } # item = [ product_id, num, name, cost_price] # k - num 库存数量 # u - num 称重 for item in cart: new_item = { 'product_id': item[0], 'num': item[1], 'name': item[2], 'cost_price': item[3], } # 加入cart order['cart'].append(new_item) db.order_stock.insert_one(order) return json.dumps({ # 返回结果, 'ret': 0, 'data': { 'cart_num': len(order['cart']), } }) else: return json.dumps({'ret': -3, 'msg': '无权限访问'})
def GET(self): if helper.logged(helper.PRIV_USER,'POS_REPORT_USER'): render = helper.create_render(globals={'round':round}) user_data=web.input(start_date='') if user_data['start_date']=='': return render.pos_report_user(helper.get_session_uname(), helper.get_privilege_name()) # 查找shop db_shop = helper.get_shop_by_uid() begin_date = '%s 00:00:00' % user_data['start_date'] end_date = '%s 23:59:59' % user_data['start_date'] #print begin_date, end_date, db_shop['_id'] # 统计销货 db_sale = db.order_offline.find({ 'shop' : db_shop['shop'], 'user' : helper.get_session_uname(), 'status' : 'PAID', '$and' : [{'paid_time' : {'$gt' : begin_date}}, {'paid_time' : {'$lt' : end_date}}], }, {'order_id':1,'due':1,'pay':1,'change':1,'paid_time':1}) # 销货单流水 total = 0.0 count = 0 for i in db_sale: count += 1 total += float(i['due']) # 统计退货 db_return = db.order_return.find({ 'shop' : db_shop['shop'], 'user' : helper.get_session_uname(), '$and' : [{'return_time' : {'$gt' : begin_date}}, {'return_time' : {'$lt' : end_date}}], }, {'total':1,'return_time':1}) # 退货单流水 total2 = 0.0 count2 = 0 for i in db_return: count2 += 1 total2 += float(i['total']) return render.pos_report_user_ret(helper.get_session_uname(), helper.get_privilege_name(), count, total, count2, total2, user_data.start_date) else: raise web.seeother('/')
def POST(self): if helper.logged(helper.PRIV_USER): render = helper.create_render() user_data = web.input(product_id='', weight='') if '' in (user_data.product_id, user_data.weight): return json.dumps({'ret': -1, 'msg': '参数错误'}) # 取得门店id db_shop = helper.get_shop_by_uid() # 报损数量/重量 if user_data['product_id'][2] in ('1', '3'): weight = int(user_data['weight']) else: weight = float(user_data['weight']) db.order_damage.insert_one({ 'shop': db_shop['shop'], 'product_id': user_data['product_id'], 'num': '%.2f' % weight, 'history': [(helper.time_str(), helper.get_session_uname(), '报损操作')], # 纪录操作历史 }) # 调整站点库存, r = db.inventory.update_one( # u-prod { 'shop': db_shop['shop'], 'product_id': user_data['product_id'], }, { '$inc': { 'num': 0 - weight }, # 减少库存 '$push': { 'history': (helper.time_str(), helper.get_session_uname(), '报损操作导致库存减少 %.2f ' % float(weight)) }, }) # 更新第3方库存 2015-10-10 helper.elm_modify_num(db_shop['shop'], user_data['product_id']) return render.info('已报损!数量:%.2f。' % weight, '/pos/inventory') else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER, 'POS_AUDIT'): render = helper.create_render() # 查找shop db_shop = helper.get_shop_by_uid() db_audit = db.shop_audit.find({ 'shop': db_shop['shop'] }).sort([('_id', -1)]) return render.pos_audit(helper.get_session_uname(), helper.get_privilege_name(), db_audit) else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER, 'BATCH_JOB'): render = helper.create_render() user_data = web.input(tuan_id='', status='', sheng='') # 查找shop db_shop = helper.get_shop_by_uid() shop_name = helper.get_shop(db_shop['shop']) # 统计线上订单 condition = { 'shop': db_shop['shop'], 'status': user_data['status'], 'type': { '$in': ['TUAN', 'SINGLE'] }, # 目前只拼团用 'address.8': re.compile('^%s.*' % user_data.sheng.strip().encode('utf-8')) } db_sale2 = db.order_app.find(condition, { 'order_id': 1, 'paid_time': 1, 'cart': 1, 'type': 1, 'status': 1 }) skus = [] title = '' for i in db_sale2: if i['cart'][0]['tuan_id'] != user_data['tuan_id']: continue else: # 只记录知道活动的订单号 skus.append(i['order_id']) title = i['cart'][0].get('title', 'n/a') return render.batch_list(helper.get_session_uname(), helper.get_privilege_name(), skus, len(skus), shop_name, user_data['tuan_id'], title, user_data['status'], user_data['sheng']) else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER, 'ONLINE_MAN'): render = helper.create_render() # 查找门店 db_shop = helper.get_shop_by_uid() shop_name = helper.get_shop(db_shop['shop']) if str(db_shop['shop']) in setting.PT_shop.values(): pt_shop = True else: pt_shop = False print 'pt_shop = ', pt_shop return render.online_man(helper.get_session_uname(), helper.get_privilege_name(), shop_name['name'], pt_shop) else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER, 'POS_PRINT_LABEL'): render = helper.create_render() #user_data=web.input(is_pack='1') # 查找 db_shop = helper.get_shop_by_uid() # 查找店面信息 db_shop2 = helper.get_shop(db_shop['shop']) if db_shop2 == None: return render.info('未找到所属门店!') return render.pos_print_label(helper.get_session_uname(), helper.get_privilege_name(), db_shop2, helper.SHOP_TYPE) else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER,'POS_POS'): render = helper.create_render(plain=True) #user_data=web.input(is_pack='1') # 查找 db_shop = helper.get_shop_by_uid() # 查找店面信息 db_shop2 = helper.get_shop(db_shop['shop']) if db_shop2==None: return render.info('未找到所属门店!') #if db_shop2['type'] not in ['chain', 'store']: # render = helper.create_render() # return render.info('此站点不能线下销售!') return render.pos(helper.get_session_uname(), helper.get_privilege_name(), db_shop2, helper.SHOP_TYPE) else: raise web.seeother('/')
def POST(self): result={'data':[]} if helper.logged(helper.PRIV_USER,'ONLINE_MAN'): # 查找门店 db_shop = helper.get_shop_by_uid() # 查询订单信息 db_todo=db.order_app.find( {'$and': [ {'shop':db_shop['shop']}, {'status' : {'$nin': ['FINISH','DUE','COMPLETE','TIMEOUT', 'CANCEL', 'REFUND']}}, #{'event' : {'$ne':'ORDER_API'}}, {'lock' : 0} ]}, { 'status':1, 'b_time':1, 'e_time':1, 'lock':1, 'runner':1, 'man':1, 'comment':1, 'order_id':1, 'uname':1, 'paid_time':1, 'paid_tick':1 } ).sort([('b_time',1)]) # 先下单的处理 for todo in db_todo: #start_tick = int(time.mktime(time.strptime(todo['trainStartTime'],"%Y-%m-%d %H:%M"))) if todo['status'] in ['FAIL','PREPAID','CANCEL4','CANCEL3','CANCEL2','CANCEL1'] \ and int(time.time())-todo['b_time']>172800: continue result['data'].append({ 'id' : str(todo['_id']), 'status' : todo['status'], #'elapse' : int(time.time())-todo.get('paid_tick',int(time.time())), #todo['e_time']-todo['b_time'], 'lock' : todo['lock'], 'man' : todo['man'], 'user' : todo['uname'], 'comment' : todo['comment'], 'orderNo' : todo['order_id'], 'runner' : todo['runner'] if todo.has_key('runner') else '', 'paid_time' : todo.get('paid_time', 'n/a'), #'urgent' : 1 if todo.has_key('paid_tick') and (int(time.time()-todo['paid_tick']))/3600>1 else 0, }) result['num']=len(result['data']) #print result web.header("Content-Type", "application/json") return json.dumps(result)
def GET(self): if helper.logged(helper.PRIV_USER, 'POS_INVENTORY'): render = helper.create_render() user_data = web.input(product_id='') if user_data.product_id == '': return render.info('错误的参数!') # 查找shop db_shop = helper.get_shop_by_uid() # 查找店面信息 db_shop2 = helper.get_shop(db_shop['shop']) if db_shop2 == None: return render.info('未找到所属门店!') db_invent = db.inventory.find_one({ 'product_id': user_data.product_id, 'shop': db_shop2['_id'] }) if db_invent: db_sku = db.sku_store.find_one({'_id': db_invent['sku']}) if db_sku: base_sku = db.dereference(db_sku['base_sku']) return render.pos_invent_sku( helper.get_session_uname(), helper.get_privilege_name(), db_sku, db_invent, helper.UNIT_TYPE[db_sku['unit']], (base_sku['name'], base_sku['original'], base_sku['image'][0] if base_sku.has_key('image') and len(base_sku['image']) > 0 else ''), (str(db_shop2['_id']), db_shop2['name'], helper.SHOP_TYPE[db_shop2['type']]), user_data.product_id[0] == 'w', helper.CATEGORY) else: return render.info('未查到sku!') else: return render.info('未查到库存!') else: raise web.seeother('/')
def POST(self): # 修改盘点数量,json 返回 web.header("Content-Type", "application/json") if helper.logged(helper.PRIV_USER, 'POS_AUDIT'): user_data = web.input(product_id='', audit_num='') # if user_data.product_id == '': return json.dumps({'ret': -1, 'msg': '参数错误'}) # 查找shop db_shop = helper.get_shop_by_uid() if user_data.product_id[0] != 'w' and user_data.product_id[ 2] == '2': # 称重sku,可能会是浮点数 audit_num = float(user_data.audit_num) else: audit_num = int(user_data.audit_num) r = db.inventory.update_one( { 'product_id': user_data.product_id, 'shop': db_shop['shop'], }, { '$set': { 'audit': audit_num }, '$push': { 'history': (helper.time_str(), helper.get_session_uname(), '记录盘点数量为 %.2f' % float(audit_num)) }, }) if r.matched_count > 0: return json.dumps({'ret': 0, 'num': audit_num}) else: return json.dumps({'ret': -1, 'msg': '未找到库存数据!'}) else: return json.dumps({'ret': -3, 'msg': '无权限访问'})
def POST(self): if helper.logged(helper.PRIV_USER): render = helper.create_render() user_data = web.input(product_id='', weight='', price='', return_price='') if '' in (user_data.return_price, user_data.product_id, user_data.weight, user_data.price): return json.dumps({'ret': -1, 'msg': '参数错误'}) # 取得门店id db_shop = helper.get_shop_by_uid() # 计算退货金额 if user_data['product_id'][2] in ('1', '3'): weight = int(user_data['weight']) else: weight = float(user_data['weight']) weight_price = weight * float( user_data['return_price']) # 按实际退货价格计算金额 db.order_return.insert_one({ 'shop': db_shop['shop'], 'user': helper.get_session_uname(), 'product_id': user_data['product_id'], 'price': user_data['price'], # 退货时售价,记录参考 'return_price': user_data['return_price'], # 实际退货价格 'num': '%.2f' % weight, 'total': '%.2f' % weight_price, 'return_time': helper.time_str(), 'history': [(helper.time_str(), helper.get_session_uname(), '退货操作')], # 纪录操作历史 }) # 调整站点库存, 不调整u-prod库存,销货时再调整 r = db.inventory.update_one( # u-prod { 'shop': db_shop['shop'], 'product_id': user_data['product_id'], }, { '$inc': { 'num': weight }, # 增加库存 '$push': { 'history': (helper.time_str(), helper.get_session_uname(), '退货操作导致库存变化 %.2f ' % float(weight)) }, }) # 更新第3方库存 2015-10-10 helper.elm_modify_num(db_shop['shop'], user_data['product_id']) return render.info('已退货!退款总金额:%.2f 元。' % weight_price, '/pos/inventory') else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER, 'BATCH_JOB'): render = helper.create_render() #user_data=web.input(start_date='', shop='__ALL__') # 查找shop db_shop = helper.get_shop_by_uid() shop_name = helper.get_shop(db_shop['shop']) # 统计线上订单 condition = { 'shop': db_shop['shop'], 'status': { '$in': ['PAID', 'DISPATCH', 'ONROAD'] }, 'type': { '$in': ['TUAN', 'SINGLE'] }, # 只拼团用 } db_sale2 = db.order_app.find( condition, { 'order_id': 1, 'paid_time': 1, 'cart': 1, 'type': 1, 'status': 1, 'address': 1, }) skus = {} for i in db_sale2: # 区分省份 sheng = i['address'][8].split(',')[0] if len( i['address']) >= 9 else u'未知' if skus.has_key(i['cart'][0]['tuan_id']): if skus[i['cart'][0]['tuan_id']].has_key(sheng): skus[i['cart'][0]['tuan_id']][sheng]['num'] += 1 skus[i['cart'][0]['tuan_id']][sheng]['paid'] += ( 1 if i['status'] == 'PAID' else 0) skus[i['cart'][0]['tuan_id']][sheng]['dispatch'] += ( 1 if i['status'] == 'DISPATCH' else 0) skus[i['cart'][0]['tuan_id']][sheng]['onroad'] += ( 1 if i['status'] == 'ONROAD' else 0) else: skus[i['cart'][0]['tuan_id']][sheng] = {} skus[i['cart'][0]['tuan_id']][sheng]['num'] = 1 skus[i['cart'][0]['tuan_id']][sheng]['paid'] = ( 1 if i['status'] == 'PAID' else 0) skus[i['cart'][0]['tuan_id']][sheng]['dispatch'] = ( 1 if i['status'] == 'DISPATCH' else 0) skus[i['cart'][0]['tuan_id']][sheng]['onroad'] = ( 1 if i['status'] == 'ONROAD' else 0) else: r = db.pt_store.find_one( {'tuan_id': i['cart'][0]['tuan_id']}, {'title': 1}) if r: title = r['title'] else: title = 'n/a' skus[i['cart'][0]['tuan_id']] = { 'name': title, 'tuan_id': i['cart'][0]['tuan_id'], } skus[i['cart'][0]['tuan_id']][sheng] = { 'num': 1, # 要包含送的 'paid': 1 if i['status'] == 'PAID' else 0, # 已付款,待拣货的, 拼团用 'dispatch': 1 if i['status'] == 'DISPATCH' else 0, # 已付款,待配送, 拼团用 'onroad': 1 if i['status'] == 'ONROAD' else 0, # 已付款,配送中, 拼团用 } total_sum = {} for i in skus.keys(): for j in skus[i].keys(): if j in ['name', 'tuan_id']: continue if total_sum.has_key(j): total_sum[j]['paid'] += skus[i][j]['paid'] total_sum[j]['dispatch'] += skus[i][j]['dispatch'] total_sum[j]['onroad'] += skus[i][j]['onroad'] else: total_sum[j] = {} total_sum[j]['paid'] = skus[i][j]['paid'] total_sum[j]['dispatch'] = skus[i][j]['dispatch'] total_sum[j]['onroad'] = skus[i][j]['onroad'] return render.batch_job(helper.get_session_uname(), helper.get_privilege_name(), skus, shop_name['name'], total_sum) else: raise web.seeother('/')
def POST(self): web.header("Content-Type", "application/json") if helper.logged(helper.PRIV_USER): user_data = web.input(sku='', product_id='', weight='', price='') if '' in (user_data.sku, user_data.product_id, user_data.weight, user_data.price): return json.dumps({'ret': -1, 'msg': '参数错误'}) # 检查用户是否有此店权限 db_shop = helper.get_shop_by_uid() #if str(db_shop['shop'])!=user_data.shop: # return json.dumps({'ret' : -1, 'msg' : '无站点管理权限!'}) #db_sku=db.sku_store.find_one({'product_id':user_data.product_id},{'product_id':1}) #if db_sku==None: # return json.dumps({'ret' : -1, 'msg' : '参数错误'}) # 取得sku计数 db_wt = db.user.find_one_and_update({'uname': 'settings'}, {'$inc': { 'wt_count': 1 }}, {'wt_count': 1}) new_prod_id = 'w%06d' % db_wt['wt_count'] # 计算价格 weight = float(user_data['weight']) weight_price = weight * float(user_data['price']) db.inventory.insert_one({ 'sku': ObjectId(user_data.sku), 'shop': db_shop['shop'], 'product_id': new_prod_id, 'ref_prod_id': user_data.product_id, 'price': user_data['price'], 'cost_price': '', # w-prod 不记录成本价,实际计算在u-prod中 'weight': '%.2f' % weight, 'online': 1, # 默认 上架 'num': 1, 'audit': -1, 'total': '%.2f' % weight_price, 'weight_time': helper.time_str(), # 称重时间,方便盘点统计 'history': [(helper.time_str(), helper.get_session_uname(), '新建库存为 1')], # 纪录操作历史 }) # 调整站点库存, 不调整u-prod库存,销货时再调整 #r = db.inventory.update_one( # u-prod # { # 'shop' : ObjectId(user_data.shop), # 'product_id' : user_data.product_id, # }, # { # '$inc' : { 'num' : 0-weight}, # '$push' : { 'history' : (helper.time_str(), helper.get_session_uname(), '称重操作导致库存变化 %.2f ' % (0-weight))}, # } #) # 查询库存 #r = db.inventory.find_one({ # u-prod # 'sku' : ObjectId(user_data.sku), # 'shop' : ObjectId(user_data.shop), # 'product_id' : db_sku['product_id'], #}, {'num':1}) return json.dumps({ # 返回结果, 'ret': 0, 'data': { 'product_id': new_prod_id, 'weight': '%.2f' % weight, 'total': '%.2f' % weight_price, 'price': user_data['price'], #'invent_num' : '%.2f' % r['num'] # 剩余库存 } }) else: return json.dumps({'ret': -3, 'msg': '无权限访问'})
def GET(self): if helper.logged(helper.PRIV_USER, 'POS_INVENTORY'): #render = helper.create_render() # 查找shop db_shop = helper.get_shop_by_uid() # 取得 w-prod 的对应 u-prod 及其他信息 db_invent = db.inventory.find( { 'shop': db_shop['shop'], 'product_id': { '$regex': 'w.*', '$options': 'i' }, 'num': { '$gt': 0 }, }, { 'ref_prod_id': 1, 'product_id': 1, 'weight': 1 }) u_prod_id = [] w_prod_id = [] for i in db_invent: u_prod_id.append(i['ref_prod_id']) w_prod_id.append( (i['product_id'], i['weight'], i['ref_prod_id'])) #print u_prod_id # 取得 对应 u-prod 的单价 db_invent2 = db.inventory.find( { 'shop': db_shop['shop'], 'product_id': { '$in': u_prod_id }, }, { 'price': 1, 'product_id': 1 }) new_price = {} for i in db_invent2: new_price[i['product_id']] = i['price'] #print new_price # 更新 w-prod 的单价和称重售价 for i in w_prod_id: db.inventory.update_one( { 'product_id': i[0], 'shop': db_shop['shop'], }, { '$set': { 'price': new_price[i[2]], 'total': '%.2f' % (float(i[1]) * float(new_price[i[2]])) }, '$push': { 'history': (helper.time_str(), helper.get_session_uname(), '价格修改为 %s' % str(new_price[i[2]])) }, }) raise web.seeother('/pos/inventory?is_pack=w&show=1') else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER): render = helper.create_render() user_data=web.input() # 查找 db_shop = helper.get_shop_by_uid() # 查找店面信息 db_shop2 = helper.get_shop(db_shop['shop']) if db_shop2==None: return render.info('未找到所属门店!') # 查找所属店铺库存 包装库存 # 模糊查询,以k开头 {'$regex':'k.*','$options': 'i'} condition = { 'shop' : db_shop['shop'], 'product_id' : { '$not': re.compile('^w.*') }, } db_invent = db.inventory.find(condition, { 'sku' : 1, 'online' : 1, #'price' : 1, #'cost_price' : 1, #'weight' : 1, #'total' : 1, 'product_id' : 1, 'num' : 1 }).sort([('product_id',1)]) invent = [] skus = [] for s in db_invent: skus.append(s['sku']) invent.append(( s['sku'], #0 s['online'], #1 #(s['price'], s['cost_price']), #s['weight'], #s['total'] if s.has_key('total') else '', s['product_id'], #2 s['num'], #3 )) # 包装的、有效的sku db_sku=db.sku_store.find({'_id':{'$in':skus}} ,{ 'product_id' : 1, 'base_sku' : 1, #'note' : 1, #'online' : 1, 'is_pack' : 1, 'unit' : 1, #'unit_num' : 1, #'ref_price' : 1, 'app_title' : 1, 'ref_cost' : 1 }).sort([('_id',1)]) skus = {} for u in db_sku: base_sku = db.dereference(u['base_sku']) skus[u['_id']]=( base_sku['name'] if len(u['app_title'].strip())==0 else u['app_title'], #4 #u['note'], # #base_sku['image'][0] if base_sku.has_key('image') and len(base_sku['image'])>0 else '', #'', # helper.UNIT_TYPE[u['unit']], #5 u['is_pack'], #6 u['ref_cost'], #7 base_sku['original'], #8 ) data = [] for i in invent: # 准备数据 data.append(i + skus[i[0]]) return render.pos_order_new2(helper.get_session_uname(), helper.get_privilege_name(), data, (str(db_shop2['_id']), db_shop2['name'], helper.SHOP_TYPE[db_shop2['type']])) else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER): render = helper.create_render() # 查找 db_shop = helper.get_shop_by_uid() # 查找店面信息 db_shop2 = helper.get_shop(db_shop['shop']) if db_shop2 == None: return render.info('未找到所属门店!') # 查找所属店铺库存 db_invent = db.inventory.find( { 'product_id': { '$not': re.compile('^w.*') }, 'shop': db_shop['shop'], }, { 'sku': 1, 'online': 1, 'price': 1, 'product_id': 1 }) invent = {} for s in db_invent: if s['product_id'][2] in ('1', '3'): # 只记录散进散出 continue invent[s['sku']] = (s['online'], s['price']) # 散装、有效的sku db_sku = db.sku_store.find( { '_id': { '$in': invent.keys() } }, { 'product_id': 1, 'base_sku': 1, 'note': 1, #'online' : 1, 'is_pack': 1, 'unit': 1, #'unit_num' : 1, #'ref_price' : 1, }).sort([('_id', 1)]) skus = [] for u in db_sku: base_sku = db.dereference(u['base_sku']) # 准备数据 skus.append(( u['_id'], base_sku['name'], u['note'], invent[u['_id']][0], base_sku['image'][0] if base_sku.has_key('image') and len(base_sku['image']) > 0 else '', '', helper.UNIT_TYPE[u['unit']], u['is_pack'], invent[u['_id']][1], u['product_id'], )) return render.weight(helper.get_session_uname(), helper.get_privilege_name(), skus, (str(db_shop2['_id']), db_shop2['name'], helper.SHOP_TYPE[db_shop2['type']])) else: raise web.seeother('/')
def POST(self): if helper.logged(helper.PRIV_USER): render = helper.create_render() user_data = web.input(order='', order_type='', next_status='') if '' in (user_data.order, user_data.order_type, user_data.next_status): return render.info('参数错误!') # 查找所属shop db_shop = helper.get_shop_by_uid() # 只处理确认收货的操作,其他不处理 if user_data.next_status != 'CONFIRM' or user_data.order_type not in ( 'SEND', 'BOOK'): # 确认收货 return render.info('无需操作!', '/pos/order') # 取得工单数据 db_order = db.order_stock.find_one( { '_id': ObjectId(user_data.order), 'shop_to': db_shop['shop'] }, { 'shop_to': 1, 'cart': 1, 'status': 1 }) if db_order == None: return render.info('未找到订单数据!') if db_order['status'] == user_data.next_status: return render.info('不能重复确认订单!') new_cart = [] for i in db_order['cart']: # 增加门店库存 #new_num = round(float(i['num']), 2) if i['product_id'][2] in ('1', '3'): new_num = int(user_data['recv_' + i['product_id']]) else: new_num = round( float(user_data['recv_' + i['product_id']]), 2) r = db.inventory.find_one_and_update( { 'product_id': i['product_id'], 'shop': db_order['shop_to'], }, { '$inc': { 'num': new_num }, #'$set' : { 'cost_price' : '%.2f' % avg_price}, '$push': { 'history': (helper.time_str(), helper.get_session_uname(), '收货 %.2f ' % new_num) }, }, { 'num': 1, 'cost_price': 1 }) # 更新第3方库存 2015-10-10 helper.elm_modify_num(db_order['shop_to'], i['product_id']) if r == None: # 门店新sku db_sku = db.sku_store.find_one( {'product_id': i['product_id']}, { 'ref_price': 1, 'list_in_app': 1, 'sort_weight': 1, 'category': 1, 'available': 1, }) db.inventory.insert_one({ 'sku': db_sku['_id'], 'shop': db_order['shop_to'], 'product_id': i['product_id'], 'price': db_sku['ref_price'], 'cost_price': i['cost_price'], 'weight': 0, 'online': db_sku['available'], 'num': new_num, 'audit': -1, 'list_in_app': db_sku['list_in_app'], 'sort_weight': db_sku['sort_weight'], 'category': db_sku['category'], 'history': [(helper.time_str(), helper.get_session_uname(), '新建库存 %.2f' % new_num)], # 纪录操作历史 }) #return render.info('未找到库存数据!') else: # 计算新的评价价格 (移动平均价) # 注意:虽然与上面update不是原子操作,但不会导致价格计算不精确 sum_num = r['num'] + new_num sum_price = float(r['cost_price']) * r['num'] + float( i['cost_price']) * new_num if sum_num <= 0: # 新库存可能为零, 为零或负库存时,不修改移动评价价 2015-08-26 avg_price = float(r['cost_price']) else: avg_price = sum_price / sum_num # 新成本价格更新到db db.inventory.update_one( { 'product_id': i['product_id'], 'shop': db_order['shop_to'], }, {'$set': { 'cost_price': '%.2f' % avg_price }}) new_cart.append({ 'product_id': i['product_id'], 'num': i['num'], 'send_num': i['send_num'], 'recv_num': new_num, 'name': i['name'], 'cost_price': i['cost_price'], }) # 工单在途数量清零 db.order_stock.update_one( {'_id': ObjectId(user_data.order)}, { '$set': { 'cart': new_cart, #'num_onroad' : 0, 'status': user_data.next_status, 'confirm_time': helper.time_str(), # 确认收货时间,方便盘点 }, '$push': { 'history': (helper.time_str(), helper.get_session_uname(), '状态变为 %s' % user_data.next_status.encode('utf-8')) }, }) #return render.info('成功保存!','/pos/order') raise web.seeother('/pos/order_view?order=' + user_data.order) else: raise web.seeother('/')
def GET(self): if helper.logged(helper.PRIV_USER): render = helper.create_render(globals={'str': str}) user_data = web.input(order='') if user_data.order == '': return render.info('错误的参数!') # 查找所属shop db_shop = helper.get_shop_by_uid() # 查询工单信息 db_order = db.order_stock.find_one({ '_id': ObjectId(user_data.order), '$or': [ { 'type': 'SEND', 'shop_to': db_shop['shop'] }, # 发货单 { 'type': 'BOOK', 'shop_to': db_shop['shop'] } # 订货单 ] }) if db_order == None: return render.info('order错误的参数!') # 查询 站点信息 db_shop2 = db.base_shop.find( {'_id': { '$in': [db_order['shop_from'], db_order['shop_to']] }}, { 'name': 1, 'type': 1 }) shops = {} for s in db_shop2: shops[s['_id']] = '%s(%s)' % (s['name'].encode('utf-8'), helper.SHOP_TYPE[s['type']]) # 所有product_id p_id = [] for i in db_order['cart']: p_id.append(i['product_id']) # 查询 sku信息 db_sku = db.sku_store.find({'product_id': { '$in': p_id }}, { 'product_id': 1, 'unit': 1, 'is_pack': 1 }) skus = {} for i in db_sku: skus[i['product_id']] = ( i['is_pack'], helper.UNIT_TYPE[i['unit']], ) next_status = None # 发货单 if db_order['type'] == 'SEND': # 简单处理阶段,直接到店 if db_order['status'] == 'ONSHOP': next_status = 'CONFIRM' # 订货单 elif db_order['type'] == 'BOOK': if db_order['status'] == 'ONSHOP': next_status = 'CONFIRM' return render.pos_order_view(helper.get_session_uname(), helper.get_privilege_name(), db_order, skus, shops, helper.ORDER_STATUS, next_status, db_order['history']) else: raise web.seeother('/')
def POST(self): # 新账期,json 返回 web.header("Content-Type", "application/json") if helper.logged(helper.PRIV_USER, 'POS_AUDIT'): user_data = web.input(cate='') # 2- 当前时间开始, 1 - 接最近一个结束账期 if user_data.cate == '': return json.dumps({'ret': -1, 'msg': '参数错误'}) # 查找shop db_shop = helper.get_shop_by_uid() # 是否还有未结束账期的 db_audit = db.shop_audit.find_one( { 'shop': db_shop['shop'], 'status': 'OPEN' }, {'_id': 1}) if db_audit: return json.dumps({'ret': -1, 'msg': '尚有未结束的账期!'}) begin_date = helper.time_str() begin_stock = [] if user_data.cate == '1': # 接上一个账期,用最近一个账期数据做期初数据 db_audit = db.shop_audit.find( { 'shop': db_shop['shop'], 'status': 'CLOSE' }, { 'end_date': 1, 'stock': 1 }).sort([('end_date', -1)]) if db_audit.count() == 0: #return json.dumps({'ret' : -1, 'msg' : '未找到最近的盘点数据!'}) # 当前时间开始账期,用当前库存做期初数据 db_invent = db.inventory.find( { 'shop': db_shop['shop'], 'num': { '$gt': 0 }, }, { 'product_id': 1, 'num': 1, 'sku': 1, 'weight': 1 }) #print db_invent.count() skus = [] tmp_stock = [] for i in db_invent: tmp_stock.append( (i['product_id'], i['num'], i['weight'], i['sku'])) skus.append(i['sku']) # 找参考成本价,使用sku的参考成本 tmp_price = {} db_sku = db.sku_store.find({'_id': { '$in': skus }}, {'ref_price': 1}) for i in db_sku: tmp_price[i['_id']] = i['ref_price'] begin_stock = {} for i in tmp_stock: begin_stock[i[0]] = { 'begin': (tmp_price[i[3]], i[1]), } else: begin_date = db_audit[0]['end_date'] # 将最近一次盘点数据作为新的期初数据 # { # 'k00001' : { # 'begin' : (<ref_price>, <num>), # 'end' : (<ref_price>, <num>), # 'audit' : (<ref_price>, <num>), # 'receive' : (<ref_price>, <num>), # 'weight' : (<ref_price>, <num>), # 只有 u-prod 有意义 # } #} begin_stock = {} for i in db_audit[0]['stock'].keys(): begin_stock[i] = { 'begin': db_audit[0]['stock'][i]['audit'] } else: # 当前时间开始账期,用当前库存做期初数据 db_invent = db.inventory.find( { 'shop': db_shop['shop'], 'num': { '$gt': 0 }, }, { 'product_id': 1, 'num': 1, 'sku': 1, 'weight': 1 }) #print db_invent.count() skus = [] tmp_stock = [] for i in db_invent: if i['product_id'][0] == 'w': continue tmp_stock.append( (i['product_id'], i['num'], i['weight'], i['sku'])) skus.append(i['sku']) # 找参考成本价,使用sku的参考成本 tmp_price = {} db_sku = db.sku_store.find({'_id': { '$in': skus }}, {'ref_price': 1}) for i in db_sku: tmp_price[i['_id']] = i['ref_price'] begin_stock = {} for i in tmp_stock: begin_stock[i[0]] = { 'begin': (tmp_price[i[3]], i[1]), } # 添加新账期 db.shop_audit.insert({ 'shop': db_shop['shop'], 'status': 'OPEN', 'begin_date': begin_date, 'end_date': '', 'stock': begin_stock, }) # 初始化sku盘点数据,-1表示为未盘点 db.inventory.update_many({'shop': db_shop['shop']}, {'$set': { 'audit': -1 }}) return json.dumps({'ret': 0, 'msg': '操作完成'}) else: return json.dumps({'ret': -3, 'msg': '无权限访问'})
def GET(self): if helper.logged(helper.PRIV_USER, 'POS_AUDIT'): render = helper.create_render() user_data = web.input(is_pack='k') is_pack = user_data['is_pack'] # 分3类: u-散称sku, k-包装sku,w-已称重sku if is_pack not in ('k', 'u', 'w'): return render.info('错误的参数!') # 查找 db_shop = helper.get_shop_by_uid() # 查找店面信息 db_shop2 = helper.get_shop(db_shop['shop']) if db_shop2 == None: return render.info('未找到所属门店!') # 查找所属店铺库存 包装库存 # 模糊查询,以k开头 {'$regex':'k.*','$options': 'i'} condition = { 'shop': db_shop['shop'], 'product_id': { '$not': re.compile('^w.*') }, } # 称重sku忽略已售出的 num==0 if is_pack == 'w': condition['product_id'] = {'$regex': 'w.*', '$options': 'i'} condition['num'] = {'$ne': 0} # 查询db db_invent = db.inventory.find( condition, { 'sku': 1, 'online': 1, 'price': 1, 'weight': 1, 'total': 1, 'product_id': 1, 'num': 1, 'audit': 1, }).sort([('product_id', 1)]) invent = [] skus = [] for s in db_invent: skus.append(s['sku']) invent.append(( s['sku'], #0 s['online'], #1 s['price'], #2 s['weight'], #3 s['total'] if s.has_key('total') else '', #4 s['product_id'], #5 s['num'], #6 s['audit'], #7 )) # 包装的、有效的sku db_sku = db.sku_store.find( { '_id': { '$in': skus } }, { 'product_id': 1, 'base_sku': 1, #'note' : 1, #'online' : 1, 'is_pack': 1, 'unit': 1, 'app_title': 1, #'unit_num' : 1, 'ref_price': 1, }).sort([('_id', 1)]) skus = {} for u in db_sku: base_sku = db.dereference(u['base_sku']) skus[u['_id']] = ( base_sku['name'] if len(u['app_title'].strip()) == 0 else u['app_title'], #8 '', #9 helper.UNIT_TYPE[u['unit']], #10 u['is_pack'], #11 u['ref_price'], #12 ) data = [] for i in invent: # 准备数据 data.append(i + skus[i[0]]) return render.pos_audit_sku( helper.get_session_uname(), helper.get_privilege_name(), data, (str(db_shop2['_id']), db_shop2['name'], helper.SHOP_TYPE[db_shop2['type']]), is_pack) else: raise web.seeother('/')