| import pandas as pd |
| import gradio as gr |
| from datetime import datetime |
|
|
| |
| def process_excel_files(member_file, order_file, ์์ฑ์ผ์): |
| try: |
| |
| member_df = pd.read_excel(member_file) |
| order_df = pd.read_excel(order_file) |
|
|
| |
| order_df.rename( |
| columns={ |
| '์ฃผ๋ฌธ์ID': '์์ด๋', |
| '์ด ๊ฒฐ์ ๊ธ์ก': '์ด ๊ฒฐ์ ๊ธ์ก', |
| '์์น๊ธ(์ต์ข
)': '์์น๊ธ(์ต์ข
)', |
| '์ด ์ฃผ๋ฌธ๊ธ์ก': '์ฃผ๋ฌธ๊ธ์ก' |
| }, |
| inplace=True |
| ) |
|
|
| |
| required_member_columns = ['์์ด๋', '์ด๋ฆ', '์ํธ', '์ฌ์
์๋ฒํธ', '์ด๋ฉ์ผ'] |
| required_order_columns = ['์ฃผ๋ฌธ๋ฒํธ', '์์ด๋', '์ด ๊ฒฐ์ ๊ธ์ก', '์์น๊ธ(์ต์ข
)', '์ฃผ๋ฌธ๊ธ์ก'] |
| |
| missing_member_columns = [col for col in required_member_columns if col not in member_df.columns] |
| missing_order_columns = [col for col in required_order_columns if col not in order_df.columns] |
| |
| if missing_member_columns: |
| return f"์๋ฌ ๋ฐ์: 'ํ์์ ๋ณด ํ์ผ'์ ๋๋ฝ๋ ์ด: {missing_member_columns}. ํ์ผ ์ด ์ด๋ฆ: {list(member_df.columns)}" |
| if missing_order_columns: |
| return f"์๋ฌ ๋ฐ์: '์ฃผ๋ฌธ๋ด์ญ ํ์ผ'์ ๋๋ฝ๋ ์ด: {missing_order_columns}. ํ์ผ ์ด ์ด๋ฆ: {list(order_df.columns)}" |
|
|
| |
| order_df['์ฃผ๋ฌธ๊ธ์ก'] = order_df['์ด ๊ฒฐ์ ๊ธ์ก'] + order_df['์์น๊ธ(์ต์ข
)'] |
|
|
| |
| order_df.drop_duplicates(subset="์ฃผ๋ฌธ๋ฒํธ", inplace=True) |
| order_df = order_df[order_df['์ฃผ๋ฌธ๊ธ์ก'] != 0] |
|
|
| |
| order_sum = order_df.groupby("์์ด๋")['์ฃผ๋ฌธ๊ธ์ก'].sum().reset_index() |
| order_sum.rename(columns={'์ฃผ๋ฌธ๊ธ์ก': '์ฃผ๋ฌธํฉ๊ณ'}, inplace=True) |
| order_df = pd.merge(order_df, order_sum, on="์์ด๋", how="left") |
|
|
| |
| order_df = order_df.drop_duplicates(subset="์์ด๋", keep="first") |
|
|
| |
| merged_df = pd.merge(order_df, member_df, on="์์ด๋", how="left") |
|
|
| |
| for idx in order_df.index: |
| current_id = order_df.loc[idx, '์์ด๋'] |
| matching_row = merged_df[merged_df['์์ด๋'] == current_id] |
| if not matching_row.empty: |
| order_df.loc[idx, '์ด๋ฆ'] = matching_row.iloc[0]['์ด๋ฆ'] |
| order_df.loc[idx, '์ํธ'] = matching_row.iloc[0]['์ํธ'] |
| order_df.loc[idx, '์ฌ์
์๋ฒํธ'] = matching_row.iloc[0]['์ฌ์
์๋ฒํธ'] |
| order_df.loc[idx, '์ด๋ฉ์ผ'] = matching_row.iloc[0]['์ด๋ฉ์ผ'] |
|
|
| |
| updated_order_file_path = f"์ฃผ๋ฌธ๋ด์ญ(์์ )_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx" |
| order_df.to_excel(updated_order_file_path, index=False, header=['์์ด๋'] + list(order_df.columns[1:])) |
|
|
| |
| updated_order_df = pd.read_excel(updated_order_file_path) |
|
|
| |
| result = pd.DataFrame() |
| result['A์ด'] = ['01'] * len(updated_order_df) |
| result['B์ด'] = [์์ฑ์ผ์] * len(updated_order_df) |
| result['C์ด'] = updated_order_df['์ฌ์
์๋ฒํธ'] |
| result['D์ด'] = [''] * len(updated_order_df) |
| result['E์ด'] = updated_order_df['์ํธ'] |
| result['F์ด'] = updated_order_df['์ด๋ฆ'] |
| result['G์ด'] = [''] * len(updated_order_df) |
| result['H์ด'] = [''] * len(updated_order_df) |
| result['I์ด'] = [''] * len(updated_order_df) |
| result['J์ด'] = updated_order_df['์ด๋ฉ์ผ'] |
| result['K์ด'] = [''] * len(updated_order_df) |
| result['L์ด'] = (updated_order_df['์ฃผ๋ฌธํฉ๊ณ'] / 1.1).round().astype(int) |
| result['M์ด'] = (updated_order_df['์ฃผ๋ฌธํฉ๊ณ'] - result['L์ด']).round().astype(int) |
| result['N์ด'] = [''] * len(updated_order_df) |
| result['O์ด'] = [str(์์ฑ์ผ์)[-2:]] * len(updated_order_df) |
| result['P์ด'] = ['์ฃผ๋ฐฉ์ฉํ ์ธ'] * len(updated_order_df) |
|
|
| |
| ๊ณต๋_์ด = [chr(i) + '์ด' for i in range(ord('Q'), ord('Z') + 1)] |
| ๊ณต๋_์ด += [f"A{chr(i)}์ด" for i in range(ord('A'), ord('Y') + 1)] |
| for col in ๊ณต๋_์ด: |
| result[col] = [''] * len(updated_order_df) |
| |
| |
| result['AY์ด'] = ['01'] * len(updated_order_df) |
| |
| |
| result_file = f"๊ฒฐ๊ณผ_์ธ๊ธ๊ณ์ฐ์_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx" |
| result.to_excel(result_file, index=False) |
| |
| return result_file, updated_order_file_path |
|
|
| except Exception as e: |
| return f"์๋ฌ ๋ฐ์: {str(e)}" |
|
|
| |
| def generate_excel(member_file, order_file, ์์ฑ์ผ์): |
| output_files = process_excel_files(member_file.name, order_file.name, ์์ฑ์ผ์) |
| if isinstance(output_files, str): |
| return output_files, None |
| else: |
| return output_files |
|
|
| |
| with gr.Blocks() as app: |
| gr.Markdown("### ์ธ๊ธ๊ณ์ฐ์ ์์
ํ์ผ ์์ฑ๊ธฐ") |
| with gr.Row(): |
| member_file = gr.File(label="ํ์์ ๋ณด ์์
ํ์ผ ์
๋ก๋", file_types=[".xlsx"]) |
| order_file = gr.File(label="์ฃผ๋ฌธ๋ด์ญ ์์
ํ์ผ ์
๋ก๋", file_types=[".xlsx"]) |
| ์์ฑ์ผ์ = gr.Textbox(label="์์ฑ์ผ์ (YYYYMMDD)", placeholder="์: 20250101") |
| generate_btn = gr.Button("์์
์์ฑ") |
| with gr.Row(): |
| result_file_output = gr.File(label="๊ฒฐ๊ณผ ์ธ๊ธ๊ณ์ฐ์ ํ์ผ ๋ค์ด๋ก๋") |
| updated_order_file_output = gr.File(label="์ฃผ๋ฌธ๋ด์ญ(์์ ) ํ์ผ ๋ค์ด๋ก๋") |
| generate_btn.click(generate_excel, inputs=[member_file, order_file, ์์ฑ์ผ์], outputs=[result_file_output, updated_order_file_output]) |
|
|
| app.launch() |
|
|