diff --git a/project/app/capa.py b/project/app/capa.py index 173d9588..3dc0d401 100755 --- a/project/app/capa.py +++ b/project/app/capa.py @@ -180,7 +180,7 @@ def inserir_round_retangulo(planilha,data1,data2,dicionariofin): images.append(img) - + #daqui pra cima testado #estilo imagem worksheet.add_image(images[20], "B2")#prestação @@ -205,6 +205,7 @@ def inserir_round_retangulo(planilha,data1,data2,dicionariofin): worksheet['E6'].font = Font(name="Tahoma", size=9, color="204c80",bold=False) worksheet['E6'].alignment = Alignment(horizontal="center",vertical="center",wrap_text=True) + worksheet.add_image(images[23], "B9")#projeto worksheet.merge_cells('B9:D13') worksheet['B9'] = 'PROJETO' @@ -266,6 +267,8 @@ def inserir_round_retangulo(planilha,data1,data2,dicionariofin): worksheet['K21'].font = Font(name="Tahoma", size=10, color="204c80",bold=False) worksheet['K21'].alignment = Alignment(horizontal="center",vertical="center",wrap_text=True) + #testado + worksheet.add_image(images[25], "B19")#Centro de custo worksheet.merge_cells('B19:D20') worksheet['B19'] = 'CENTRO DE CUSTO' @@ -287,6 +290,8 @@ def inserir_round_retangulo(planilha,data1,data2,dicionariofin): worksheet['E21'] = f"{(data1)} a {(data2)}" worksheet['E21'].font = Font(name="Tahoma", size=10, color="204c80",bold=False) worksheet['E21'].alignment = Alignment(horizontal="center",vertical="center",wrap_text=True) + #testado + worksheet.add_image(images[7], "B30")#Assistente worksheet.merge_cells('B30:D32') @@ -324,3 +329,4 @@ def inserir_round_retangulo(planilha,data1,data2,dicionariofin): # Save the workbook workbook.save(planilha) + workbook.close() \ No newline at end of file diff --git a/project/app/estilo_fub.py b/project/app/estilo_fub.py index fa226fdd..653f23a9 100755 --- a/project/app/estilo_fub.py +++ b/project/app/estilo_fub.py @@ -135,62 +135,7 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): sheet['F12'].fill = PatternFill(start_color=azul_claro, end_color=azul_claro,fill_type = "solid") - #totais - #total espesas correntes linha 15 - formula = f"=SUM(B16:B{size})" - sheet['B15'] = formula - formula = f"=SUM(C16:C{size})" - sheet['C15'] = formula - formula = f"=SUM(D16:D{size})" - sheet['D15'] = formula - - formula = f"=SUM(F16:F{size})" - sheet['F15'] = formula - formula = f"=SUM(G16:G{size})" - sheet['G15'] = formula - formula = f"=SUM(H16:H{size})" - sheet['H15'] = formula - - #Total Despesas de Capital - formula = f"=SUM(B{size2+2}:B{size2+4})" - sheet[f'B{size2}'] = formula - - formula = f"=SUM(C{size2+2}:C{size2+4})" - sheet[f'C{size2}'] = formula - - formula = f"=SUM(D{size2+2}:D{size2+4})" - sheet[f'D{size2}'] = formula - - formula = f"=SUM(F{size2+2}:F{size2+4})" - sheet[f'F{size2}'] = formula - - formula = f"=SUM(G{size2+2}:G{size2+4})" - sheet[f'G{size2}'] = formula - - formula = f"=SUM(H{size2+2}:H{size2+4})" - sheet[f'H{size2}'] = formula - - - #Total Utilização de rendimentos - - formula = f"=B{size2+6}" - sheet[f'B{size2+5}'] = formula - - formula = f"=C{size2+6}" - sheet[f'C{size2+5}'] = formula - - formula = f"=D{size2+6}" - sheet[f'D{size2+5}'] = formula - - formula = f"=F{size2+6}" - sheet[f'F{size2+5}'] = formula - - formula = f"=G{size2+6})" - sheet[f'G{size2+5}'] = formula - - formula = f"=H{size2+6}" - sheet[f'H{size2+5}'] = formula @@ -200,8 +145,8 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): #%porcentagem Despesas de Capital #IFERROR (C16/B16;0) percentage_style = NamedStyle(name='percentage', number_format='0%') - #SALDAO - for row in sheet.iter_rows(min_row=15, max_row=size2+7, min_col=1, max_col=9): + #diferença e calculo da porcentagem + for row in sheet.iter_rows(min_row=15, max_row=size2+9, min_col=1, max_col=9): for cell in row: if cell.column == 4: stringSaldo = f"=B{cell.row} - C{cell.row}" @@ -220,7 +165,7 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): cell.style = percentage_style #adicionara mascara do numero - for row in sheet.iter_rows(min_row=15, max_row=size2+7, min_col=1, max_col=9): + for row in sheet.iter_rows(min_row=15, max_row=size2+9, min_col=1, max_col=9): for cell in row: if cell.column != 5 and cell.column != 9: cell.number_format ='#,##0.00' @@ -235,7 +180,7 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): #adicionar borda em tudo borda = Border(right=Side(border_style="medium")) sheet.sheet_view.showGridLines = False - for row in sheet.iter_rows(min_row=1, max_row=size2+12,min_col=9,max_col=9): + for row in sheet.iter_rows(min_row=1, max_row=size2+14,min_col=9,max_col=9): for cell in row: cell.border = borda @@ -245,7 +190,7 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): for cell in row: cell.font = font #preenche a coluna A e F com cinza - for row in sheet.iter_rows(min_row=16, max_row=size2+7,min_col=1,max_col=9): + for row in sheet.iter_rows(min_row=16, max_row=size2+9,min_col=1,max_col=9): for cell in row: if cell.column == 1 or cell.column == 6 or cell.column == 2: cell.fill = PatternFill(start_color=cinza, end_color=cinza, @@ -263,7 +208,7 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): fill_type = "solid") cell.font = Font(name='Arial', size=12,bold= True) - if cell.row == size2 or cell.row == size2 +5 or cell.row == size2 + 7 : + if cell.row == size2 or cell.row == size2 +5 or cell.row == size2 + 7 or cell.row== size2+9: cell.fill = PatternFill(start_color=azul_claro, end_color=azul_claro, fill_type = "solid") cell.font = Font(name='Arial', size=12,bold= True) @@ -326,7 +271,6 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): sheet[nacionalStringCelula] = nacionalString - importadoString = f" b) Importado" importadoStringCelula = f'A{size2+4}' @@ -336,7 +280,7 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): #depsesas e capital utilRendimentosString = f"III.UTILIZAÇÃO DE RENDIMENTOS" - utilRendimentosStringCelula = f'A{size2+5}' + utilRendimentosStringCelula = f'A{size2+7}' sheet[utilRendimentosStringCelula] = utilRendimentosString cell=sheet[utilRendimentosStringCelula] cell.font = Font(name="Arial", size=12, color="000000",bold = True) @@ -346,44 +290,152 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): apliFinString = f"Aplicação Financeira" - apliFinStringCelula = f'A{size2+6}' + apliFinStringCelula = f'A{size2+8}' sheet[apliFinStringCelula] = apliFinString totalString = f"TOTAL" - totalStringCelula = f'A{size2+7}' + totalStringCelula = f'A{size2+5}' sheet[totalStringCelula] = totalString cell=sheet[totalStringCelula] cell.font = Font(name="Arial", size=12, color="000000",bold = True) cell.fill = PatternFill(start_color='9c9c9c', end_color='9c9c9c',fill_type = "solid") + cell.alignment = Alignment(horizontal="center",vertical="center") #total total formula = f"=SUM(B{size2}, B15)" - sheet[f'B{size2+7}'] = formula + sheet[f'B{size2+5}'] = formula formula = f"=SUM(C{size2}, C15)" - sheet[f'C{size2+7}'] = formula + sheet[f'C{size2+5}'] = formula formula = f"=SUM(D{size2}, D15)" - sheet[f'D{size2+7}'] = formula + sheet[f'D{size2+5}'] = formula formula = f"=SUM(F{size2}, F15)" - sheet[f'F{size2+7}'] = formula + sheet[f'F{size2+5}'] = formula formula = f"=SUM(G{size2}, G15)" - sheet[f'G{size2+7}'] = formula + sheet[f'G{size2+5}'] = formula formula = f"=SUM(H{size2},H15)" - sheet[f'H{size2+7}'] = formula + sheet[f'H{size2+5}'] = formula + + + #barra de total nova 22/02 + totalString = f"TOTAL" + totalStringCelula = f'A{size2+9}' + sheet[totalStringCelula] = totalString + cell=sheet[totalStringCelula] + cell.font = Font(name="Arial", size=12, color="000000",bold = True) + cell.fill = PatternFill(start_color='9c9c9c', end_color='9c9c9c',fill_type = "solid") + cell.alignment = Alignment(horizontal="center",vertical="center") + + #soma barra total nova + + formula = f"=SUM(B{size2+8})" + sheet[f'B{size2+9}'] = formula + + formula = f"=SUM(C{size2+8})" + sheet[f'C{size2+9}'] = formula + + formula = f"=SUM(D{size2+8})" + sheet[f'D{size2+9}'] = formula + + formula = f"=SUM(F{size2+8})" + sheet[f'F{size2+9}'] = formula + formula = f"=SUM(G{size2+8})" + sheet[f'G{size2+9}'] = formula + + formula = f"=SUM(H{size2+8})" + sheet[f'H{size2+9}'] = formula + + #3.UTILIZAÇÂO DE RENDIMENTOS + formula = f"=SUM(A{size2+8})" + sheet[f'A{size2+7}'] = formula + + formula = f"=SUM(B{size2+8})" + sheet[f'B{size2+7}'] = formula + + formula = f"=SUM(C{size2+8})" + sheet[f'C{size2+7}'] = formula + + formula = f"=SUM(D{size2+8})" + sheet[f'D{size2+7}'] = formula + + formula = f"=SUM(F{size2+8})" + sheet[f'F{size2+7}'] = formula + formula = f"=SUM(G{size2+8})" + sheet[f'G{size2+7}'] = formula + formula = f"=SUM(H{size2+8})" + sheet[f'H{size2+7}'] = formula + #totais + #total espesas correntes linha 15 + + formula = f"=SUM(B16:B{size})" + sheet['B15'] = formula + formula = f"=SUM(C16:C{size})" + sheet['C15'] = formula + formula = f'=SUMIF(D16:D{size}, ">0")' + sheet['D15'] = formula + + formula = f"=SUM(F16:F{size})" + sheet['F15'] = formula + formula = f"=SUM(G16:G{size})" + sheet['G15'] = formula + formula = f'=SUMIF(H16:H{size}, ">0")' + sheet['H15'] = formula + + #Total Despesas de Capital + formula = f"=SUM(B{size2+2}:B{size2+4})" + sheet[f'B{size2}'] = formula + + formula = f"=SUM(C{size2+2}:C{size2+4})" + sheet[f'C{size2}'] = formula + + formula = f"=SUM(D{size2+2}:D{size2+4})" + sheet[f'D{size2}'] = formula + + formula = f"=SUM(F{size2+2}:F{size2+4})" + sheet[f'F{size2}'] = formula + + formula = f"=SUM(G{size2+2}:G{size2+4})" + sheet[f'G{size2}'] = formula + + formula = f"=SUM(H{size2+2}:H{size2+4})" + sheet[f'H{size2}'] = formula + + + #Total Utilização de rendimentos + + formula = f"=B{size2+8}" + sheet[f'B{size2+5}'] = formula + + formula = f"=C{size2+8}" + sheet[f'C{size2+5}'] = formula + + formula = f"=D{size2+8}" + sheet[f'D{size2+5}'] = formula + + formula = f"=F{size2+8}" + sheet[f'F{size2+5}'] = formula + + formula = f"=G{size2+8}" + sheet[f'G{size2+5}'] = formula + + formula = f"=H{size2+8}" + sheet[f'H{size2+5}'] = formula + + #brasilia - brasilia_row = size2 + 9 + brasilia_row = size2 + 11 brasilia_formula = f"='Receita x Despesa'!A{stringTamanho}:I{stringTamanho}" brasilia_merge_cells = f'A{brasilia_row}:I{brasilia_row}' sheet.merge_cells(brasilia_merge_cells) @@ -393,12 +445,12 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): top_left_brasilia_cell.alignment = Alignment(horizontal="center",vertical="center") #DiretorFinanceiro - diretor_row = size2 + 10 - diretor_cargo_row = size2 + 11 - diretor_cpf_row = size2 + 12 + diretor_row = size2 + 12 + diretor_cargo_row = size2 + 13 + diretor_cpf_row = size2 + 14 diretor_nome_formula = f"Daniel Monteiro Rosa" - diretor_cargo_formula = f"='Diretor-Financeiro" + diretor_cargo_formula = f"Diretor-Financeiro" diretor_cpf_formula = f"450.720.272-87" diretor_merge_cells = f'A{diretor_row}:D{diretor_row}' diretor_cargo_merge_cells = f'A{diretor_cargo_row}:D{diretor_cargo_row}' @@ -420,9 +472,9 @@ def estiloExecReceitaDespesa(tabela,tamanho,stringTamanho): top_left_diretor_cell_cargo_formula.alignment = Alignment(horizontal="center",vertical="center") top_left_diretor_cell_cpf_formula.alignment = Alignment(horizontal="center",vertical="center") #Coordenadora - coordenadora_row = size2 + 10 - coordenadora_cargo_row = size2 + 11 - coordenadora_cpf_row = size2 + 12 + coordenadora_row = size2 + 12 + coordenadora_cargo_row = size2 + 13 + coordenadora_cpf_row = size2 + 14 coordenadora_nome_formula = f"='Receita x Despesa'!H{stringTamanho+3}" coordenadora_cargo_formula = f"='Receita x Despesa'!H{stringTamanho+4}" coordenadora_cpf_formula = f"='Receita x Despesa'!H{stringTamanho+5}" @@ -657,6 +709,11 @@ def estiloReceitaXDespesa(tabela,stringTamanho): celula = f'J{size2+12}' sheet[celula] = formula + #sum II. DESPESAS DE CAPITAl + formula = f'=SUM(I{size+2}:I{size+5})' + celula = f'I{size+1}' + sheet[celula] = formula + #Despesas realizadas #depsesas e capital despesasDeCapitalString = f"II. DESPESAS DE CAPITAL" @@ -928,7 +985,7 @@ def estiloReceitaXDespesa(tabela,stringTamanho): #retorna tamanho de brasilia e de equipamentos return size2 + 16,size+3 -def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): +def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho,tamanhoestorno): '''Esse estilo e considerado geral por que todas as tabelas que compõe utilizam das mesma colunas. Argumentos: @@ -941,7 +998,7 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): locals()[input2].fill = openpyxl.styles.PatternFill(start_color=azul_claro, end_color=azul_claro, fill_type='solid"'.... nomeTabela: variável utilizada para a criação do nome da tabela.Ela deriva das rubricas que são colocadas no input quando essa função e chamada. stringTamanho: refere-se aonde esta localizado a string brasilia na pagina Receita e despesa para a referencias das formulas. - + tamanhoEstorno = Correspondente ao tamanho do estrono ''' nomeSheet=nomeVariavel @@ -959,7 +1016,7 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): borda = Border(right=Side(border_style="medium")) worksheet.sheet_view.showGridLines = False # - for row in worksheet.iter_rows(min_row=1, max_row=size+11,min_col=10,max_col=10): + for row in worksheet.iter_rows(min_row=1, max_row=size+12,min_col=10,max_col=10): for cell in row: cell.border = borda @@ -1161,9 +1218,34 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): merge_formula = f'D{row_number}:E{row_number}' worksheet.merge_cells(merge_formula) - + #mergecells + for x in range(size+4,size+5+tamanhoestorno): + worksheet.merge_cells(start_row=x ,start_column=4, end_row=x, end_column=5) + + + #estorno + + for rows in worksheet.iter_rows(min_row=size+5, max_row=size+4+tamanhoestorno, min_col=1, max_col=10): + for cell in rows: + if cell.row % 2: + cell.fill = PatternFill(start_color=cinza, end_color=cinza, + fill_type = "solid") + if cell.column == 10: + cell.number_format = 'R$ #,##0.00' + cell.border = Border(top=Side(border_style="hair") ,left = Side(border_style="hair") ,right =Side(border_style="hair") ,bottom=Side(border_style="hair")) + + #bordas,corsimcornao,money + # Set the height of each row to 60 + for row in worksheet.iter_rows(min_row=size+4, max_row=size+4+tamanhoestorno): + worksheet.row_dimensions[row[0].row].height = 60 + + min_row = size + 4 + max_row = size + 4 + tamanhoestorno + + + #subtotal2 - sub_total2_row = size + 5 + sub_total2_row = size + 6 +tamanhoestorno subtotal_merge_cells= f'A{sub_total2_row}:I{sub_total2_row}' worksheet.merge_cells(subtotal_merge_cells) top_left_subtotal2_cell_formula = f'A{sub_total2_row}' @@ -1176,12 +1258,13 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): sub_formula_row_celula = f'J{sub_total2_row}' worksheet[sub_formula_row_celula].fill = PatternFill(start_color=cinza_escuro, end_color=cinza_escuro,fill_type = "solid") + worksheet[sub_formula_row_celula].value = f'=SUM(J{size+5}:J{sub_total2_row-1})' worksheet[sub_formula_row_celula].font = Font(name="Arial", size=12, color="000000",bold=True) worksheet[sub_formula_row_celula].number_format = 'R$ #,##0.00' worksheet[sub_formula_row_celula].border = Border(top=Side(border_style="thin") ,left = Side(border_style="thin") ,right =Side(border_style="medium") ,bottom=Side(border_style="medium") ) #total1-2 - total12_row = size + 6 + total12_row = size + 7 + tamanhoestorno total12_merge_cells = f'A{total12_row}:I{total12_row}' worksheet.merge_cells(total12_merge_cells) top_left_total12_cell_formula = f'A{total12_row}' @@ -1194,7 +1277,7 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): #total_formula - total_formula_row = size + 6 + total_formula_row = size + 7 + tamanhoestorno total_formulaa = f'=J{size+2}' total_formula_row_celula = f'J{total_formula_row}' worksheet[total_formula_row_celula].fill = PatternFill(start_color=azul_claro, end_color=azul_claro,fill_type = "solid") @@ -1208,7 +1291,7 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): #brasilia - brasilia_row = size + 7 + brasilia_row = size + 8 +tamanhoestorno brasilia_formula = f"='Receita x Despesa'!A{stringTamanho}:J{stringTamanho}" brasilia_merge_cells = f'A{brasilia_row}:I{brasilia_row}' worksheet.merge_cells(brasilia_merge_cells) @@ -1218,9 +1301,9 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): top_left_brasilia_cell.alignment = Alignment(horizontal="center",vertical="center") #DiretorFinanceiro - diretor_row = size + 8 - diretor_cargo_row = size + 9 - diretor_cpf_row = size + 10 + diretor_row = size + 9 + tamanhoestorno + diretor_cargo_row = size + 10 + tamanhoestorno + diretor_cpf_row = size + 11 + tamanhoestorno diretor_nome_formula = f"='Receita x Despesa'!A{stringTamanho+3}" diretor_cargo_formula = f"='Receita x Despesa'!A{stringTamanho+4}" @@ -1245,9 +1328,9 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): top_left_diretor_cell_cargo_formula.alignment = Alignment(horizontal="center",vertical="center") top_left_diretor_cell_cpf_formula.alignment = Alignment(horizontal="center",vertical="center") #Coordenadora - coordenadora_row = size + 8 - coordenadora_cargo_row = size + 9 - coordenadora_cpf_row = size + 10 + coordenadora_row = size + 9 + tamanhoestorno + coordenadora_cargo_row = size + 10 + tamanhoestorno + coordenadora_cpf_row = size + 11 + tamanhoestorno coordenadora_nome_formula = f"='Receita x Despesa'!H{stringTamanho+3}" coordenadora_cargo_formula = f"='Receita x Despesa'!H{stringTamanho+4}" coordenadora_cpf_formula = f"='Receita x Despesa'!H{stringTamanho+5}" @@ -1279,7 +1362,9 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): # for cell in row: # cell.border = borda - + for row in worksheet.iter_rows(min_row=1, max_row=coordenadora_cpf_row+1,min_col=11,max_col=11): + for cell in row: + cell.border = Border(top=Side(border_style="none") ,left = Side(border_style="medium") ,right =Side(border_style="none") ,bottom=Side(border_style="none") ) for row in worksheet.iter_rows(min_row=coordenadora_cpf_row+1, max_row=coordenadora_cpf_row+1,min_col=1,max_col=10): for cell in row: @@ -1291,6 +1376,8 @@ def estiloGeral(tabela,tamanho,nomeVariavel,nomeTabela,stringTamanho): workbook.save(tabela) workbook.close() + return size+4 + def estilo_conciliacoes_bancaria(tabela,tamanho,tamanho2,stringTamanho): """Estilo um pouco diferente pois necessita de dois aspectos dinâmicos que é primeiramente a quantidade de entradas de pagamento de tarifas bancárias e por fim a quantidade de estorno. Sabendo esses valores é possivel criar a tabela. diff --git a/project/app/planilhas/Modelo_Fub.xlsx b/project/app/planilhas/Modelo_Fub.xlsx old mode 100755 new mode 100644 index 72984cad..fa19bf15 Binary files a/project/app/planilhas/Modelo_Fub.xlsx and b/project/app/planilhas/Modelo_Fub.xlsx differ diff --git a/project/app/preencheFub.py b/project/app/preencheFub.py index bca35eef..46f6956e 100644 --- a/project/app/preencheFub.py +++ b/project/app/preencheFub.py @@ -222,8 +222,35 @@ def consultaConciliacaoBancaria(IDPROJETO, DATA1, DATA2): connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": conStr}) engine = create_engine(connection_url) parametros = [(IDPROJETO, DATA1, DATA2)] - consultaSemEstorno = f"SELECT DISTINCT DataPagamento,ValorPago,NumChequeDeposito,HisLancamento FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND CodStatus = 27 AND CodRubrica = 9 AND DataPagamento BETWEEN ? AND ? AND LOWER(HisLancamento) NOT LIKE '%estorno%' order by DataPagamento" - consultaComEstorno = f"SELECT DISTINCT DataPagamento,ValorPago,NumChequeDeposito,HisLancamento FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND CodStatus = 27 AND CodRubrica = 9 AND DataPagamento BETWEEN ? AND ? AND LOWER(HisLancamento) LIKE '%estorno%' order by DataPagamento" + #consultaSemEstorno = f"SELECT DISTINCT DataPagamento,ValorPago,NumChequeDeposito,HisLancamento FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND CodStatus = 27 AND CodRubrica = 9 AND DataPagamento BETWEEN ? AND ? AND LOWER(HisLancamento) NOT LIKE '%estorno%' order by DataPagamento" + #consultaComEstorno = f"SELECT DISTINCT DataPagamento,ValorPago,NumChequeDeposito,HisLancamento FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND CodStatus = 27 AND CodRubrica = 9 AND DataPagamento BETWEEN ? AND ? AND LOWER(HisLancamento) LIKE '%estorno%' order by DataPagamento" + + consultaSemEstorno = f""" + SELECT [LisLancamentoConvenio].DataPagamento, + [LisPagamentoDespesaConvenioAdministrativa].Valor , + [LisLancamentoConvenio].NumChequeDeposito,[LisLancamentoConvenio].HisLancamento + FROM [Conveniar].[dbo].[LisLancamentoConvenio] + INNER JOIN [Conveniar].[dbo].[LisDocumentoConvenio] ON [LisLancamentoConvenio].[CodDocFinConvenio] = [LisDocumentoConvenio].[CodDocFinConvenio] + INNER JOIN [Conveniar].[dbo].[DocFinConvPagDespesa] ON [LisDocumentoConvenio].[CodDocFinConvenio] = [DocFinConvPagDespesa].[CodDocFinConvenio] + INNER JOIN [Conveniar].[dbo].[LisPagamentoDespesaConvenio] ON [DocFinConvPagDespesa].[CodPedido] = [LisPagamentoDespesaConvenio].[CodPedido] + INNER JOIN [Conveniar].[dbo].[LisPagamentoDespesaConvenioAdministrativa] ON [LisPagamentoDespesaConvenio].CodDespesaConvenio = [LisPagamentoDespesaConvenioAdministrativa].CodDespesaConvenio + AND [LisPagamentoDespesaConvenio].CodConvenio = [LisPagamentoDespesaConvenioAdministrativa].CodConvenio + WHERE [LisLancamentoConvenio].CodConvenio = ? AND [LisLancamentoConvenio].CodStatus = 27 AND [LisLancamentoConvenio].CodRubrica = 9 AND [LisLancamentoConvenio].DataPagamento BETWEEN ? AND ? + AND LOWER([LisLancamentoConvenio].HisLancamento) NOT LIKE '%estorno%' order by [LisLancamentoConvenio].DataPagamento""" + + consultaComEstorno = f""" + SELECT [LisLancamentoConvenio].DataPagamento, + [LisPagamentoDespesaConvenioAdministrativa].Valor , + [LisLancamentoConvenio].NumChequeDeposito,[LisLancamentoConvenio].HisLancamento + FROM [Conveniar].[dbo].[LisLancamentoConvenio] + INNER JOIN [Conveniar].[dbo].[LisDocumentoConvenio] ON [LisLancamentoConvenio].[CodDocFinConvenio] = [LisDocumentoConvenio].[CodDocFinConvenio] + INNER JOIN [Conveniar].[dbo].[DocFinConvPagDespesa] ON [LisDocumentoConvenio].[CodDocFinConvenio] = [DocFinConvPagDespesa].[CodDocFinConvenio] + INNER JOIN [Conveniar].[dbo].[LisPagamentoDespesaConvenio] ON [DocFinConvPagDespesa].[CodPedido] = [LisPagamentoDespesaConvenio].[CodPedido] + INNER JOIN [Conveniar].[dbo].[LisPagamentoDespesaConvenioAdministrativa] ON [LisPagamentoDespesaConvenio].CodDespesaConvenio = [LisPagamentoDespesaConvenioAdministrativa].CodDespesaConvenio + AND [LisPagamentoDespesaConvenio].CodConvenio = [LisPagamentoDespesaConvenioAdministrativa].CodConvenio + WHERE [LisLancamentoConvenio].CodConvenio = ? AND [LisLancamentoConvenio].CodStatus = 27 AND [LisLancamentoConvenio].CodRubrica = 9 AND [LisLancamentoConvenio].DataPagamento BETWEEN ? AND ? + AND LOWER([LisLancamentoConvenio].HisLancamento) LIKE '%estorno%' order by [LisLancamentoConvenio].DataPagamento""" + dfSemEstorno = pd.read_sql(consultaSemEstorno, engine, params=parametros) dfComEstorno = pd.read_sql(consultaComEstorno, engine, params=parametros) @@ -300,12 +327,12 @@ def consultaNomeRubricaCodRubrica(IDPROJETO, DATA1, DATA2,): return dfNomeRubricaCodRubrica def consultaProjeto(IDPROJETO, DATA1, DATA2,codigoRubrica): - ''' Função que vai pega os dados da Rubrica 9 Despesas Financeiras e transformalos em dataframe - para poder popular a databela Despesas Financeiras + ''' Consulta dinamica do SQL relacionado a rubrica correspondente,cada pagina tem sua própria consulta correspondente a rubrica Argumentos IDPROJETO = CodConvenio na tabela nova, corresponde ao codigo do projeto DATA1 = Data Inicial Selecinado pelo Usuario DATA2 = Data Final Selecionado pelo Usuario + codigoRubrica = código da rubrica ''' file_path = pegar_pass("passs.txt") conStr = '' @@ -315,11 +342,13 @@ def consultaProjeto(IDPROJETO, DATA1, DATA2,codigoRubrica): connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": conStr}) engine = create_engine(connection_url) parametros = [(IDPROJETO, DATA1, DATA2,codigoRubrica)] - queryConsultaComRubrica = f"SELECT NomeFavorecido,FavorecidoCPFCNPJ,NomeTipoLancamento,HisLancamento,NumDocPago,DataEmissao,NumChequeDeposito,DataPagamento, ValorPago FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND CodStatus = 27 AND DataPagamento BETWEEN ? AND ? and CodRubrica = ? " + queryConsultaComRubrica = f"SELECT NomeFavorecido,FavorecidoCPFCNPJ,NomeTipoLancamento,HisLancamento,NumDocPago,DataEmissao,NumChequeDeposito,DataPagamento, ValorPago FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND CodStatus = 27 AND DataPagamento BETWEEN ? AND ? AND LOWER(HisLancamento) NOT LIKE '%estorno%' and CodRubrica = ? " + queryConsultaComRubricaEstorno = f"SELECT NomeFavorecido,FavorecidoCPFCNPJ,NomeTipoLancamento,HisLancamento,NumDocPago,DataEmissao,NumChequeDeposito,DataPagamento, ValorPago FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND CodStatus = 27 AND DataPagamento BETWEEN ? AND ? AND LOWER(HisLancamento) LIKE '%estorno%' and CodRubrica = ? " dfconsultaDadosPorRubrica = pd.read_sql(queryConsultaComRubrica, engine, params=parametros) + dfconsultaDadosPorRubricaComEstorno = pd.read_sql(queryConsultaComRubricaEstorno,engine, params=parametros) - return dfconsultaDadosPorRubrica + return dfconsultaDadosPorRubrica,dfconsultaDadosPorRubricaComEstorno def consultaEntradaReceitas(IDPROJETO, DATA1, DATA2): @@ -331,7 +360,7 @@ def consultaEntradaReceitas(IDPROJETO, DATA1, DATA2): connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": conStr}) engine = create_engine(connection_url) parametros = [(IDPROJETO, DATA1, DATA2,)] - consultaEntradaReceita = f"SELECT DataPagamento,NumChequeDeposito,NomeFavorecido,ValorPago,CodRubrica FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND (CodRubrica = 2 OR CodRubrica = 67 OR CodRubrica = 88) AND CodStatus = 27 AND DataPagamento BETWEEN ? AND ? ORDER BY DataPagamento,NumChequeDeposito" + consultaEntradaReceita = f"SELECT DataPagamento,NumChequeDeposito,NomeFavorecido,ValorPago,CodRubrica FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND (CodRubrica = 2 OR CodRubrica = 67 OR CodRubrica = 88) AND CodStatus = 27 AND DataPagamento BETWEEN ? AND ? ORDER BY CodDocFinConvenio,CodRubrica" consultaDemonstrativoReceita = f"SELECT NomeFavorecido,HisLancamento,NumChequeDeposito,DataPagamento,ValorPago,CodRubrica FROM [Conveniar].[dbo].[LisLancamentoConvenio] WHERE CodConvenio = ? AND (CodRubrica = 2 OR CodRubrica = 67 OR CodRubrica = 88) AND CodStatus = 27 AND DataPagamento BETWEEN ? AND ? ORDER BY DataPagamento,NumChequeDeposito" dfReceitas = pd.read_sql(consultaEntradaReceita, engine, params=parametros) dfDemonstrativoReceitas = pd.read_sql(consultaDemonstrativoReceita, engine, params=parametros) @@ -562,7 +591,7 @@ def rubricaGeral(codigo,data1,data2,planilha,rowBrasilia): for index, values in dfNomeRubricaCodigoRubrica.iterrows(): - dfConsultaProjeto = consultaProjeto(codigo, data1, data2,values['CodRubrica']) + dfConsultaProjeto ,dfconsultaDadosPorRubricaComEstorno= consultaProjeto(codigo, data1, data2,values['CodRubrica']) if values['NomeRubrica'] == "Obrigações Tributárias e contributivas": @@ -590,7 +619,7 @@ def rubricaGeral(codigo,data1,data2,planilha,rowBrasilia): - if values['NomeRubrica'] != "Rendimentos de Aplicações Financeiras" and values['NomeRubrica'] != "Despesas Financeiras" and values['NomeRubrica'] != "Receitas": + if values['NomeRubrica'] != "Rendimentos de Aplicações Financeiras" and values['NomeRubrica'] != "Despesas Financeiras" and values['NomeRubrica'] != "Receitas" and ['NomeRubrica'] != "Devolução de Recursos": nomeTabela = values['NomeRubrica'] tituloStyle = values['NomeRubrica'] workbook = openpyxl.load_workbook(tabela) @@ -599,7 +628,10 @@ def rubricaGeral(codigo,data1,data2,planilha,rowBrasilia): workbook.close() tamanho = len(dfConsultaProjeto) - estiloGeral(tabela,tamanho,tituloStyle,nomeTabela,rowBrasilia) + tamanhoRetorno = len(dfconsultaDadosPorRubricaComEstorno) + # print(f'tamanhoRetorno{tamanhoRetorno}') + + rowEstorno = estiloGeral(tabela,tamanho,tituloStyle,nomeTabela,rowBrasilia,tamanhoRetorno) workbook = openpyxl.load_workbook(tabela) sheet2 = workbook[values['NomeRubrica']] dfConsultaProjeto.index = dfConsultaProjeto.index + 1 @@ -607,7 +639,13 @@ def rubricaGeral(codigo,data1,data2,planilha,rowBrasilia): for col_num, value in enumerate(row_data, start=1):#inicio coluna value = convert_datetime_to_stringdt(value) sheet2.cell(row=row_num, column=col_num, value=value) - + dfconsultaDadosPorRubricaComEstorno.index = dfconsultaDadosPorRubricaComEstorno.index + 1 + for row_num, rowEstorno in enumerate(dfconsultaDadosPorRubricaComEstorno.itertuples(), start=10): #inicio linha + for col_num, value in enumerate(rowEstorno, start=1): #inicio coluna + if col_num == 4: + continue + value = convert_datetime_to_stringdt(value) + sheet2.cell(row=row_num, column=col_num, value=value) workbook.save(tabela) workbook.close() @@ -741,7 +779,7 @@ def Receita(planilha,codigo,data1,data2,tamanhoResumo,dataframe): - values_to_remove = ["Receitas", "Rendimentos de Aplicações Financeiras", "Despesas Financeiras",'Material Permanente e Equipamento Nacional','Material Permanente e Equipamento Importado','Equipamentos e Material Permanente','Devolução de Recursos','Encargos - ISS 5%'] + values_to_remove = ["Receitas", "Rendimentos de Aplicações Financeiras", "Despesas Financeiras",'Material Permanente e Equipamento Nacional','Material Permanente e Equipamento Importado','Equipamentos e Material Permanente','Devolução de Recursos','Encargos - ISS 5% '] dataframe = dataframe[~dataframe['NomeRubrica'].isin(values_to_remove)] for row_num, row_data in enumerate(dataframe.itertuples(index = False), start=16):#inicio linha for col_num, value in enumerate(row_data, start=8):#inicio coluna @@ -794,12 +832,14 @@ def Receita(planilha,codigo,data1,data2,tamanhoResumo,dataframe): all_null = Soma.isnull().all() if all_null != True : - result = Soma.iloc[0] - Soma.iloc[1] - - stringRendimento = f'Rendimento de Aplicação' - stringRendimentoValor = f'E{tamanhoequipamentos + 6}' - sheet[stringRendimentoValor] = result - sheet[f'A{tamanhoequipamentos + 6}'] = stringRendimento + if len(Soma) == 1: + result = Soma.iloc[0] + else: + result = Soma.iloc[0] - Soma.iloc[1] + stringRendimento = f'Rendimento de Aplicação' + stringRendimentoValor = f'E{tamanhoequipamentos + 6}' + sheet[stringRendimentoValor] = result + sheet[f'A{tamanhoequipamentos + 6}'] = stringRendimento @@ -849,7 +889,7 @@ def ExeReceitaDespesa(planilha,codigo,data1,data2,stringTamanho): tamanho = tamanho - 3 - stringTamanho = tamanho + 16 + stringTamanho = tamanho + 16 estiloExecReceitaDespesa(tabela,tamanho,stringTamanho) #preencher workbook = openpyxl.load_workbook(planilha) @@ -876,10 +916,10 @@ def ExeReceitaDespesa(planilha,codigo,data1,data2,stringTamanho): string_periodo = f"Período que abrange esta prestação: {output_date_str} a {output_date_str2}" sheet['A7'] = string_periodo consulta_coordenador = consultaID(codigo) - stringCoordenador= f'F{stringTamanho+11}' # retorna lugar do coordanor - stringCoordanadorCargo = f'F{stringTamanho+12}' + stringCoordenador= f'F{stringTamanho+13}' # retorna lugar do coordanor + stringCoordanadorCargo = f'F{stringTamanho+14}' sheet[stringCoordanadorCargo] = f"Coordenador(a)" - stringTamanhoCPF = f'F{stringTamanho+13}' # retorna lugar do coordanor + stringTamanhoCPF = f'F{stringTamanho+15}' # retorna lugar do coordanor sheet[stringCoordenador] = consulta_coordenador['NomePessoaResponsavel'] sheet[stringTamanhoCPF] = formatar_cpf(consulta_coordenador['CPFCoordenador']) string_titulo = f"Título do Projeto: {consulta_coordenador['NomeConvenio']}" @@ -917,7 +957,7 @@ def ExeReceitaDespesa(planilha,codigo,data1,data2,stringTamanho): 12: "Dezembro" } - stringTamanhoBrasilia = f'A{stringTamanho+10}' # retorna lugar de brasilia + stringTamanhoBrasilia = f'A{stringTamanho+12}' # retorna lugar de brasilia hoje = date.today() data_formatada = f"{hoje.day} de {meses_dict[hoje.month]} de {hoje.year}" sheet[stringTamanhoBrasilia] = f'Brasilia, {data_formatada}' @@ -991,14 +1031,19 @@ def ExeReceitaDespesa(planilha,codigo,data1,data2,stringTamanho): all_null = Soma.isnull().all() if all_null != True : - result = Soma.iloc[0] - Soma.iloc[1] - stringObras = f'B{stringTamanho + 7}' - sheet[stringObras] = result - - SomaRendimentoAteoperido = dfRendimentoAteOPeriodo["Aplicação"] + dfRendimentoAteOPeriodo["IRRF"] - resultado = SomaRendimentoAteoperido.iloc[0] - SomaRendimentoAteoperido.iloc[1] - stringObras = f'F{stringTamanho + 7}' - sheet[stringObras] = resultado + # print(Soma) + # print(len(Soma)) + if len(Soma) == 1: + result = Soma.iloc[0] + else: + result = Soma.iloc[0] - Soma.iloc[1] + stringObras = f'B{stringTamanho + 9}' + sheet[stringObras] = result + + SomaRendimentoAteoperido = dfRendimentoAteOPeriodo["Aplicação"] + dfRendimentoAteOPeriodo["IRRF"] + resultado = SomaRendimentoAteoperido.iloc[0] - SomaRendimentoAteoperido.iloc[1] + stringObras = f'F{stringTamanho + 9}' + sheet[stringObras] = resultado @@ -1060,8 +1105,6 @@ def preencheFub(codigo,data1,data2,tabela): tamanho,dataframe = ExeReceitaDespesa(tabela,codigo,data1,data2,15) tamanhoPosicaoBrasilia,dfReceitas,dfDemonstrativoReceitas = Receita(tabela,codigo,data1,data2,tamanho,dataframe) demonstrativo(codigo,data1,data2,tabela,tamanhoPosicaoBrasilia,dfDemonstrativoReceitas,dfReceitas) - # tamanhoPosicaoBrasilia,dfReceitas,dfDemonstrativoReceitas,dfIss2,dfIss5 = Receita(tabela,codigo,data1,data2,tamanho,dataframe) - # demonstrativo(codigo,data1,data2,tabela,tamanhoPosicaoBrasilia,dfDemonstrativoReceitas,dfReceitas,dfIss2,dfIss5) rubricaGeral(codigo,data1,data2,tabela,tamanhoPosicaoBrasilia) conciliacaoBancaria(codigo,data1,data2,tabela,tamanhoPosicaoBrasilia) rowRendimento= rendimentoDeAplicacao(codigo,data1,data2,tabela,tamanhoPosicaoBrasilia) diff --git a/project/app/preencheGenerico.py b/project/app/preencheGenerico.py new file mode 100644 index 00000000..e69de29b