EricGEGE commited on
Commit
5bcd09f
·
verified ·
1 Parent(s): bb526fd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +146 -30
app.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
  import pandas as pd
3
  import gradio as gr
4
  from datetime import datetime
@@ -8,7 +7,7 @@ import os
8
 
9
  # Google Sheets settings
10
  SHEET_ID = os.getenv('SHEET_ID') # Replace with your Google Sheet ID
11
- log = os.getenv('USER')
12
  password = os.getenv('PASSWORD')
13
  USERS_SHEET = 'Users'
14
  PURCHASE_ORDERS_SHEET = 'PurchaseOrders'
@@ -22,6 +21,7 @@ creds = Credentials.from_service_account_file(CREDENTIALS_FILE, scopes=SCOPES)
22
  gc = gspread.authorize(creds)
23
  sheet = gc.open_by_key(SHEET_ID)
24
 
 
25
  # Initialize Google Sheets
26
  def init_sheets():
27
  if USERS_SHEET not in [s.title for s in sheet.worksheets()]:
@@ -44,14 +44,16 @@ def init_sheets():
44
  sheet.add_worksheet(title=PURCHASE_ORDERS_SHEET, rows="100", cols="20")
45
  orders = sheet.worksheet(PURCHASE_ORDERS_SHEET)
46
  orders.append_row([
47
- '付款抬头', '合同号', '运编号', '采购编号','车辆信息', '销售合同价', '采购价',
48
  '费用名称', '费用金额', '采购款收款抬头', '采购款收款账号信息',
49
  '业务员', '客户名称', '客户国家', '在途状态', '开票类型',
50
  '收款状态', '审批状态', '退款说明', '备注', 'timestamp', '毛利'
51
  ])
52
 
 
53
  init_sheets()
54
 
 
55
  # Approval process control
56
  def get_next_approval_status(current_status):
57
  try:
@@ -65,6 +67,7 @@ def get_next_approval_status(current_status):
65
  except Exception as e:
66
  return "操作有误: {}".format(e)
67
 
 
68
  def approve_order(order_id, approver_role):
69
  try:
70
  orders = sheet.worksheet(PURCHASE_ORDERS_SHEET)
@@ -92,8 +95,10 @@ def approve_order(order_id, approver_role):
92
  except Exception as e:
93
  return "操作有误: {}".format(e)
94
 
 
95
  # Global session state
96
- session_state = {'user_id': None, 'username': None, 'role': None}
 
97
 
98
  def login(username):
99
  try:
@@ -109,12 +114,65 @@ def login(username):
109
  except Exception as e:
110
  return "操作有误: {}".format(e)
111
 
112
- def submit_order(
113
- username,
114
- 付款抬头, 合同号, 运编号, 采购编号, 车辆信息, 销售合同价, 采购价,
115
- 费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息,
116
- 业务员, 客户名称, 客户国家, 在途状态, 开票类型,
117
- 收款状态, 退款说明, 备注
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  ):
119
  try:
120
  global profit
@@ -124,10 +182,23 @@ def submit_order(
124
  return "只有采购角色���以提交订单"
125
 
126
  orders = sheet.worksheet(PURCHASE_ORDERS_SHEET)
127
- profit = float(销售合同价)*7.25 - float(采购价) + float(采购价)*0.115
128
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  new_order = [
130
- 付款抬头, 合同号, 运编号, 采购编号, 车辆信息, 销售合同价, 采购价,
131
  费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息,
132
  业务员, 客户名称, 客户国家, 在途状态, 开票类型,
133
  收款状态, '待单证审批', 退款说明, 备注,
@@ -140,6 +211,7 @@ def submit_order(
140
  except Exception as e:
141
  return "操作有误: {}".format(e)
142
 
 
143
  def format_order(order):
144
  try:
145
  return f"""
@@ -172,6 +244,7 @@ def format_order(order):
172
  except Exception as e:
173
  return "操作有误: {}".format(e)
174
 
 
175
  def display_orders(username):
176
  try:
177
 
@@ -198,6 +271,7 @@ def display_orders(username):
198
  except Exception as e:
199
  return "操作有误: {}".format(e)
200
 
 
201
  def approve_order_interface(username, order_id):
202
  try:
203
  login(username)
@@ -215,22 +289,62 @@ def approve_order_interface(username, order_id):
215
  except Exception as e:
216
  return "操作有误: {}".format(e)
217
 
 
218
  with gr.Blocks() as app:
219
- with gr.TabItem("提交订单"):
220
  username_submit = gr.Textbox(label="用户名")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  付款抬头 = gr.Textbox(label="付款抬头")
222
  合同号 = gr.Textbox(label="合同号")
223
- 运编号 = gr.Textbox(label="运编号")
224
- 采购编号 = gr.Textbox(label="采购编号")
225
  车辆信息 = gr.Textbox(label="车辆信息")
226
  销售合同价 = gr.Textbox(label="销售合同价(FOB美元)")
227
  采购价 = gr.Textbox(label="采购价(人民币)")
228
  费用名称 = gr.Dropdown(
229
- choices = [
230
- '采车定金','采车定金(抵车款)','采车定金(全额退回)','采车定金(部分退回)',
231
- '采车尾款(含背户费)','采车尾款','背户手续费','系统刷机费','充电桩费',
232
- '保险费(短期交强)','保险费(长期交强)','保险费(全险)' ,'国内运费(市内)','国内运费',
233
- '购置税费','仓储费','检测报告费','车辆用品费','车辆改装费','港杂费','海运费','海运费+港杂费','其他费用'
 
234
  ],
235
  label="费用名称")
236
  费用金额 = gr.Textbox(label="费用金额")
@@ -240,15 +354,15 @@ with gr.Blocks() as app:
240
  客户名称 = gr.Textbox(label="客户名称")
241
  客户国家 = gr.Textbox(label="客户国家")
242
  在途状态 = gr.Dropdown(
243
- choices = [
244
- '工厂','4S店','车管所',
245
- '改装店','运输中','物流站点','货代仓库','装箱',
246
- '发运','到达目的港'
247
  ],
248
  label="在途状态")
249
  开票类型 = gr.Dropdown(
250
- choices = [
251
- '增票','普票','低开','无票'
252
  ],
253
  label="开票类型")
254
  收款状态 = gr.Textbox(label="收款状态")
@@ -256,8 +370,8 @@ with gr.Blocks() as app:
256
  备注 = gr.Textbox(label="备注")
257
  submit_button = gr.Button("提交订单")
258
  submit_output = gr.HTML(label="输出")
259
- submit_button.click(fn=submit_order, inputs=[
260
- username_submit, 付款抬头, 合同号, 运编号, 采购编号,车辆信息, 销售合同价, 采购价,
261
  费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息,
262
  业务员, 客户名称, 客户国家, 在途状态, 开票类型,
263
  收款状态, 退款说明, 备注
@@ -274,6 +388,8 @@ with gr.Blocks() as app:
274
  order_id = gr.Textbox(label="采购编号")
275
  approve_order_button = gr.Button("批准订单")
276
  approve_order_output = gr.HTML(label="输出")
277
- approve_order_button.click(fn=approve_order_interface, inputs=[username_approve, order_id], outputs=approve_order_output)
 
278
 
279
- app.launch(auth=(log, password))
 
 
 
1
  import pandas as pd
2
  import gradio as gr
3
  from datetime import datetime
 
7
 
8
  # Google Sheets settings
9
  SHEET_ID = os.getenv('SHEET_ID') # Replace with your Google Sheet ID
10
+ log = 'cevauto'
11
  password = os.getenv('PASSWORD')
12
  USERS_SHEET = 'Users'
13
  PURCHASE_ORDERS_SHEET = 'PurchaseOrders'
 
21
  gc = gspread.authorize(creds)
22
  sheet = gc.open_by_key(SHEET_ID)
23
 
24
+
25
  # Initialize Google Sheets
26
  def init_sheets():
27
  if USERS_SHEET not in [s.title for s in sheet.worksheets()]:
 
44
  sheet.add_worksheet(title=PURCHASE_ORDERS_SHEET, rows="100", cols="20")
45
  orders = sheet.worksheet(PURCHASE_ORDERS_SHEET)
46
  orders.append_row([
47
+ '付款抬头', '合同号', '运编号', '采购编号', '车辆信息', '销售合同价', '采购价',
48
  '费用名称', '费用金额', '采购款收款抬头', '采购款收款账号信息',
49
  '业务员', '客户名称', '客户国家', '在途状态', '开票类型',
50
  '收款状态', '审批状态', '退款说明', '备注', 'timestamp', '毛利'
51
  ])
52
 
53
+
54
  init_sheets()
55
 
56
+
57
  # Approval process control
58
  def get_next_approval_status(current_status):
59
  try:
 
67
  except Exception as e:
68
  return "操作有误: {}".format(e)
69
 
70
+
71
  def approve_order(order_id, approver_role):
72
  try:
73
  orders = sheet.worksheet(PURCHASE_ORDERS_SHEET)
 
95
  except Exception as e:
96
  return "操作有误: {}".format(e)
97
 
98
+
99
  # Global session state
100
+ session_state = {'user_id': None, 'username': None, 'role': None, 'order_id': None}
101
+
102
 
103
  def login(username):
104
  try:
 
114
  except Exception as e:
115
  return "操作有误: {}".format(e)
116
 
117
+
118
+ def submit_order1(
119
+ username,
120
+ 运编号,
121
+ 费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息,
122
+ 在途状态, 开票类型,
123
+ 收款状态, 退款说明, 备注
124
+ ):
125
+ try:
126
+ global profit
127
+ login(username)
128
+
129
+ if session_state['role'] not in ['采购', '采购经理']:
130
+ return "只有采购角色可以提交订单"
131
+
132
+ orders = sheet.worksheet(PURCHASE_ORDERS_SHEET)
133
+
134
+ # Generate purchase order name based on username
135
+ prefix = 'DING00000'
136
+ if session_state['username'] == 'cevcaigou159':
137
+ prefix = 'SHEN00000'
138
+ elif session_state['username'] == 'cevcaigou888':
139
+ prefix = 'NIU00000'
140
+
141
+ all_records = orders.get_all_records()
142
+ existing_records = [record for record in all_records if record['采购编号'].startswith(prefix)]
143
+ n = len(existing_records)
144
+ i = n + 1
145
+ order_name = f"{prefix}{i}"
146
+
147
+ existing_records1 = [record for record in all_records if record['运编号'] == 运编号]
148
+
149
+ existing_record = existing_records1[0]
150
+ profit = float(existing_record['销售合同价']) * 7 - float(existing_record['采购价']) + float(
151
+ existing_record['采购价']) * 0.115
152
+
153
+ new_order = [
154
+ existing_record['付款抬头'], existing_record['合同号'], 运编号, order_name, existing_record['车辆信息'],
155
+ existing_record['销售合同价'], existing_record['采购价'],
156
+ 费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息,
157
+ existing_record['业务员'], existing_record['客户名称'], existing_record['客户国家'], 在途状态, 开票类型,
158
+ 收款状态, '待单证审批', 退款说明, 备注,
159
+ datetime.now().strftime('%Y-%m-%d'), profit
160
+ ]
161
+ orders.append_row(new_order)
162
+ session_state.clear()
163
+ return "订单已提交"
164
+ session_state.clear()
165
+
166
+ except Exception as e:
167
+ return "操作有误: {}".format(e)
168
+
169
+
170
+ def submit_order2(
171
+ username,
172
+ 付款抬头, 合同号, 运编号, 车辆信息, 销售合同价, 采购价,
173
+ 费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息,
174
+ 业务员, 客户名称, 客户国家, 在途状态, 开票类型,
175
+ 收款状态, 退款说明, 备注
176
  ):
177
  try:
178
  global profit
 
182
  return "只有采购角色���以提交订单"
183
 
184
  orders = sheet.worksheet(PURCHASE_ORDERS_SHEET)
 
185
 
186
+ # Generate purchase order name based on username
187
+ prefix = 'DING00000'
188
+ if session_state['username'] == 'cevcaigou159':
189
+ prefix = 'SHEN00000'
190
+ elif session_state['username'] == 'cevcaigou888':
191
+ prefix = 'NIU00000'
192
+
193
+ all_records = orders.get_all_records()
194
+ existing_records = [record for record in all_records if record['采购编号'].startswith(prefix)]
195
+ n = len(existing_records)
196
+ i = n + 1
197
+ order_name = f"{prefix}{i}"
198
+
199
+ profit = float(销售合同价) * 7.25 - float(采购价) + float(采购价) * 0.115
200
  new_order = [
201
+ 付款抬头, 合同号, 运编号, order_name, 车辆信息, 销售合同价, 采购价,
202
  费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息,
203
  业务员, 客户名称, 客户国家, 在途状态, 开票类型,
204
  收款状态, '待单证审批', 退款说明, 备注,
 
211
  except Exception as e:
212
  return "操作有误: {}".format(e)
213
 
214
+
215
  def format_order(order):
216
  try:
217
  return f"""
 
244
  except Exception as e:
245
  return "操作有误: {}".format(e)
246
 
247
+
248
  def display_orders(username):
249
  try:
250
 
 
271
  except Exception as e:
272
  return "操作有误: {}".format(e)
273
 
274
+
275
  def approve_order_interface(username, order_id):
276
  try:
277
  login(username)
 
289
  except Exception as e:
290
  return "操作有误: {}".format(e)
291
 
292
+
293
  with gr.Blocks() as app:
294
+ with gr.TabItem("提交费用(旧运编号)"):
295
  username_submit = gr.Textbox(label="用户名")
296
+ 运编号 = gr.Textbox(label="运编号")
297
+ 费用名称 = gr.Dropdown(
298
+ choices=[
299
+ '采车定金', '采车定金(抵车款)', '采车定金(全额退回)', '采车定金(部分退回)',
300
+ '采车尾款(含背户费)', '采车尾款', '背户手续费', '系统刷机费', '充电桩费',
301
+ '保险费(短期交强)', '保险费(长期交强)', '保险费(全险)', '国内运费(市内)', '国内运费',
302
+ '购置税费', '仓储费', '检测报告费', '车辆用品费', '车辆改装费', '港杂费', '海运费', '海运费+港杂费',
303
+ '其他费用'
304
+ ],
305
+ label="费用名称")
306
+ 费用金额 = gr.Textbox(label="费用金额")
307
+ 采购款收款抬头 = gr.Textbox(label="采购款收款抬头")
308
+ 采购款收款账号信息 = gr.Textbox(label="采购款收款账号信息")
309
+ 在途状态 = gr.Dropdown(
310
+ choices=[
311
+ '工厂', '4S店', '车管所',
312
+ '改装店', '运输中', '物流站点', '货代仓库', '装箱',
313
+ '发运', '到达目的港'
314
+ ],
315
+ label="在途状态")
316
+ 开票类型 = gr.Dropdown(
317
+ choices=[
318
+ '增票', '普票', '低开', '无票'
319
+ ],
320
+ label="开票类型")
321
+ 收款状态 = gr.Textbox(label="收款状态")
322
+ 退款说明 = gr.Textbox(label="退款说明")
323
+ 备注 = gr.Textbox(label="备注")
324
+ submit_button = gr.Button("提交订单")
325
+ submit_output = gr.HTML(label="输出")
326
+ submit_button.click(fn=submit_order1, inputs=[
327
+ username_submit, 运编号,
328
+ 费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息,
329
+ 在途状态, 开票类型,
330
+ 收款状态, 退款说明, 备注
331
+ ], outputs=submit_output)
332
+
333
+ with gr.TabItem("提交订单(新运编号)"):
334
+ username_submit = gr.Textbox(label="用户名")
335
+ 运编号_submit = gr.Textbox(label="运编号")
336
  付款抬头 = gr.Textbox(label="付款抬头")
337
  合同号 = gr.Textbox(label="合同号")
 
 
338
  车辆信息 = gr.Textbox(label="车辆信息")
339
  销售合同价 = gr.Textbox(label="销售合同价(FOB美元)")
340
  采购价 = gr.Textbox(label="采购价(人民币)")
341
  费用名称 = gr.Dropdown(
342
+ choices=[
343
+ '采车定金', '采车定金(抵车款)', '采车定金(全额退回)', '采车定金(部分退回)',
344
+ '采车尾款(含背户费)', '采车尾款', '背户手续费', '系统刷机费', '充电桩费',
345
+ '保险费(短期交强)', '保险费(长期交强)', '保险费(全险)', '国内运费(市内)', '国内运费',
346
+ '购置税费', '仓储费', '检测报告费', '车辆用品费', '车辆改装费', '港杂费', '海运费', '海运费+港杂费',
347
+ '其他费用'
348
  ],
349
  label="费用名称")
350
  费用金额 = gr.Textbox(label="费用金额")
 
354
  客户名称 = gr.Textbox(label="客户名称")
355
  客户国家 = gr.Textbox(label="客户国家")
356
  在途状态 = gr.Dropdown(
357
+ choices=[
358
+ '工厂', '4S店', '车管所',
359
+ '改装店', '运输中', '物流站点', '货代仓库', '装箱',
360
+ '发运', '到达目的港'
361
  ],
362
  label="在途状态")
363
  开票类型 = gr.Dropdown(
364
+ choices=[
365
+ '增票', '普票', '低开', '无票'
366
  ],
367
  label="开票类型")
368
  收款状态 = gr.Textbox(label="收款状态")
 
370
  备注 = gr.Textbox(label="备注")
371
  submit_button = gr.Button("提交订单")
372
  submit_output = gr.HTML(label="输出")
373
+ submit_button.click(fn=submit_order2, inputs=[
374
+ username_submit, 运编号_submit, 付款抬头, 合同号, 车辆信息, 销售合同价, 采购价,
375
  费用名称, 费用金额, 采购款收款抬头, 采购款收款账号信息,
376
  业务员, 客户名称, 客户国家, 在途状态, 开票类型,
377
  收款状态, 退款说明, 备注
 
388
  order_id = gr.Textbox(label="采购编号")
389
  approve_order_button = gr.Button("批准订单")
390
  approve_order_output = gr.HTML(label="输出")
391
+ approve_order_button.click(fn=approve_order_interface, inputs=[username_approve, order_id],
392
+ outputs=approve_order_output)
393
 
394
+ app.launch(auth=(log, password))
395
+ # app.launch()