async def form(*, id, name, indate, invoice): action = '添加' indates = indate.split(' - ') if not indates or len(indates) != 2: return returnData(0, action, '日期格式错误') info = dict( name=name.strip(), indate_start=indates[0].strip(), indate_end=indates[1].strip(), invoice=re.sub(r"\s{5,}", '\n', invoice.strip()) # 超过5个以上的空格替换成换行符 ) if id.isdigit() and int(id) > 0: action = '编辑' info['id'] = id rows = await Client(**info).save() # 如果编辑成功,则修改发票管理中未处理的发票开票信息 await updateInvoiceInfo(rows, id, info['invoice']) return returnData(rows, action)
async def login(*, account, passwd): email = account if not email: raise ValueError('email', 'Invalid email.') if not passwd: raise ValueError('passwd', 'Invalid password.') whereu = "email = '%s'" % (email) users = await Users.findAll(where=whereu) users = obj2str(users) if len(users) != 1: logging.info("no such user or more than one") return returnData(0, "密码错误,") user = users[0] if user.passwd != passwd: return returnData(0, "密码错误,") r = web.Response() r.set_cookie(COOKIE_NAME, user2cookie(user, 86400), max_age=86400, httponly=True) user.passwd = "******" user.msg = "登陆成功" user.status = 1 r.content_type = 'application/json' r.body = json.dumps(user, ensure_ascii=False).encode('utf-8') return r
async def detail(*, id=0): """获得收入报表详情 """ res = { 'status': 1, 'msg': '查询成功', 'info': [] } if not id: return returnData(0, '查询', '收入ID不存在') sql = "SELECT i.income_id, i.`aff_date`, i.`money`, i.money_status,i.inv_status,i.cost, \ c.`name` company_name, c.`invoice` FROM income i \ INNER JOIN `client` c ON i.`client_id` = c.`id` \ where i.id = %s" % id info = await Income.query(sql) if not info: return returnData(0, '查询') res['info'] = obj2str((info))[0] res['info']['money_status_text'] = moneyStatusMap[res['info']['money_status']] res['info']['inv_status_text'] = invStatusMap[res['info']['inv_status']] return res
async def info(*, id=0): id = int(id) if not id: return returnData(0, '查询', 'ID不存在') sql = "SELECT s.id,s.client_id, s.income_id,s.balance,s.pay_company, s.stype, i.aff_date,i.money,i.money_status,i.cost, i.inv_status, c.invoice,c.name company_name \ FROM settlement s \ INNER JOIN income i ON s.`income_id` = i.`id` \ INNER JOIN `client` c ON s.`client_id` = c.`id` \ WHERE s.id= %s" % id info = await Settlement.query(sql) if not info: return returnData(0, '查询') res = returnData(1, '查询') res['info'] = obj2str((info))[0] # 收入状态 res['info']['money_status_text'] = income.moneyStatusMap[res['info'] ['money_status']] res['info']['inv_status_text'] = income.invStatusMap[res['info'] ['inv_status']] # 结算比例 rate = round(res['info']['balance'] / res['info']['money'] * 100, 3) res['info']['rate'] = "%s%%" % rate return res
async def login(*, account, passwd): email = account passwd = passwd.strip() if not email: return returnData(0, "认证") if not passwd: return returnData(0, "认证") whereu = "email = '%s'" % (email) try: users = await Users.findAll(where=whereu) except: return returnData(0, "认证") users = obj2str(users) if len(users) == 1: user = users[0] if user.passwd == passwd: r = web.Response() r.set_cookie(COOKIE_NAME, user2cookie(user, 86400), max_age=86400, httponly=True) user.passwd = "******" user.msg = "登陆成功" user.status = 1 r.content_type = 'application/json' r.body = json.dumps(user, ensure_ascii=False).encode('utf-8') return r else: return returnData(0, "认证") else: return returnData(0, "认证")
async def delete(*, id): if not id.isdigit() or int(id) <= 0: return returnData(0, '删除', '缺少请求参数') rows = await Invoice.delete(id) return returnData(rows, '删除')
async def delete(*, id): action = '删除' if not id.isdigit() or int(id) <= 0: return returnData(0, action, '缺少请求参数') rows = await Settlement.delete(id) return returnData(rows, action)
async def invoiceApply_comment_form(*,id,comments): id = int(id) invoice = await Invoice.find(id) invoice["comments"] = comments.strip() rows = await Invoice(**invoice).update() if rows == 1: return returnData(1,"备注") else: return returnData(0,"备注")
async def invoice_identify(*, id): if id: income = await Income.find(int(id)) income["inv_status"] = 2 rows = await Income(**income).update() if rows == 1: return returnData(1, "已开票操作") else: return returnData(0, "已开票操作") else: return returnData(0, "请求")
async def setrule(*, id=None, rules=None): action = '配置权限' if not id or not rules: return returnData(0, action, '缺少参数') oldInfo = await Role.find(id) oldInfo['rules'] = rules rows = await Role(**oldInfo).save() return returnData(rows, action)
async def delete(*, id): action = '删除' if not id.isdigit() or int(id) <= 0: return returnData(0, action, '缺少请求参数') count = await Rule.findNumber('count(*)', where="pid = %s" % id) if count > 0: return returnData(0, action, '请先删除子菜单') rows = await Rule.delete(id) return returnData(rows, action)
async def delete(*, id): action = '删除' if not id.isdigit() or int(id) <= 0: return returnData(0, action, '缺少请求参数') count = await Users.findNumber('count(*)', where="role = %s" % id) if count > 0: return returnData(0, action, '请先删除属于该角色的用户') rows = await Role.delete(id) return returnData(rows, action)
async def delete(*, id): if not id.isdigit() or int(id) <= 0: return returnData(0, '删除', '缺少请求参数') where = " id = %s " % (id) try: users = await Users.findAll(where=where) user = users[0] user.is_delete = 1 rows = await Users(**user).update() if rows == 1: return returnData(1, "删除") except Exception as e: return returnData(0, "删除")
async def delete(*, id): if not id.isdigit() or int(id) <= 0: return returnData(0, '删除', '缺少请求参数') try: rows = await Syslogs.delete(id) msg = None except Exception as e: rows = 0 msg = "请先删除收入报表中有关该客户的记录" return returnData(rows, '删除', msg)
async def form(*, id=0, income_id=''): action = '添加' income_ids = income_id income_id = '' if not income_ids: return returnData(0, action, '请选择收入ID') # 判断该收入ID是否添加过发票信息 rs = await Invoice.findNumber(selectField="count(*)", where="income_id in (%s)" % income_ids) if rs: return returnData(0, action, '收入ID已存在') # 如果是多个收入ID, 判断是否属于同一家公司 rs = await Income.findCols("client_id", "id in (%s)" % income_ids, groupBy="client_id") if len(rs) > 1: return returnData(0, action, '收入ID不属于同一家公司,不能开一张票') # 获得收入信息 income_id_arr = income_ids.split(',') incomeInfo = None for income_id in income_id_arr: rs = await income.detail(id=income_id) if not incomeInfo: incomeInfo = rs['info'] else: incomeInfo['money'] += rs['info']['money'] if id.isdigit() and int(id) > 0: action = '编辑' info = Invoice.find(id) info['income_id'] = income_ids info['inv_money'] = incomeInfo['money'] info['info'] = incomeInfo['invoice'] else: info = dict(income_id=income_ids, inv_money=incomeInfo['money'], info=incomeInfo['invoice']) rows = await Invoice(**info).save() if rows == 1: return returnData(1, action) else: return returnData(0, action)
async def form(*, id=0, income_id=0, client_id=0, balance=0, stype=0, pay_company=''): action = '添加' balance = float(balance) if int(income_id) == 0: return returnData(0, action, '请选择收入ID') # 获得该收入单的渠道成本 # 结算的金额不能超过渠道成本 totalMoney = await Income.findNumber('cost', where="id=%s" % income_id) or 0 totalMoney = float(totalMoney) # 获得已结算的金额 settMoney = await Settlement.findNumber( 'sum(balance)', where="income_id=%s" % income_id) or 0 settMoney = float(settMoney) if id.isdigit() and int(id) > 0: action = '编辑' info = await Settlement.find(id) if (balance - info['balance'] + settMoney) > totalMoney: return returnData(0, action, "结算金额不能超过渠道成本,已结算:%s" % settMoney) info['income_id'] = income_id info['client_id'] = client_id info['stype'] = stype info['balance'] = balance info['pay_company'] = pay_company else: if (balance + settMoney) > totalMoney: return returnData(0, action, "结算金额不能超过渠道成本,已结算:%s" % settMoney) info = dict(income_id=income_id, client_id=client_id, balance=balance, pay_company=pay_company) # 存在id则修改,不能存在id则添加 rows = await Settlement(**info).save() return returnData(rows, action)
async def form(**kw): action = '添加' info = dict( client_id = kw.get('client_id', 0), business_type = kw.get('business_type', ''), name = kw.get('name', ''), money = kw.get('money', 0), income_company = kw.get('income_company', ''), money_status=0, inv_status=kw.get('inv_status', 0), media_type = kw.get('media_type', 0), cost = kw.get('cost', ''), cost_detail=kw.get('cost_detail', ''), aff_date = kw.get('aff_date') ) if info['client_id'] == 0 or info['business_type'] == '': return returnData(0, action, '公司名称或业务类型不能为空') id = kw.get('id', 0) if id.isdigit() and int(id) > 0: action = '编辑' # 如果是已回款状态,则只能编辑 渠道成本 oldInfo = await Income.find(id) if oldInfo['money_status'] == 1: oldInfo['cost'] = info['cost'] oldInfo['cost_detail'] = info['cost_detail'] info = oldInfo else: info['id'] = id info['money_status'] = oldInfo['money_status'] # 运营端不能编辑回款进度 info['income_id'] = kw.get('income_id', '') # 检查开票状态,如果已开票,则不能修改开票属性,否则开票属性可以为0,1 if oldInfo['inv_status'] == 2 or int(info['inv_status']) >= 2: info['inv_status'] = oldInfo['inv_status'] else: # 获得收入编号 info['income_id'] = await getIncomeNo(info['aff_date']) # 新增的时候,发票状态不能为已开票 if int(info['inv_status']) >= 2: return returnData(0, action) await IncomeNo(income_no=info['income_id'], aff_date=info['aff_date']).save() rows = await Income(**info).save() return returnData(rows, action)
async def board_form(*, return_money_date, money_status, id, comments): if money_status and int(money_status) != 1: return returnData(0, "选择未回款不能提交") if return_money_date and money_status and id and comments: income = await Income.find(id) income["return_money_date"] = return_money_date income["money_status"] = money_status income["comments"] = comments rows = await Income(**income).update() if rows == 1: return returnData(1, "回款") else: return returnData(0, "回款") else: return returnData(0, "回款")
async def read(*, id): if not id.isdigit() or int(id) <= 0: return returnData(0, '标记已读', '缺少请求参数') email = configs.user.name user_info = await Users.findOne(where="email='%s'" % email) ids = user_info['read_log_ids'] if ids: ids = str(ids) + ',' + str(id) else: ids = str(id) user_info['read_log_ids'] = ids rows = await Users(**user_info).update() return returnData(rows, '标记已读')
async def info(*, id): action = '查询' id = int(id) if not id: return returnData(0, action, 'ID不存在') info = await Rule.find(id) if not info: return returnData(0, action) res = returnData(1, action) res['info'] = obj2str([info])[0] return res
async def delete(*, id): if not id.isdigit() or int(id) <= 0: return returnData(0, '删除', '缺少请求参数') # 判断是否有收入单关联 count = await Income.findNumber('count(*)', where="client_id=%s" % id) if count > 0: rows = 0 msg = "请先删除收入报表中有关该客户的记录" else: rows = await Client.delete(id) msg = None return returnData(rows, '删除', msg)
async def form(*, id, btype=None): action = '添加' if not btype or btype.strip() == '': return returnData(0, action, '业务ID不能为空') info = dict(type=btype.strip().upper(), ) if id.isdigit() and int(id) > 0: action = '编辑' info['id'] = id try: rows = await Business(**info).save() return returnData(rows, action) except Exception as e: return returnData(0, action, '业务ID已存在')
async def form(**kw): action = '添加' info = dict(title=kw.get('title', ''), ) if info['title'] == '': return returnData(0, action, '角色名称不能为空') id = kw.get('id', 0) if id.isdigit() and int(id) > 0: action = '编辑' oldInfo = await Role.find(id) info = dict(oldInfo, **info) rows = await Role(**info).save() return returnData(rows, action)
async def managerInfo(*, id): if id: where = " id = %s " % (id) users = await Users.findAll(where=where) users = obj2str(users) if len(users) != 1: return returnData(0, "编辑") return {"info": users[0]}
async def useradd(*, phone=None, email=None, passwd=None, role=None, name=None, id=None): # if not phone or not email or not passwd or not name: # return returnData(0,"缺少请求参数,") if id: where = " id = %s " % (id) users = await Users.findAll(where=where) if not users: return returnData(0, "编辑") user = dict( id=int(id), phone=phone.strip(), email=email.strip(), passwd=passwd.strip(), role=role, created_at=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), name=name.strip(), ) rows = await Users(**user).update() if rows == 1: return returnData(1, "管理or用户员编辑,") else: return returnData(0, "添加") else: user = dict( phone=phone.strip(), email=email.strip(), passwd=passwd.strip(), role=role, created_at=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), name=name.strip(), ) rows = await Users(**user).save() if rows == 1: return returnData(1, "管理or用户员添加,") else: return returnData(0, "添加")
async def useradd(*, phone=None, email=None, passwd=None, role=None, name=None, id=None): # if not phone or not email or not passwd or not name: # return returnData(0,"缺少请求参数,") print("yes") if id: user = dict( id=int(id), phone=phone.strip(), email=email.strip(), passwd=passwd.strip(), role=role, created_at=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), name=name.strip(), ) try: rows = await Users(**user).update() except: return returnData(0, "管理or用户员编辑") if rows == 1: return returnData(1, "管理or用户员编辑") else: return returnData(0, "添加") else: user = dict( phone=phone.strip(), email=email.strip(), passwd=passwd.strip(), role=int(role), created_at=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), name=name.strip(), ) rows = await Users(**user).save() if rows == 1: return returnData(1, "管理or用户员添加,") else: return returnData(0, "添加")
async def delete(*, id): # 1. 已回款收入单不能删除 # 2. 未回款收入单不可以删除 # 3. 待开票收入单可删除,但要删除未处理的发票信息 action = '删除' if not id.isdigit() or int(id) <= 0: return returnData(0, action, '缺少请求参数') try: where = "money_status<1 and inv_status<2 and id = %s" % id rows = await Income.delete(None, where=where) except Exception as e: return returnData(0, action) # 删除对应的未处理的发票单 if rows: await Invoice.delete(where="%s in (income_id) and finished = 0" % id) return returnData(rows, action)
async def info(*, id): id = int(id) if not id: return returnData(0, '查询', 'ID不存在') info = await Client.find(id) if not info: return returnData(0, '查询') info = obj2str([info])[0] info['indate'] = "%s - %s" % (info['indate_start'], info['indate_end']) del info['indate_start'] del info['indate_end'] res = returnData(1, '查询') res['info'] = info return res
async def apis_finish(*,id,finished,finished_time): row_income = {} if id and finished_time and finished and int(finished) == 1: invoice = await Invoice.find(int(id)) invoice["finished"] = 1 invoice["finished_time"] = finished_time rows_f = await Invoice(**invoice).update() if rows_f == 1: income_ids = invoice["income_id"] for inc in income_ids.split(","): income = await Income.find(int(inc)) income["inv_status"] = 2 rows = await Income(**income).update() row_income[inc] = rows for k,v in row_income.items(): if v != 1: return returnData(0,"开票") else: return returnData(0, "开票") return returnData(1,"开票") else: return returnData(0,"确定不开票或没有发票")
async def info(*, id=0): id = int(id) res = {'status': 1, 'msg': '查询成功', 'info': []} if not id: return returnData(0, '查询', 'id不存在') sql = "SELECT inv.id, inv.income_id, i.aff_date,i.money, c.invoice,c.name company_name \ FROM invoice inv \ INNER JOIN income i ON inv.`income_id` = i.`id` \ INNER JOIN `client` c ON i.`client_id` = c.`id` \ WHERE inv.id = %s" % id info = await Invoice.query(sql) if not info: return returnData(0, '查询') res['info'] = obj2str((info))[0] return res