Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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, "认证")
Ejemplo n.º 6
0
async def delete(*, id):

    if not id.isdigit() or int(id) <= 0:
        return returnData(0, '删除', '缺少请求参数')

    rows = await Invoice.delete(id)

    return returnData(rows, '删除')
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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,"备注")
Ejemplo n.º 9
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, "请求")
Ejemplo n.º 10
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)
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
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, "删除")
Ejemplo n.º 14
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)
Ejemplo n.º 15
0
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)
Ejemplo n.º 16
0
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)
Ejemplo n.º 17
0
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)
Ejemplo n.º 18
0
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, "回款")
Ejemplo n.º 19
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, '标记已读')
Ejemplo n.º 20
0
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
Ejemplo n.º 21
0
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)
Ejemplo n.º 22
0
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已存在')
Ejemplo n.º 23
0
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)
Ejemplo n.º 24
0
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]}
Ejemplo n.º 25
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, "添加")
Ejemplo n.º 26
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, "添加")
Ejemplo n.º 27
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)
Ejemplo n.º 28
0
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
Ejemplo n.º 29
0
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,"确定不开票或没有发票")
Ejemplo n.º 30
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