# -*- coding: utf-8 -*- """财务结算单提交审批。""" import datetime import json DBNAME = 'kboss' async def _finance_phone(sor, orgid): rows = await sor.sqlExe(""" SELECT u.mobile FROM users u LEFT JOIN userrole ur ON u.id=ur.userid LEFT JOIN role r ON ur.roleid=r.id WHERE r.role='财务' AND u.orgid=${orgid}$ AND ur.del_flg='0' AND r.del_flg='0' AND u.del_flg='0' LIMIT 1 """, {'orgid': orgid}) return rows[0]['mobile'] if rows else None async def finance_settlement_submit(ns={}): settlement_id = ns.get('settlement_id') or ns.get('id') userid = ns.get('userid') or ns.get('user_id') business_name = ns.get('business_name') or '财务结算' if not settlement_id or not userid: return {'status': False, 'msg': '缺少 settlement_id 或 userid'} db = DBPools() async with db.sqlorContext(DBNAME) as sor: try: rows = await sor.R('finance_settlement', {'id': settlement_id, 'del_flg': '0'}) if not rows: return {'status': False, 'msg': '结算单不存在'} settlement = rows[0] if settlement.get('status') not in ('draft', 'rejected', 'failed'): return {'status': False, 'msg': '当前状态不可提交审批'} phone = await _finance_phone(sor, settlement.get('accounting_orgid')) if not phone: return {'status': False, 'msg': '未找到当前机构财务审批人'} business_rows = await sor.R('apv_business', {'business_name': business_name, 'del_flg': '0'}) if not business_rows: return {'status': False, 'msg': '审批业务不存在: %s' % business_name} form_component = { 'title': '财务结算审批', 'detail': { 'data': '%s %s-%s %s 金额:%s' % ( settlement.get('counterparty_name'), settlement.get('period_start'), settlement.get('period_end'), settlement.get('counterparty_type'), settlement.get('settlement_amount'), ) }, } apv_json = json.dumps({ 'table': 'finance_settlement', 'settlement_id': settlement_id, 'settlement_no': settlement.get('settlement_no'), }, ensure_ascii=False) resp = await issue_approve( phone, settlement.get('accounting_orgid'), userid, business_rows[0]['id'], form_component, settlement.get('counterparty_orgid'), settlement_id, apv_json, ) if not resp.get('status'): return {'status': False, 'msg': '发起审批失败, %s' % resp.get('msg')} now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') await sor.U('finance_settlement', { 'id': settlement_id, 'status': 'approving', 'approval_status': 'start', 'approval_id': resp.get('instanceId'), 'created_by': userid, 'failure_reason': None, 'update_at': now_time, }) return { 'status': True, 'msg': 'ok', 'data': { 'settlement_id': settlement_id, 'approval_id': resp.get('instanceId'), 'status': 'approving', }, } except Exception as e: return {'status': False, 'msg': '提交审批失败, %s' % str(e)} ret = await finance_settlement_submit(params_kw) return ret