import pandas as pd import gradio as gr from datetime import datetime import gspread from google.oauth2.service_account import Credentials import os import json # Google Sheets setting conf1 = os.getenv('CONF') # conf = json.dumps(conf1) dict = json.loads(conf1) SHEET_ID = os.getenv('SHEET_ID') # Replace with your Google Sheet ID log = 'cevauto' password = os.getenv('PASSWORD') USERS_SHEET = 'Users' PURCHASE_ORDERS_SHEET = 'PurchaseOrders' # Service account credentials file path # CREDENTIALS_FILE = 'credentials.json' # Replace with the path to your service account credentials file # Initialize Google Sheets client SCOPES = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive'] creds = Credentials.from_service_account_info(dict, scopes=SCOPES) gc = gspread.authorize(creds) sheet = gc.open_by_key(SHEET_ID) # Initialize Google Sheets def init_sheets(): if USERS_SHEET not in [s.title for s in sheet.worksheets()]: sheet.add_worksheet(title=USERS_SHEET, rows="100", cols="20") users = sheet.worksheet(USERS_SHEET) users.append_row(['id', 'username', 'role']) new_users = [ ['1', 'cevcaigou159', '采购'], ['2', 'cevdanzheng789', '单证'], ['3', 'cevcaiwu369', '财务'], ['4', 'cevboss888', '总经理'], ['5', 'cevcaigou357', '采购'], ['6', 'investor888', '观察员'], ['7', 'cevcaigou888', '采购经理'], ['8', 'cevcaigou005', '采购'], ['9', 'cevchuna001', '出纳'] # Added new user ] for user in new_users: users.append_row(user) if PURCHASE_ORDERS_SHEET not in [s.title for s in sheet.worksheets()]: sheet.add_worksheet(title=PURCHASE_ORDERS_SHEET, rows="100", cols="20") orders = sheet.worksheet(PURCHASE_ORDERS_SHEET) orders.append_row([ '付款抬头', '合同号', '运编号', '采购编号', '车辆信息', '销售合同价', '采购价', '费用名称', '费用金额', '采购款收款抬头', '采购款收款账号信息', '业务员', '客户名称', '客户国家', '在途状态', '开票类型', '收款状态', '审批状态', '退款说明', '备注', 'timestamp', '毛利' ]) init_sheets() # Approval process control def get_next_approval_status(current_status): try: if current_status == '待采购经理/总经理审批': return '待财务审批' elif current_status == '待财务审批': return '已批准' elif current_status == '已批准': return '已付款' return current_status except Exception as e: return "操作有误: {}".format(e) def approve_order(order_id, approver_role): try: orders = sheet.worksheet(PURCHASE_ORDERS_SHEET) order_records = orders.get_all_records() order_index = next((index for (index, d) in enumerate(order_records) if d["采购编号"] == order_id), None) if order_index is None: return '订单未找到' current_status = order_records[order_index]['审批状态'] if (current_status == '待采购经理/总经理审批' and approver_role not in ['采购经理', '总经理']) or \ (current_status == '待财务审批' and approver_role != '财务') or \ (current_status == '待出纳审批' and approver_role != '出纳'): return f'只有{current_status}角色可以批准当前订单' next_status = get_next_approval_status(current_status) headers = list(order_records[0].keys()) orders.update_cell(order_index + 2, headers.index('审批状态') + 1, next_status) # Update approval status orders.update_cell(order_index + 2, headers.index('timestamp') + 1, datetime.now().strftime('%Y-%m-%d')) # Update timestamp return '订单已批准' except Exception as e: return "操作有误: {}".format(e) # Global session state session_state = {'user_id': None, 'username': None, 'role': None, 'order_id': None} def login(username): try: users = sheet.worksheet(USERS_SHEET).get_all_records() user = next((u for u in users if u['username'] == username), None) if user: session_state['user_id'] = user['id'] session_state['username'] = user['username'] session_state['role'] = user['role'] return "登录成功,用户:{}".format(username) else: return "用户未找到" except Exception as e: return "操作有误: {}".format(e) def submit_order1( username,付款抬头, 运编号,车辆信息,销售合同价, 采购价, 费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息, 在途状态, 开票类型, 收款状态, 退款说明, 备注 ): try: global profit login(username) if session_state['role'] not in ['采购', '采购经理', '单证']: return "只有采购角色可以提交订单" orders = sheet.worksheet(PURCHASE_ORDERS_SHEET) # Generate purchase order name based on username prefix = 'DING00000' if session_state['username'] == 'cevcaigou159': prefix = 'SHEN00000' elif session_state['username'] == 'cevcaigou888': prefix = 'NIU00000' elif session_state['username'] == 'cevdanzheng789': prefix = 'CHEN00000' elif session_state['username'] == 'cevcaigou359': prefix = 'ZHUANG00000' all_records = orders.get_all_records() existing_records = [record for record in all_records if record['采购编号'].startswith(prefix)] n = len(existing_records) i = n + 1 order_name = f"{prefix}{i}" existing_records1 = [record for record in all_records if record['运编号'] == 运编号] existing_record = existing_records1[0] profit = float(销售合同价) * 7 - float(采购价) + float(采购价) * 0.115 new_order = [ 付款抬头, existing_record['合同号'], 运编号, order_name, 车辆信息, 销售合同价, 采购价, 费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息, existing_record['业务员'], existing_record['客户名称'], existing_record['客户国家'], 在途状态, 开票类型, 收款状态, '待采购经理/总经理审批', 退款说明, 备注, datetime.now().strftime('%Y-%m-%d'), profit ] orders.append_row(new_order) session_state.clear() return "订单已提交" session_state.clear() except Exception as e: return "操作有误: {}".format(e) def submit_order2( username, 付款抬头, 合同号, 运编号, 车辆信息, 销售合同价, 采购价, 费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息, 业务员, 客户名称, 客户国家, 在途状态, 开票类型, 收款状态, 退款说明, 备注 ): try: global profit login(username) if session_state['role'] not in ['采购', '采购经理', '单证']: return "只有采购角色可以提交订单" orders = sheet.worksheet(PURCHASE_ORDERS_SHEET) # Generate purchase order name based on username prefix = 'DING00000' if session_state['username'] == 'cevcaigou159': prefix = 'SHEN00000' elif session_state['username'] == 'cevcaigou888': prefix = 'NIU00000' elif session_state['username'] == 'cevdanzheng789': prefix = 'CHEN00000' elif session_state['username'] == 'cevcaigou359': prefix = 'ZHUANG00000' all_records = orders.get_all_records() existing_records = [record for record in all_records if record['采购编号'].startswith(prefix)] n = len(existing_records) i = n + 1 order_name = f"{prefix}{i}" profit = float(销售合同价) * 7.25 - float(采购价) + float(采购价) * 0.115 new_order = [ 付款抬头, 合同号, 运编号, order_name, 车辆信息, 销售合同价, 采购价, 费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息, 业务员, 客户名称, 客户国家, 在途状态, 开票类型, 收款状态, '待采购经理/总经理审批', 退款说明, 备注, datetime.now().strftime('%Y-%m-%d'), profit ] orders.append_row(new_order) session_state.clear() return "订单已提交" session_state.clear() except Exception as e: return "操作有误: {}".format(e) def format_order(order): try: return f"""
审批状态 | {order['审批状态']} |
---|---|
付款抬头 | {order['付款抬头']} |
合同号 | {order['合同号']} |
运编号 | {order['运编号']} |
采购编号 | {order['采购编号']} |
车辆信息 | {order['车辆信息']} |
销售合同价(FOB美元) | {order['销售合同价']} |
采购价(人民币) | {order['采购价']} |
费用名称 | {order['费用名称']} |
费用金额 | {order['费用金额']} |
采购款收款抬头 | {order['采购款收款抬头']} |
采购款收款账号信息 | {order['采购款收款账号信息']} |
业务员 | {order['业务员']} |
客户名称 | {order['客户名称']} |
客户国家 | {order['客户国家']} |
在途状态 | {order['在途状态']} |
开票类型 | {order['开票类型']} |
收款状态 | {order['收款状态']} |
退款说明 | {order['退款说明']} |
备注 | {order['备注']} |
时间 | {order['timestamp']} |
毛利 | {order['毛利']} |
当前身份 | {session_state['username']} |