Avancement du projet

This commit is contained in:
thatscringebro
2026-03-10 10:36:11 -04:00
parent b267360b2e
commit 7b8312af12
6 changed files with 48 additions and 27 deletions

View File

@@ -23,6 +23,9 @@ impl App {
panic!("stopping"); panic!("stopping");
} }
}; };
data_layer::setup(&con);
return App { return App {
current_screen: CurrentScreen::Main, current_screen: CurrentScreen::Main,
current_widget: CurrentWidget::AccountList, current_widget: CurrentWidget::AccountList,
@@ -36,15 +39,9 @@ impl App {
} }
pub fn get_list_accounts(&mut self) -> Vec<Account> { pub fn get_list_accounts(&mut self) -> Vec<Account> {
let mut accounts = self.acc_list.get_accounts(&self.connection); return self.acc_list.get_accounts(&self.connection);
let all = Account::new(0, "All".to_string(), AccountType::Cash);
accounts.insert(0, all);
return accounts;
} }
pub fn first_ac(&mut self) {
self.acc_list.state.select_first();
}
pub fn next_ac(&mut self) { pub fn next_ac(&mut self) {
self.acc_list.state.select_next(); self.acc_list.state.select_next();
} }
@@ -59,9 +56,6 @@ impl App {
return accounts.to_vec(); return accounts.to_vec();
} }
pub fn first_tr(&mut self) {
self.trx_list.state.select_first();
}
pub fn next_tr(&mut self) { pub fn next_tr(&mut self) {
self.trx_list.state.select_next(); self.trx_list.state.select_next();
} }
@@ -74,4 +68,10 @@ impl App {
self.acc_list.add_account(ac); self.acc_list.add_account(ac);
self.new_account = Account::new(0, String::new(), AccountType::Cash); self.new_account = Account::new(0, String::new(), AccountType::Cash);
} }
pub fn save_new_tr(&mut self) {
let tr = data_layer::upsert_transaction(&self.connection, self.new_transaction.clone());
self.trx_list.add_tr(tr);
self.new_transaction = Transaction::new_empty();
}
} }

View File

@@ -101,6 +101,9 @@ pub fn get_accounts(con: &Connection) -> Vec<Account> {
let mut statement = con.prepare(query).unwrap(); let mut statement = con.prepare(query).unwrap();
let mut vec = Vec::<Account>::new(); let mut vec = Vec::<Account>::new();
let all = Account::new(0, "All".to_string(), AccountType::Cash);
vec.push(all);
while let Ok(State::Row) = statement.next() { while let Ok(State::Row) = statement.next() {
vec.push(Account::new( vec.push(Account::new(
statement.read::<i64, _>("id").unwrap(), statement.read::<i64, _>("id").unwrap(),
@@ -237,10 +240,11 @@ pub fn get_account_transactions(con: &Connection, ac_id: i64) -> Vec<Transaction
if ac_id == 0 { if ac_id == 0 {
return get_transactions(con); return get_transactions(con);
} }
// println!("allo{}", ac_id);
let query = "SELECT * FROM Transactions WHERE account_id = ?"; let query = "SELECT * FROM Transactions WHERE account_id = :id";
let mut statement = con.prepare(query).unwrap(); let mut statement = con.prepare(query).unwrap();
statement.bind((1, ac_id)).unwrap(); statement.bind((":id", ac_id)).unwrap();
let mut vec = Vec::<Transaction>::new(); let mut vec = Vec::<Transaction>::new();
while let Ok(State::Row) = statement.next() { while let Ok(State::Row) = statement.next() {
@@ -259,7 +263,7 @@ pub fn get_account_transactions(con: &Connection, ac_id: i64) -> Vec<Transaction
} }
pub fn get_transactions(con: &Connection) -> Vec<Transaction> { pub fn get_transactions(con: &Connection) -> Vec<Transaction> {
let query = "SELECT * FROM TransactionTypes"; let query = "SELECT * FROM Transactions";
let mut statement = con.prepare(query).unwrap(); let mut statement = con.prepare(query).unwrap();
let mut vec = Vec::<Transaction>::new(); let mut vec = Vec::<Transaction>::new();

View File

@@ -24,8 +24,13 @@ impl TrxList {
return Vec::new(); return Vec::new();
} }
if self.trx.iter().count() == 0 || self.ac_id != ac_id { if self.trx.iter().count() == 0 || self.ac_id != ac_id {
self.ac_id = ac_id;
self.trx = data_layer::get_account_transactions(con, ac_id); self.trx = data_layer::get_account_transactions(con, ac_id);
} }
return self.trx.clone(); return self.trx.clone();
} }
pub fn add_tr(&mut self, tr: Transaction) {
self.trx.push(tr);
}
} }

View File

@@ -1,6 +1,5 @@
pub enum CurrentWidget { pub enum CurrentWidget {
AccountList, AccountList,
TrxInfo,
TrxList, TrxList,
} }
pub enum CurrentScreen { pub enum CurrentScreen {

View File

@@ -4,7 +4,7 @@ mod entities;
mod enums; mod enums;
mod ui; mod ui;
use crate::{app::App, enums::*, ui::ui}; use crate::{app::App, enums::*, ui::ui};
use entities::{Account, AccountType}; use entities::{Account, AccountType, Transaction};
use ratatui::{ use ratatui::{
Terminal, Terminal,
crossterm::{ crossterm::{
@@ -101,9 +101,13 @@ fn run_app<B: Backend>(terminal: &mut Terminal<B>, app: &mut App) -> io::Result<
_ => {} _ => {}
}, },
CurrentScreen::NewTransaction => match key.code { CurrentScreen::NewTransaction => match key.code {
KeyCode::Enter => {} KeyCode::Enter => {
app.save_new_tr();
app.current_screen = CurrentScreen::Main;
}
KeyCode::Esc => { KeyCode::Esc => {
app.current_screen = CurrentScreen::Main; app.current_screen = CurrentScreen::Main;
app.new_transaction = Transaction::new_empty();
} }
_ => {} _ => {}
}, },

View File

@@ -6,15 +6,9 @@ use crate::{
use ratatui::{ use ratatui::{
Frame, Frame,
layout::{Constraint, Direction, Layout, Rect}, layout::{Constraint, Direction, Layout, Rect},
style::{ style::{Color, Modifier, Style, Stylize, palette::tailwind::SLATE},
Color, Modifier, Style, Stylize,
palette::tailwind::{BLUE, GREEN, SLATE},
},
text::{Line, Text}, text::{Line, Text},
widgets::{ widgets::{Block, Borders, HighlightSpacing, List, ListItem, Paragraph, StatefulWidget, Wrap},
Block, Borders, Clear, HighlightSpacing, List, ListItem, Paragraph, StatefulWidget, Widget,
Wrap,
},
}; };
const NORMAL_ROW_BG: Color = SLATE.c950; const NORMAL_ROW_BG: Color = SLATE.c950;
@@ -36,7 +30,7 @@ pub fn ui(frame: &mut Frame, app: &mut App) {
.title("Accounts") .title("Accounts")
.borders(Borders::ALL) .borders(Borders::ALL)
.border_style(Style::new().fg(Color::DarkGray)); .border_style(Style::new().fg(Color::DarkGray));
let mut info_block = Block::default() let info_block = Block::default()
.title("Account info") .title("Account info")
.borders(Borders::ALL) .borders(Borders::ALL)
.border_style(Style::new().fg(Color::DarkGray)); .border_style(Style::new().fg(Color::DarkGray));
@@ -47,7 +41,6 @@ pub fn ui(frame: &mut Frame, app: &mut App) {
let active_style = Style::default(); let active_style = Style::default();
match app.current_widget { match app.current_widget {
CurrentWidget::AccountList => ac_block = ac_block.border_style(active_style), CurrentWidget::AccountList => ac_block = ac_block.border_style(active_style),
CurrentWidget::TrxInfo => info_block = info_block.border_style(active_style),
CurrentWidget::TrxList => trx_block = trx_block.border_style(active_style), CurrentWidget::TrxList => trx_block = trx_block.border_style(active_style),
}; };
@@ -109,6 +102,19 @@ pub fn ui(frame: &mut Frame, app: &mut App) {
.title("New account") .title("New account")
.borders(Borders::all()) .borders(Borders::all())
.style(Style::default()); .style(Style::default());
let area = centered_rect(50, 40, frame.area());
frame.render_widget(popup, area);
}
if let CurrentScreen::NewTransaction = app.current_screen {
let popup = Block::default()
.title("New Transaction")
.borders(Borders::all())
.style(Style::default());
let area = centered_rect(50, 40, frame.area());
frame.render_widget(popup, area);
} }
if let CurrentScreen::Exiting = app.current_screen { if let CurrentScreen::Exiting = app.current_screen {
@@ -160,7 +166,10 @@ const fn alternate_colors(i: usize) -> Color {
impl From<&Account> for ListItem<'_> { impl From<&Account> for ListItem<'_> {
fn from(value: &Account) -> Self { fn from(value: &Account) -> Self {
let line = Line::styled(value.get_name(), TEXT_FG_COLOR); let line = Line::styled(
value.get_id().to_string() + " " + &value.get_name(),
TEXT_FG_COLOR,
);
ListItem::new(line) ListItem::new(line)
} }
} }