File size: 1,806 Bytes
3c4de5e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 22 11:36:45 2024
@author: fernando.schwartzer
"""
import pandas as pd
from .shared_state import state
def create_new_dataframe_with_index_and_value_unit(file, sheet_name, selected_columns, add_index, calculate_unit_value, col_value, col_area):
if file is None or not sheet_name or not selected_columns:
return pd.DataFrame({"Erro": ["Carregue um arquivo, selecione uma aba e colunas."]})
# Carrega o DataFrame da aba especificada
df = pd.read_excel(file.name, sheet_name=sheet_name)
# Seleciona apenas as colunas especificadas
new_df = df[selected_columns]
# Adiciona um índice se necessário
if add_index:
new_df.insert(0, "Índice", range(1, len(new_df) + 1))
# Renomeia e formata a coluna de valor total
if col_value:
new_df.rename(columns={col_value: "Valor Total"}, inplace=True)
new_df["Valor Total"] = new_df["Valor Total"].round(2)
cols = new_df.columns.tolist()
cols.insert(1, cols.pop(cols.index("Valor Total")))
new_df = new_df[cols]
# Calcula o valor unitário se necessário
if calculate_unit_value and col_value and col_area:
try:
new_df["Valor Unitário"] = (new_df["Valor Total"] / new_df[col_area]).round(2)
cols = new_df.columns.tolist()
cols.insert(2, cols.pop(cols.index("Valor Unitário")))
new_df = new_df[cols]
except ZeroDivisionError:
new_df["Valor Unitário"] = "Erro: Divisão por zero"
except KeyError:
new_df["Valor Unitário"] = "Erro: Coluna inválida"
# Salva o novo DataFrame no estado compartilhado
new_df.columns = new_df.columns.map(str)
state['new_df'] = new_df
return new_df |