personal finance control engine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

361 lines
32 KiB

{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"insert_query = \"INSERT IGNORE INTO default.TRANSACTION (ID, TDATE, ACCOUNT_ID, MEMO, COUNTRY, OUTFLOW, INFLOW, OWNER_ID, INSTALLMENT_NR, INSTALLMENT_TT, CREATED, UPDATED) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s )\""
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def find_owner(queried_name: str):\n",
" from mysql.connector import connect, Error\n",
"\n",
" query = \"SELECT * FROM OWNER\"\n",
" result = []\n",
"\n",
" try:\n",
" with connect(\n",
" host=\"127.0.0.1\",\n",
" user=\"root\",\n",
" password=\"pleasehashapasswordomg\",\n",
" database=\"default\",\n",
" ) as connection:\n",
" # print(\"CONNECTED!\", connection)\n",
" with connection.cursor() as cursor:\n",
" cursor.execute(query)\n",
" query_result = cursor.fetchall()\n",
"\n",
" for item in query_result:\n",
" if item[1].lower() == queried_name:\n",
" result.append(item[0])\n",
" result.append(item[1])\n",
" # print(result)\n",
" # print(\"DONE!\")\n",
" except Error as e:\n",
" print(e)\n",
" finally:\n",
" connection.close()\n",
"\n",
" return result if result else None\n",
" \n",
"find_owner(\"daniel\")[0]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def create_lists(file_name):\n",
" import re\n",
"\n",
" # Open the text file\n",
" with open(file_name, \"r\", encoding=\"latin\") as file:\n",
" # Read the contents of the file\n",
" contents = file.readlines()\n",
"\n",
" # Define the regex patterns\n",
" owner_pattern = r\"\\s\\d\\s?-\\s?([A-Z]+)\"\n",
" line_pattern = r\"\\d{2}\\.\\d{2}\\.\\d{4}.{23}.{14}.{2}\\s*-?\\d*\\.?\\d+,\\d{2}\\s*\\d+,\\d{2}\"\n",
" payment_pattern = (r\"\\d{2}\\.\\d{2}\\.\\d{4}PGTO.*200211(\\s*-?\\d*\\.?\\d+,\\d{2})(\\s*\\d+,\\d{2})\")\n",
" partial_invoice_line_pattern = r\"\\d{2}\\/\\d{2}.{27}.{16}.{2}\\s+\\s*-?\\d*\\.?\\d+,\\d{2}\\s*\\d+,\\d{2}\"\n",
"\n",
" # Lists\n",
" current_list = None\n",
" owner_list = []\n",
" result = {}\n",
"\n",
" # silly_counter = 1\n",
" isPartial = True\n",
"\n",
" # Find Owners\n",
" try:\n",
" for line in contents:\n",
" line = line.strip()\n",
"\n",
" found_owners = re.findall(owner_pattern, line)\n",
" if found_owners:\n",
" for owner_name in found_owners:\n",
" print(owner_name)\n",
" list_name = f\"list_{owner_name.lower()}\"\n",
" owner_list.append(list_name)\n",
" result[list_name] = {}\n",
" result[list_name][\"owner_name\"] = owner_name\n",
" result[list_name][\"owner_id\"] = find_owner(owner_name.lower())[0]\n",
" except:\n",
" print(\"Error during owner search\")\n",
"\n",
"\n",
" # Treat and create transaction lists\n",
" try:\n",
" for line in contents:\n",
" line = line.strip()\n",
"\n",
" if re.match(owner_pattern, line):\n",
" found_owner = re.match(owner_pattern, line)\n",
" owner_list = f\"list_{found_owner.group(1).lower()}\"\n",
" current_list = owner_list\n",
" result[current_list][\"tlist\"] = []\n",
" else:\n",
" if re.match(payment_pattern, line):\n",
" result[current_list][\"tlist\"].append(line)\n",
" elif re.match(line_pattern, line) or re.match(partial_invoice_line_pattern, line):\n",
" result[current_list][\"tlist\"].append(line)\n",
" except:\n",
" print(\"Error during Transaction Lists creation\")\n",
"\n",
" # Check file pattern\n",
" sample = result[current_list][\"tlist\"][0]\n",
" if re.match(line_pattern, sample):\n",
" isPartial = False\n",
"\n",
" for listObj in result:\n",
" result[listObj][\"isPartial\"] = isPartial\n",
"\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', ' SISBB - Sistema de Informações Banco do Brasil \\n', '13/11/2024 Auto-Atendimento 08:44:59\\n', ' Fatura do Cartão de Crédito \\n', ' \\n', ' \\n', 'Cliente : DANIEL O CARVALHO \\n', 'Nr.Cartão : 4984.****.****.5727 \\n', 'Modalidade : OUROCARD VISA INFINITE \\n', ' \\n', 'Vencimento : 25.04.2024 \\n', 'Total da fatura : R$ 18.362,96 \\n', 'Pagamento mínimo: R$ 2.754,44 \\n', ' \\n', 'DEMONSTRATIVO\\n', '--------------------------------------------------------------------------------\\n', 'Data Transações País Valor R$ Valor US$\\n', '--------------------------------------------------------------------------------\\n', ' \\n', ' \\n', ' 1 - DANIEL O CARVALHO \\n', ' \\n', ' SALDO FATURA ANTERIOR BR 19.249,92 0,00\\n', ' \\n', ' \\n', ' Pagamentos/Créditos \\n', '25.03.2024PGTO DEBITO CONTA 8611 000006025 200211 -19.249,92 0,00\\n', ' \\n', ' \\n', ' Lazer \\n', '14.03.2024EBN*XSOLLA CURITIBA BR 27,09 0,00\\n', '06.04.2024PAG*MmCultura BRASILIA BR 26,00 0,00\\n', ' \\n', ' \\n', ' Restaurantes \\n', '16.03.2024IFD*MARIANA PERDOMO CONBRASILIA BR 80,79 0,00\\n', '16.03.2024IFD*iFood OSASCO BR 5,00 0,00\\n', '17.03.2024IFD*TT BRASILIA COMERCIBRASILIA BR 134,00 0,00\\n', '18.03.2024IFD*IFOOD.COM AGENCIA DOsasco BR 12,90 0,00\\n', '19.03.2024CASA ALMERIA BRASILIA BR 157,92 0,00\\n', '19.03.2024CASA ALMERIA BRASILIA BR 105,00 0,00\\n', '19.03.2024IFD*TAIKAN FAST SUSHI LBRASILIA BR 149,90 0,00\\n', '19.03.2024IFD*iFood OSASCO BR 10,00 0,00\\n', '28.03.2024FOGO E BRASA STEAK HOUSPIRENOPOLIS BR 238,00 0,00\\n', '03.04.2024ifood *IFD*RC MELO C Vila Yara Osa BR 226,51 0,00\\n', '04.04.2024IFD*TAIKAN FAST SUSHI LBRASILIA BR 149,90 0,00\\n', '06.04.2024BAR E RESTAURANTE TIA BRASILIA BR 220,00 0,00\\n', '06.04.2024BAR E RESTAURANTE TIA BRASILIA BR 4,00 0,00\\n', '06.04.2024BAR E RESTAURANTE TIA BRASILIA BR 16,00 0,00\\n', '06.04.2024BAR E RESTAURANTE TIA BRASILIA BR 12,00 0,00\\n', '06.04.2024IFD*ME COMERCIO DE ALIMBRASILIA BR 66,90 0,00\\n', '07.04.2024IFD*UPTOWN BURGERS E SHBRASILIA BR 76,70 0,00\\n', ' \\n', ' \\n', ' Saúde \\n', '20.03.2024DROGASIL 2067 BRASILIA BR 516,80 0,00\\n', '20.03.2024REDE BRASIL DRUGSTORE BRASILIA BR 512,73 0,00\\n', '20.03.2024PAGUE MENOS 1225 BRASILIA BR 568,23 0,00\\n', '05.04.2024DROGARIA SAO PAULO BRASILIA BR 248,37 0,00\\n', ' \\n', ' \\n', ' Serviços \\n', '15.03.2024VELOE BARUERI BR 22,26 0,00\\n', '18.03.2024NETFLIX.COM SAO PAULO BR 39,90 0,00\\n', '19.03.2024PAG*FolhaDeSPaulo SAO PAULO BR 29,90 0,00\\n', '23.03.2024PAG*Zig SAO PAULO BR 376,01 0,00\\n', '27.03.2024Gympass GympassBr Sao Paulo BR 399,90 0,00\\n', '29.03.2024MP *MELIMAIS OSASCO BR 17,99 0,00\\n', '01.04.2024MERCADOLIVRE*AGUSHOPCOMOSASCO BR 39,90 0,00\\n', '01.04.2024MERCADOLIVRE*GIGATUDOBYOSASCO BR 418,41 0,00\\n', '02.04.2024MERCADOLIVRE*BRASIL OSASCO BR 58,57 0,00\\n', '03.04.2024MERCADOLIVRE*AGUSHOPCOMOSASCO BR 31,90 0,00\\n', '04.04.2024IFD*Gleidson Renato LeiOsasco BR 10,00 0,00\\n', '04.04.2024APPLE.COM/BILL SAO PAULO BR 54,90 0,00\\n', '05.04.2024MERCADOLIVRE*WIXACESSOROSASCO BR 58,57 0,00\\n', '04.04.2024IFD*LOG CITY ESPRESS Osasco BR 5,00 0,00\\n', '05.04.2024Gympass GympassBr Sao Paulo BR 399,90 0,00\\n', '05.04.2024MR JOHN BARBEARIA LTDA BRASILIA BR 60,00 0,00\\n', '09.04.2024MERCADOLIVRE*SABORESDAMOSASCO BR 109,90 0,00\\n', ' \\n', ' \\n', ' Supermercados \\n', '24.03.2024PAG*GaleteriaSerrana BRASILIA BR 164,78 0,00\\n', ' \\n', ' \\n', ' Transporte \\n', '18.03.2024UBER* TRIP OSASCO BR 13,98 0,00\\n', '18.03.2024UBER *TRIP HELP.UBER.COSAO PAULO BR 1,60 0,00\\n', '18.03.2024UBER * PENDING SAO PAULO BR 13,92 0,00\\n', '18.03.2024UBER *TRIP HELP.UBER.COSAO PAULO BR 5,00 0,00\\n', '19.03.2024UBER* TRIP OSASCO BR 11,83 0,00\\n', '21.03.2024UBER * PENDING SAO PAULO BR 10,98 0,00\\n', '23.03.2024UBER * PENDING SAO PAULO BR 10,96 0,00\\n', '25.03.2024UBER* TRIP OSASCO BR 14,55 0,00\\n', '25.03.2024UBER* TRIP OSASCO BR 5,00 0,00\\n', '25.03.2024UBER *TRIP HELP.UBER.COSAO PAULO BR 14,80 0,00\\n', '25.03.2024UBER * PENDING SAO PAULO BR 13,92 0,00\\n', '25.03.2024UBER *TRIP HELP.UBER.COSAO PAULO BR 3,41 0,00\\n', '28.03.2024UBER* TRIP OSASCO BR 14,31 0,00\\n', '28.03.2024UBER* TRIP OSASCO BR 1,44 0,00\\n', '28.03.2024UBER* TRIP OSASCO BR 14,08 0,00\\n', '28.03.2024UBER* TRIP OSASCO BR 3,00 0,00\\n', '02.04.2024UBER * PENDING SAO PAULO BR 19,94 0,00\\n', '02.04.2024UBER * PENDING SAO PAULO BR 39,93 0,00\\n', '04.04.2024UBER * PENDING SAO PAULO BR 10,93 0,00\\n', '06.04.2024UBER * PENDING SAO PAULO BR 39,94 0,00\\n', '09.04.2024UBER * PENDING SAO PAULO BR 10,97 0,00\\n', ' \\n', ' \\n', ' Vestuário \\n', '27.03.2024CASA DO CHOCOLATE BRASILIA BR 283,89 0,00\\n', ' \\n', ' \\n', ' Outros lançamentos \\n', '13.03.2024DL*GOOGLE YouTub SAO PAULO BR 41,90 0,00\\n', '18.03.2024Amazon Music SAO PAULO BR 21,90 0,00\\n', '14.03.2024STEAM PURCHASE SEATTLE DE 24,00 0,00\\n', '19.03.2024IOF - COMPRA NO EXTERIOR 1,05 0,00\\n', '15.03.2024STEAM PURCHASE SEATTLE DE 47,88 0,00\\n', '19.03.2024IOF - COMPRA NO EXTERIOR 2,09 0,00\\n', '04.04.2024STEAM PURCHASE SEATTLE DE 117,98 0,00\\n', '08.04.2024IOF - COMPRA NO EXTERIOR 1,29 0,00\\n', ' \\n', ' \\n', ' Compras parceladas \\n', '15.01.2024MP*MUNDODOSCO PARC 03/10 SAO PAULO BR 159,90 0,00\\n', '17.10.2023BIANCHINI AUT PARC 06/10 BRASILIA BR 535,00 0,00\\n', '22.03.2024SNOW PARC 01/02 BELO HORIZONBR 2.466,69 0,00\\n', '26.03.2024QUEST 01/02-SNOW BELO BR -2.466,69 0,00\\n', '22.03.2024SNOW PARC 01/10 BELO HORIZONBR 493,41 0,00\\n', '26.03.2024QUEST 01/10-SNOW BELO BR -493,41 0,00\\n', ' \\n', ' \\n', ' SubTotal 7.373,90 0,00\\n', ' \\n', ' \\n', ' 4 - IZABELY C NORMANDO \\n', ' \\n', ' \\n', ' Restaurantes \\n', '18.03.2024FEDERAL GOURMET BRASILIA BR 22,56 0,00\\n', '18.03.2024FEDERAL GOURMET BRASILIA BR 18,85 0,00\\n', '23.03.2024COCO BAMBU IGUATEMI BR BRASILIA BR 250,23 0,00\\n', '30.03.2024PAG*ColoreGelateria PIRENOPOLIS BR 44,46 0,00\\n', '01.04.2024FEDERAL GOUR BRASILIA BR 18,93 0,00\\n', '01.04.2024FEDERAL GOUR BRASILIA BR 120,00 0,00\\n', '06.04.2024BAR E RESTAURANTE TIA BRASILIA BR 27,00 0,00\\n', '06.04.2024BAR E RESTAURANTE TIA BRASILIA BR 16,00 0,00\\n', '07.04.2024ifood *IFD*SN COMERC Vila Yara Osa BR 152,00 0,00\\n', ' \\n', ' \\n', ' Saúde \\n', '18.03.2024LISTO*CLINICAESTETICARNBRASILIA BR 4.300,00 0,00\\n', '28.03.2024DROGASIL 2067 BRASILIA BR 114,34 0,00\\n', '08.04.2024DROGASIL 1383 BRASILIA BR 92,18 0,00\\n', ' \\n', ' \\n', ' Serviços \\n', '13.03.2024CODA OIAPOQUE BR 110,83 0,00\\n', '14.03.2024VINHOS E CO MACAPA BR 177,92 0,00\\n', '15.03.2024RUSTIC ALIMENTOS LTDA MACAPA BR 71,50 0,00\\n', '19.03.2024PICPAY UNICOMPRASINT Brasilia BR 353,00 0,00\\n', '24.03.2024DM *SHEINCOM MIDVIEW CITY BR 162,93 0,00\\n', '26.03.2024MP*DONAFUTRICA OSASCO BR 824,50 0,00\\n', '27.03.2024CAFES PLURAIS TORRADOS BRASILIA BR 279,90 0,00\\n', '30.03.2024PAG*WeniaFerreiraDo PIRENOPOLIS BR 94,80 0,00\\n', '31.03.2024RR PIRENOPOLIS BR 240,08 0,00\\n', '10.04.2024IFD*F C BOLOS DO FLAVIOBRASILIA BR 90,00 0,00\\n', ' \\n', ' \\n', ' Supermercados \\n', '07.04.2024PAG*GaleteriaSerrana BRASILIA BR 174,10 0,00\\n', ' \\n', ' \\n', ' Vestuário \\n', '24.03.2024DL*SHEINCOM SAO PAULO BR 270,94 0,00\\n', '30.03.2024MARIA PIRENOPOLIS BR 120,00 0,00\\n', '08.04.2024TRACKEFIELD BRASILIA BR 120,10 0,00\\n', ' \\n', ' \\n', ' Viagens \\n', '15.03.2024BDH HOTELARIA MACAPA BR 72,00 0,00\\n', ' \\n', ' \\n', ' Outros lançamentos \\n', '14.03.2024LATAM SITE SAO PAULO BR 93,00 0,00\\n', ' \\n', ' \\n', ' Compras parceladas \\n', '15.01.2024LDM PARC 03/04 BRASILIA BR 1.100,00 0,00\\n', '17.01.2024BRASILIA EMPR PARC 03/12 BRASILIA BR 599,00 0,00\\n', '26.01.2024VISAO INSTITU PARC 03/05 BRASILIA BR 200,00 0,00\\n', '26.03.2024BIOEXATA FARM PARC 01/03 BRASILIA BR 583,01 0,00\\n', '07.01.2024PG *B4A GLAMB PARC 04/12 SAO PAULO BR 74,90 0,00\\n', ' \\n', ' \\n', ' SubTotal 10.989,06 0,00\\n', ' \\n', ' \\n', ' Total 18.362,96 0,00\\n', ' \\n', ' \\n', 'RESUMO EM REAL\\n', '--------------------------------------------------------------------------------\\n', ' Saldo Pagamento/ Compras/ Total Lim. extra Saldo \\n', ' Anterior Créditos Débitos R$ utilizado Atual - R$ \\n', '--------------------------------------------------------------------------------\\n', ' 19.249,92 - -22.210,02 + 21.323,06 = 18.362,96 - 0,00 = 18.362,96\\n', '--------------------------------------------------------------------------------\\n', ' \\n', 'RESUMO EM DÓLAR\\n', '--------------------------------------------------------------------------------\\n', ' Compras/ Outros Saldo Taxa de Saldo \\n', ' Saques débitos Créditos Atual U$ conversão convertido \\n', '--------------------------------------------------------------------------------\\n', ' 0,00 - 0,00 + 0,00 = 0,00 X 0,0000 = 0,00\\n', '--------------------------------------------------------------------------------\\n', ' \\n', ' \\n', 'LIMITES - R$\\n', '--------------------------------------------------------------------------------\\n', 'Total para transações à vista : 70.255,00\\n', 'Saques : 70.255,00\\n', '(Incluido no total transação à vista)\\n', 'Total para transações parceladas : 0,00\\n', 'Crediário : 249.337,00\\n', ' \\n', ' \\n', 'ENCARGOS FINANCEIROS - R$ 1 2\\n', '--------------------------------------------------------------------------------\\n', 'Crédito Rotativo : 9,94 14,16\\n', 'Crédito Parcelado: 3,00 10,21\\n', 'Permanência : 1,00 1,00\\n', 'Multa : 2,00 2,00\\n', '1. Para o periodo %am \\n', '2. Máximo próximo periodo %am \\n', ' \\n', ' \\n', 'PONTO PRA VOCÊ/LIVELO\\n', '--------------------------------------------------------------------------------\\n', ' Pontuação acumulada Até 10.04.2024 : 1.331\\n', '--------------------------------------------------------------------------------\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n', '\\n']\n"
]
},
{
"ename": "TypeError",
"evalue": "expected str, bytes or os.PathLike object, not TextIOWrapper",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[6], line 9\u001b[0m\n\u001b[0;32m 7\u001b[0m contents \u001b[38;5;241m=\u001b[39m file\u001b[38;5;241m.\u001b[39mreadlines()\n\u001b[0;32m 8\u001b[0m \u001b[38;5;28mprint\u001b[39m(contents)\n\u001b[1;32m----> 9\u001b[0m \u001b[43mcreate_lists\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile\u001b[49m\u001b[43m)\u001b[49m\n",
"Cell \u001b[1;32mIn[5], line 5\u001b[0m, in \u001b[0;36mcreate_lists\u001b[1;34m(file_name)\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mre\u001b[39;00m\n\u001b[0;32m 4\u001b[0m \u001b[38;5;66;03m# Open the text file\u001b[39;00m\n\u001b[1;32m----> 5\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mfile_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlatin\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m file:\n\u001b[0;32m 6\u001b[0m \u001b[38;5;66;03m# Read the contents of the file\u001b[39;00m\n\u001b[0;32m 7\u001b[0m contents \u001b[38;5;241m=\u001b[39m file\u001b[38;5;241m.\u001b[39mreadlines()\n\u001b[0;32m 9\u001b[0m \u001b[38;5;66;03m# Define the regex patterns\u001b[39;00m\n",
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\IPython\\core\\interactiveshell.py:324\u001b[0m, in \u001b[0;36m_modified_open\u001b[1;34m(file, *args, **kwargs)\u001b[0m\n\u001b[0;32m 317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m file \u001b[38;5;129;01min\u001b[39;00m {\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m}:\n\u001b[0;32m 318\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m 319\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIPython won\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt let you open fd=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfile\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m by default \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 320\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mas it is likely to crash IPython. If you know what you are doing, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 321\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124myou can use builtins\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m open.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 322\u001b[0m )\n\u001b[1;32m--> 324\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mio_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
"\u001b[1;31mTypeError\u001b[0m: expected str, bytes or os.PathLike object, not TextIOWrapper"
]
}
],
"source": [
"# import os\n",
"# file = os.path.join(\"E:\\\\forge\\\\python\\\\robopato\\\\documents\", \"OUROCARD_VISA_INFINITE-Mar_24.txt\")\n",
"file = \"E:\\\\forge\\\\python\\\\robopato\\\\documents\\\\OUROCARD_VISA_INFINITE-Abr_24.txt\"\n",
"# Open the text file\n",
"with open(file, \"r\", encoding=\"latin\") as file:\n",
" # Read the contents of the file\n",
" contents = file.readlines()\n",
" print(contents)\n",
"create_lists(file)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def build_insert(input_dict: dict, account: int):\n",
" from datetime import date, datetime\n",
" from decimal import Decimal\n",
" import re\n",
" import hashlib\n",
"\n",
" insert_bulk = []\n",
"\n",
" # RegEx Patterns\n",
" line_group_pattern = r\"(?P<day>\\d{2})\\.(?P<month>\\d{2})\\.(?P<year>\\d{4})(?:(?P<p_memo>.+PARC (?P<p_nr>\\d+.)\\/(?P<p_tt>\\d+)\\s.{12})|(?P<memo>.{37}))(?P<country>.{2})(?P<outflow>\\s*-?\\d*\\.?\\d+,\\d{2})(?P<inflow>\\s*\\d*\\.?\\d+,\\d{2})\"\n",
" partial_invoice_group_pattern = r\"(?P<day>\\d{2})\\/(?P<month>\\d{2})(?:(?P<p_memo>.+PARC (?P<p_nr>\\d{2})\\/(?P<p_tt>\\d{2}).{15})|(?P<memo>.{43}))(?P<country>.{2})(?P<outflow>\\s+\\s*-?\\d*\\.?\\d+,\\d{2})(?P<inflow>\\s*\\d+,\\d{2})\"\n",
" payment_pattern = r\"(?P<day>\\d{2})\\.(?P<month>\\d{2})\\.(?P<year>\\d{4})(?P<memo>PGTO DEBITO CONTA).*200211(?P<inflow>\\s*-?\\d*\\.?\\d+,\\d{2})(?P<outflow>\\s*\\d+,\\d{2})\"\n",
"\n",
" for key in input_dict:\n",
" if input_dict[key][\"isPartial\"]:\n",
" pattern_to_use = partial_invoice_group_pattern\n",
" else:\n",
" pattern_to_use = line_group_pattern\n",
"\n",
" for item in input_dict[key][\"tlist\"]:\n",
" # check if it is an invoice payment\n",
" matches = re.match(payment_pattern, item)\n",
" if matches:\n",
" tTdate = str(\n",
" date(\n",
" int(matches.group(\"year\")),\n",
" int(matches.group(\"month\")),\n",
" int(matches.group(\"day\")),\n",
" )\n",
" )\n",
" tAccount = account\n",
" tMemo = matches.group(\"memo\")\n",
" tCountry = None\n",
" tOutflow = \"0.00\"\n",
" tInflow = matches.group(\"inflow\").strip().replace(\".\", \"\").replace(\",\", \".\").replace(\"-\", \"\")\n",
" tOwner = input_dict[key][\"owner_id\"]\n",
" tInstallmentNr = None\n",
" tInstallmentTt = None\n",
" tCreated = str(datetime.now(tz=None))\n",
" tUpdated = None\n",
" else:\n",
" matches = re.match(pattern_to_use, item)\n",
" tTdate = str(\n",
" date(\n",
" # partial files will not have the year data on transactions\n",
" int(matches.group(\"year\")) if pattern_to_use == line_group_pattern else datetime.now().year,\n",
" int(matches.group(\"month\")),\n",
" int(matches.group(\"day\")),\n",
" )\n",
" )\n",
" \n",
" tAccount = account\n",
"\n",
" tMemo = matches.group(\"p_memo\") if matches.group(\"p_memo\") else matches.group(\"memo\")\n",
" tInstallmentNr = int(matches.group(\"p_nr\")) if matches.group(\"p_nr\") else None\n",
" tInstallmentTt = int(matches.group(\"p_tt\")) if matches.group(\"p_tt\") else None\n",
"\n",
" tCountry = matches.group(\"country\")\n",
" tOutflow = matches.group(\"outflow\").strip().replace(\".\", \"\").replace(\",\", \".\")\n",
" tInflow = matches.group(\"inflow\").strip().replace(\".\", \"\").replace(\",\", \".\")\n",
" tOwner = input_dict[key][\"owner_id\"]\n",
"\n",
" tCreated = str(datetime.now(tz=None))\n",
" tUpdated = None\n",
"\n",
" preHash = tTdate + tMemo + tOutflow + tInflow\n",
" tId = hashlib.sha256(preHash.encode()).hexdigest()\n",
"\n",
" if matches.group(\"memo\") != \"Saldo Anterior\":\n",
" insert_bulk.append(\n",
" (\n",
" tId,\n",
" tTdate,\n",
" tAccount,\n",
" tMemo.strip(),\n",
" tCountry,\n",
" tOutflow,\n",
" tInflow,\n",
" tOwner,\n",
" tInstallmentNr,\n",
" tInstallmentTt,\n",
" tCreated,\n",
" tUpdated,\n",
" )\n",
" )\n",
"\n",
" return insert_bulk"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def db_insert(insert_bulk: list[tuple]):\n",
" from mysql.connector import connect, Error\n",
"\n",
" try:\n",
" with connect(\n",
" host=\"127.0.0.1\",\n",
" user=\"root\",\n",
" password=\"pleasehashapasswordomg\",\n",
" database=\"default\",\n",
" ) as connection:\n",
" print(\"CONNECTED!\", connection)\n",
" with connection.cursor() as cursor:\n",
" cursor.executemany(insert_query, insert_bulk)\n",
" connection.commit()\n",
" print(\"DONE!\")\n",
" except Error as e:\n",
" print(e)\n",
" finally:\n",
" connection.close()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def executor():\n",
"\n",
" import glob\n",
"\n",
" matched_files = glob.glob(\"./documents/OUROCARD*.txt\")\n",
" # matched_files = glob.glob(\"./documents/OUROCARD_VISA_INFINITE-Mar_24.txt\")\n",
"\n",
" try:\n",
" for file_name in matched_files:\n",
" db_insert(build_insert(create_lists(file_name), 2))\n",
" except:\n",
" print(\"executor(): Error\")\n",
" \n",
" print(\"EXECUTOR COMPLETED.\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error during Transaction Lists creation\n",
"executor(): Error\n",
"EXECUTOR COMPLETED.\n"
]
}
],
"source": [
"executor()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}