Category management in place
This commit is contained in:
parent
c322a01adb
commit
6f1d7734bf
|
@ -116,3 +116,30 @@ void KissCount::DeleteAccount(struct Account ac)
|
|||
if (it->id == ac.id)
|
||||
_user->_accounts.erase(_user->_accounts.begin()+i);
|
||||
}
|
||||
|
||||
void KissCount::AddCategory(wxString name, wxColour colour)
|
||||
{
|
||||
wxString color;
|
||||
color = _("#") ;
|
||||
color += wxString::Format(_("%02X"), colour.Red());
|
||||
color += wxString::Format(_("%02X"), colour.Green());
|
||||
color += wxString::Format(_("%02X"), colour.Blue());
|
||||
|
||||
_db->AddCategory(_user, name, color);
|
||||
}
|
||||
|
||||
void KissCount::UpdateCategory(wxString oldName, wxString name, wxColour colour)
|
||||
{
|
||||
wxString color;
|
||||
color = _("#") ;
|
||||
color += wxString::Format(_("%02X"), colour.Red());
|
||||
color += wxString::Format(_("%02X"), colour.Green());
|
||||
color += wxString::Format(_("%02X"), colour.Blue());
|
||||
|
||||
_db->UpdateCategory(_user, oldName, name, color);
|
||||
}
|
||||
|
||||
void KissCount::DeleteCategory(wxString name)
|
||||
{
|
||||
_db->DeleteCategory(_user, name);
|
||||
}
|
||||
|
|
|
@ -18,17 +18,24 @@ class KissCount
|
|||
std::list<wxString> GetUsers();
|
||||
bool IsValidUser(wxString user, wxString password);
|
||||
void LoadUser(wxString user);
|
||||
void LoadYear(int year, bool force=false);
|
||||
User* GetUser();
|
||||
double GetAccountAmount(wxString id, int month, int year);
|
||||
void UpdateOperation(struct operation op);
|
||||
|
||||
void LoadYear(int year, bool force=false);
|
||||
|
||||
wxString AddOperation(struct operation op);
|
||||
void UpdateOperation(struct operation op);
|
||||
void DeleteOperation(struct operation op);
|
||||
|
||||
double GetAccountAmount(wxString id, int month, int year);
|
||||
void SetAccountAmount(int month, int year, wxString accountId, double value);
|
||||
void AddAccount(struct Account ac);
|
||||
void UpdateAccount(struct Account ac);
|
||||
void DeleteAccount(struct Account ac);
|
||||
|
||||
void AddCategory(wxString name, wxColour colour);
|
||||
void UpdateCategory(wxString oldName, wxString name, wxColour colour);
|
||||
void DeleteCategory(wxString name);
|
||||
|
||||
private:
|
||||
wxUI* _wxUI;
|
||||
Database* _db;
|
||||
|
|
|
@ -436,3 +436,80 @@ void Database::DeleteAccount(struct Account ac)
|
|||
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
}
|
||||
|
||||
void Database::AddCategory(User* user, wxString name, wxString color)
|
||||
{
|
||||
wxString req;
|
||||
|
||||
req = _("INSERT INTO preference ('user', 'type', 'name', 'value') VALUES ('") ;
|
||||
req += user->_id + _("'");
|
||||
req += _(", 'category'");
|
||||
req += _(", 'name'");
|
||||
req += _(", '") + name + _("'");
|
||||
req += _(")");
|
||||
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
|
||||
req = _("INSERT INTO preference ('user', 'type', 'name', 'value') VALUES ('") ;
|
||||
req += user->_id + _("'");
|
||||
req += _(", 'category_color'");
|
||||
req += _(", '") + name + _("'");
|
||||
req += _(", '") + color + _("'");
|
||||
req += _(")");
|
||||
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
}
|
||||
|
||||
void Database::UpdateCategory(User* user, wxString oldName, wxString name, wxString color)
|
||||
{
|
||||
wxString req;
|
||||
|
||||
if (oldName != name)
|
||||
{
|
||||
req = _("UPDATE preference SET ") ;
|
||||
req += _("value='") + name + _("'");
|
||||
req += _(" WHERE user='") + user->_id + _("'");
|
||||
req += _(" AND type='category'");
|
||||
req += _(" AND name='name'");
|
||||
req += _(" AND value='") + oldName + _("'");
|
||||
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
}
|
||||
|
||||
req = _("UPDATE preference SET ") ;
|
||||
req += _("value='") + color + _("'");
|
||||
req += _(" WHERE user='") + user->_id + _("'");
|
||||
req += _(" AND type='category_color'");
|
||||
req += _(" AND name='") + oldName + _("'");
|
||||
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
|
||||
if (oldName != name)
|
||||
{
|
||||
req = _("UPDATE preference SET ") ;
|
||||
req += _("name='") + name + _("'");
|
||||
req += _(" WHERE user='") + user->_id + _("'");
|
||||
req += _(" AND type='category_color'");
|
||||
req += _(" AND name='") + oldName + _("'");
|
||||
req += _(" AND value='") + color + _("'");
|
||||
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
}
|
||||
}
|
||||
|
||||
void Database::DeleteCategory(User* user, wxString name)
|
||||
{
|
||||
wxString req;
|
||||
req = _("DELETE FROM preference WHERE user='") + user->_id + _("'");
|
||||
req += _(" AND type='category'");
|
||||
req += _(" AND name='name'");
|
||||
req += _(" AND value='") + name + _("'");
|
||||
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
|
||||
req = _("DELETE FROM preference WHERE user='") + user->_id + _("'");
|
||||
req += _(" AND type='category_color'");
|
||||
req += _(" AND name='") + name + _("'");
|
||||
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
}
|
||||
|
|
|
@ -34,6 +34,10 @@ class Database
|
|||
void UpdateAccount(struct Account ac);
|
||||
void DeleteAccount(struct Account ac);
|
||||
|
||||
void AddCategory(User* user, wxString name, wxString color);
|
||||
void UpdateCategory(User* user, wxString oldName, wxString name, wxString color);
|
||||
void DeleteCategory(User* user, wxString name);
|
||||
|
||||
private:
|
||||
wxSQLite3Database _db;
|
||||
|
||||
|
|
|
@ -158,11 +158,17 @@ void PreferencesPanel::InitCategories(User* user)
|
|||
_categoriesGrid->SetCellAlignment(curLine, CATEGORY_COLOR, wxALIGN_CENTRE, wxALIGN_CENTRE);
|
||||
_categoriesGrid->SetCellAlignment(curLine, CATEGORY_FONT, wxALIGN_CENTRE, wxALIGN_CENTRE);
|
||||
_categoriesGrid->SetCellAlignment(curLine, CATEGORY_DELETE, wxALIGN_CENTRE, wxALIGN_CENTRE);
|
||||
|
||||
_categoriesIndexes[curLine] = it->second;
|
||||
}
|
||||
|
||||
_categoriesGrid->SetReadOnly(0, CATEGORY_DELETE, true);
|
||||
_categoriesGrid->AutoSizeColumns(true);
|
||||
|
||||
_categoriesGrid->AppendRows();
|
||||
_categoriesGrid->SetReadOnly(curLine, CATEGORY_COLOR, true);
|
||||
_categoriesGrid->SetReadOnly(curLine, CATEGORY_FONT, true);
|
||||
_categoriesGrid->SetReadOnly(curLine, CATEGORY_DELETE, true);
|
||||
SET_ROW_COLOR(curLine, OWN_GREEN);
|
||||
}
|
||||
|
||||
|
@ -316,4 +322,75 @@ void PreferencesPanel::OnAccountModified(wxGridEvent& event)
|
|||
|
||||
void PreferencesPanel::OnCategoryModified(wxGridEvent& event)
|
||||
{
|
||||
int op_complete = 1;
|
||||
wxString value, categoryName ;
|
||||
User* user = _kiss->GetUser();
|
||||
int row = event.GetRow();
|
||||
int col = event.GetCol();
|
||||
static bool inModification = false ;
|
||||
|
||||
if (inModification) return;
|
||||
|
||||
inModification = true;
|
||||
|
||||
value = _categoriesGrid->GetCellValue(row, CATEGORY_NAME);
|
||||
if (value != _(""))
|
||||
{
|
||||
categoryName = value;
|
||||
op_complete--;
|
||||
}
|
||||
|
||||
// Categories modification
|
||||
if (user->GetCategoriesNumber() && row < user->GetCategoriesNumber())
|
||||
{
|
||||
if (col == CATEGORY_DELETE)
|
||||
{
|
||||
wxMessageDialog dialog(_wxUI, _("Are you sure want to delete : \n")+categoryName, _("KissCount"), wxYES_NO);
|
||||
if (dialog.ShowModal() == wxID_NO)
|
||||
{
|
||||
_categoriesGrid->SetCellValue(row, col, _("0"));
|
||||
}
|
||||
else
|
||||
{
|
||||
_categoriesIndexes.erase(row);
|
||||
_categoriesGrid->DeleteRows(row, 1);
|
||||
_kiss->DeleteCategory(categoryName);
|
||||
}
|
||||
|
||||
_wxUI->Layout();
|
||||
inModification = false;
|
||||
return;
|
||||
}
|
||||
_kiss->UpdateCategory(_categoriesIndexes[row], categoryName, _categoriesGrid->GetCellBackgroundColour(row, col));
|
||||
}
|
||||
// New category
|
||||
else
|
||||
{
|
||||
if (op_complete)
|
||||
{
|
||||
inModification = false;
|
||||
return ;
|
||||
}
|
||||
|
||||
_categoriesIndexes[row] = categoryName;
|
||||
_kiss->AddCategory(categoryName, _categoriesGrid->GetCellBackgroundColour(row, col));
|
||||
_categoriesGrid->SetReadOnly(row, CATEGORY_COLOR, false);
|
||||
_categoriesGrid->SetReadOnly(row, CATEGORY_FONT, false);
|
||||
_categoriesGrid->SetReadOnly(row, CATEGORY_DELETE, false);
|
||||
_categoriesGrid->SetCellRenderer(row, CATEGORY_DELETE, new wxGridCellBoolRenderer ());
|
||||
_categoriesGrid->SetCellEditor(row, CATEGORY_DELETE, new wxGridCellBoolEditor ());
|
||||
|
||||
_categoriesGrid->SetCellAlignment(row, CATEGORY_COLOR, wxALIGN_CENTRE, wxALIGN_CENTRE);
|
||||
_categoriesGrid->SetCellAlignment(row, CATEGORY_FONT, wxALIGN_CENTRE, wxALIGN_CENTRE);
|
||||
_categoriesGrid->SetCellAlignment(row, CATEGORY_DELETE, wxALIGN_CENTRE, wxALIGN_CENTRE);
|
||||
|
||||
row++;
|
||||
_categoriesGrid->AppendRows();
|
||||
_categoriesGrid->SetReadOnly(row, CATEGORY_COLOR, true);
|
||||
_categoriesGrid->SetReadOnly(row, CATEGORY_FONT, true);
|
||||
_categoriesGrid->SetReadOnly(row, CATEGORY_DELETE, true);
|
||||
SET_ROW_COLOR(row, OWN_GREEN);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user