Exemplo n.º 1
0
    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': '无权限访问'})
Exemplo n.º 2
0
    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': '无权限访问'})
Exemplo n.º 3
0
    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('/')
Exemplo n.º 4
0
    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('/')
Exemplo n.º 5
0
    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('/')
Exemplo n.º 6
0
    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('/')
Exemplo n.º 7
0
    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': '无访问权限'})
Exemplo n.º 8
0
    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('/')
Exemplo n.º 9
0
    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('/')
Exemplo n.º 10
0
    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': '无权限访问'})
Exemplo n.º 11
0
	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('/')
Exemplo n.º 12
0
    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('/')
Exemplo n.º 13
0
    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('/')
Exemplo n.º 14
0
    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('/')
Exemplo n.º 15
0
    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('/')
Exemplo n.º 16
0
    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('/')
Exemplo n.º 17
0
Arquivo: pos.py Projeto: jack139/fair
	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('/')
Exemplo n.º 18
0
	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)
Exemplo n.º 19
0
    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('/')
Exemplo n.º 20
0
    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': '无权限访问'})
Exemplo n.º 21
0
    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('/')
Exemplo n.º 22
0
    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('/')
Exemplo n.º 23
0
    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': '无权限访问'})
Exemplo n.º 24
0
    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('/')
Exemplo n.º 25
0
	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('/')
Exemplo n.º 26
0
    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('/')
Exemplo n.º 27
0
    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('/')
Exemplo n.º 28
0
    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('/')
Exemplo n.º 29
0
    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': '无权限访问'})
Exemplo n.º 30
0
    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('/')