KissCount/controller/KissCount.cpp

250 lines
5.3 KiB
C++
Raw Normal View History

#include "KissCount.h"
2010-05-16 10:35:34 +02:00
KissCount::KissCount() : _user(NULL)
{
_wxUI = new wxUI(this, _("KissCount"), wxPoint(50, 50), wxSize(1024, 768));
_wxUI->Show(true);
_wxUI->Centre();
_wxUI->Disable();
try
{
_db = new Database();
}
catch (std::string s)
{
_wxUI->Close(true);
throw s;
}
_wxUI->ChangeUser();
_wxUI->Enable();
}
KissCount::~KissCount()
{
delete _db;
delete _wxUI;
2010-05-16 10:35:34 +02:00
if (_user) delete _user;
}
std::list<wxString> KissCount::GetUsers()
{
return _db->GetUsers();
}
bool KissCount::IsValidUser(wxString user, wxString password)
{
return _db->IsValidUser(user, password) ;
}
void KissCount::LoadUser(wxString user)
{
2010-05-16 10:35:34 +02:00
if (_user) delete _user;
_user = _db->LoadUser(user) ;
2010-05-24 20:14:15 +02:00
if (_user)
_wxUI->LoadUser();
2010-05-16 10:35:34 +02:00
}
2010-05-17 18:03:21 +02:00
void KissCount::LoadYear(int year, bool force)
2010-05-16 10:35:34 +02:00
{
if (!force && _user->_operations[year] != NULL) return;
if (_user->_operations[year] != NULL)
{
delete _user->_operations[year];
}
_db->LoadYear(_user, year);
}
2010-05-16 10:35:34 +02:00
User* KissCount::GetUser()
{
return _user;
}
2010-06-02 22:14:11 +02:00
double KissCount::GetAccountAmount(wxString id, int month, int year)
{
return _db->GetAccountAmount(id, month, year);
}
2010-06-03 18:28:38 +02:00
void KissCount::UpdateOperation(struct operation op)
{
_db->UpdateOperation(op);
}
2010-06-21 13:02:02 +02:00
wxString KissCount::AddOperation(struct operation op)
2010-06-03 18:28:38 +02:00
{
2010-06-21 13:02:02 +02:00
return _db->AddOperation(_user, op);
2010-06-03 18:28:38 +02:00
}
void KissCount::DeleteOperation(struct operation op)
{
_db->DeleteOperation(op);
}
2010-06-12 15:59:27 +02:00
2010-06-24 21:02:42 +02:00
void KissCount::DeleteOperations(int month, int year)
{
_db->DeleteOperations(_user, month, year);
if (month != -1)
(*_user->_operations[year]).erase(month);
if (month == -1 || !_user->_operations[year]->size())
{
delete _user->_operations[year];
_user->_operations.erase(year);
}
}
2010-06-12 15:59:27 +02:00
void KissCount::SetAccountAmount(int month, int year, wxString accountId, double amount)
{
_db->SetAccountAmount(month, year, accountId, amount);
}
2010-06-21 10:53:43 +02:00
2010-06-21 13:02:02 +02:00
void KissCount::AddAccount(struct Account ac)
2010-06-21 10:53:43 +02:00
{
2010-06-21 13:02:02 +02:00
ac.id = _db->AddAccount(_user, ac);
_user->_accounts.push_back(ac);
2010-06-21 10:53:43 +02:00
}
void KissCount::UpdateAccount(struct Account ac)
{
2010-06-21 13:02:02 +02:00
std::vector<Account>::iterator it;
int i;
2010-06-21 10:53:43 +02:00
_db->UpdateAccount(ac);
2010-06-21 13:02:02 +02:00
for (i=0, it=_user->_accounts.begin(); it !=_user->_accounts.end(); it++, i++)
if (it->id == ac.id)
_user->_accounts[i] = ac;
2010-06-21 10:53:43 +02:00
}
void KissCount::DeleteAccount(struct Account ac)
{
2010-06-21 13:02:02 +02:00
std::vector<Account>::iterator it;
int i;
2010-06-21 10:53:43 +02:00
_db->DeleteAccount(ac);
2010-06-21 13:02:02 +02:00
for (i=0, it=_user->_accounts.begin(); it !=_user->_accounts.end(); it++, i++)
if (it->id == ac.id)
_user->_accounts.erase(_user->_accounts.begin()+i);
2010-06-21 10:53:43 +02:00
}
2010-06-22 11:35:21 +02:00
2010-06-22 12:29:36 +02:00
wxString KissCount::AddCategory(struct category category)
2010-06-22 11:35:21 +02:00
{
2010-06-27 21:39:49 +02:00
wxString id;
id = _db->AddCategory(_user, category);
category.id = id;
_user->_preferences._categories.push_back(category);
return id;
2010-06-22 11:35:21 +02:00
}
2010-06-22 12:29:36 +02:00
void KissCount::UpdateCategory(wxString oldName, struct category category)
2010-06-22 11:35:21 +02:00
{
wxString color;
2010-06-27 21:39:49 +02:00
std::vector<struct category>::iterator it;
2010-06-22 11:35:21 +02:00
color = _("#") ;
2010-06-22 12:29:36 +02:00
color += wxString::Format(_("%02X"), category.color.Red());
color += wxString::Format(_("%02X"), category.color.Green());
color += wxString::Format(_("%02X"), category.color.Blue());
2010-06-22 11:35:21 +02:00
2010-06-22 12:29:36 +02:00
_db->UpdateCategory(_user, oldName, category.name, color);
2010-06-27 21:39:49 +02:00
for (int i=0; i<(int)_user->_preferences._categories.size();i++)
if (_user->_preferences._categories[i].name == oldName)
{
_user->_preferences._categories[i] = category;
break;
}
2010-06-22 11:35:21 +02:00
}
2010-06-22 12:29:36 +02:00
void KissCount::DeleteCategory(struct category category)
2010-06-22 11:35:21 +02:00
{
2010-06-22 12:29:36 +02:00
_db->DeleteCategory(_user, category);
2010-06-27 21:39:49 +02:00
for (int i=0; i<(int)_user->_preferences._categories.size();i++)
if (_user->_preferences._categories[i].name == category.name)
{
_user->_preferences._categories.erase(_user->_preferences._categories.begin()+i);
break;
}
2010-06-22 11:35:21 +02:00
}
2010-06-23 14:25:00 +02:00
std::map<int, std::vector<int> > KissCount::GetAllOperations()
{
return _db->GetAllOperations(_user);
}
2010-06-23 19:32:42 +02:00
void KissCount::GenerateMonth(int monthFrom, int yearFrom, int monthTo, int yearTo)
{
std::vector<operation>::iterator it;
operation op;
_db->GenerateMonth(_user, monthFrom, yearFrom, monthTo, yearTo);
2010-06-24 21:02:42 +02:00
if (!_user->_operations[yearTo])
_user->_operations[yearTo] = new std::map<unsigned int, std::vector<operation> >();
2010-06-23 19:32:42 +02:00
if (monthFrom != -1 && yearFrom != -1)
{
LoadYear(yearFrom, false);
2010-06-24 21:02:42 +02:00
2010-06-23 19:32:42 +02:00
for(it = (*_user->_operations[yearFrom])[monthFrom].begin();
it != (*_user->_operations[yearFrom])[monthFrom].end()
&& it->fix_cost;
it++)
{
op = *it;
op.month = monthTo;
op.year = yearTo;
2010-06-23 20:30:42 +02:00
op.id = AddOperation(op);
(*_user->_operations[yearTo])[monthTo].push_back(op);
2010-06-23 19:32:42 +02:00
}
}
_wxUI->GenerateMonth(monthTo, yearTo);
}
2010-06-27 21:39:49 +02:00
void KissCount::ChangePassword(wxString password)
{
_db->ChangePassword(_user, password);
}
bool KissCount::UserExists(wxString name)
{
return _db->UserExists(name);
}
void KissCount::ChangeName(wxString name)
{
_db->ChangeName(_user, name);
_user->_name = name;
}
void KissCount::NewUser(wxString name)
{
wxDateTime curDate;
struct Account ac = {_(""), _("Account 1"), _(""), false, true};
_db->NewUser(name);
if (_user) delete _user;
_user = _db->LoadUser(name) ;
curDate.SetToCurrent();
AddAccount(ac);
_db->GenerateMonth(_user, -1, -1, (int)curDate.GetMonth(), curDate.GetYear());
}
void KissCount::KillMe()
{
_wxUI->KillMe();
_db->KillMe(_user);
delete _user;
_user = NULL;
_wxUI->ChangeUser();
}