summaryrefslogtreecommitdiff
path: root/src/administration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/administration.cpp')
-rw-r--r--src/administration.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index 869855e..a34ece8 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -199,6 +199,71 @@ static void administration_create_default_cost_centers()
ADD_COSTCENTER("costcenter.other_specialized", "OTHR");
}
+static void administration_create_debug_data()
+{
+ #define ADD_CONSUMER(_name, _addr1, _addr2, _cc)\
+ {contact _c = administration_create_empty_contact();\
+ strops_copy(_c.name, _name, sizeof(_c.name));\
+ strops_copy(_c.address.address1, _addr1, sizeof(_c.address.address1));\
+ strops_copy(_c.address.address2, _addr2, sizeof(_c.address.address2));\
+ strops_copy(_c.address.country_code, _cc, sizeof(_c.address.country_code));\
+ _c.type = contact_type::CONTACT_CONSUMER;\
+ administration_create_contact(_c);};
+
+ #define ADD_BUSINESS(_name, _addr1, _addr2, _cc, _tc, _bc)\
+ {contact _c = administration_create_empty_contact();\
+ strops_copy(_c.name, _name, sizeof(_c.name));\
+ strops_copy(_c.address.address1, _addr1, sizeof(_c.address.address1));\
+ strops_copy(_c.address.address2, _addr2, sizeof(_c.address.address2));\
+ strops_copy(_c.address.country_code, _cc, sizeof(_c.address.country_code));\
+ strops_copy(_c.taxid, _tc, sizeof(_c.taxid));\
+ strops_copy(_c.businessid, _bc, sizeof(_c.businessid));\
+ _c.type = contact_type::CONTACT_BUSINESS;\
+ administration_create_contact(_c);};
+
+ #define ADD_PROJECT(_name)\
+ {project _c = administration_create_empty_project();\
+ strops_copy(_c.description, _name, sizeof(_c.description));\
+ administration_create_project(_c);};
+
+ ADD_CONSUMER("Emma Müller", "Hauptstraße 12", "10115 Berlin", "DE");
+ ADD_CONSUMER("Luca Rossi", "Via Roma 45", "00184 Roma", "IT");
+ ADD_CONSUMER("Sofia Garcia", "Calle Mayor 7", "28013 Madrid", "ES");
+ ADD_CONSUMER("Jean Dupont", "10 Rue de la Paix", "75002 Paris", "FR");
+ ADD_CONSUMER("Anna Nowak", "ul. Kwiatowa 3", "00-001 Warszawa", "PL");
+ ADD_CONSUMER("Mikkel Jensen", "Østergade 8", "8000 Aarhus", "DK");
+ ADD_CONSUMER("Maria Svensson", "Kungsgatan 15", "111 22 Stockholm", "SE");
+ ADD_CONSUMER("Péter Kovács", "Fő utca 25", "1051 Budapest", "HU");
+ ADD_CONSUMER("Lucas Silva", "Rua Augusta 100", "1250-001 Lisboa", "PT");
+ ADD_CONSUMER("Isabelle Lefevre", "5 Place Stanislas", "54000 Nancy", "FR");
+
+ ADD_BUSINESS("Schmidt & Co GmbH", "Friedrichstraße 45", "10117 Berlin", "DE", "DE123456789", "HRB123456");
+ ADD_BUSINESS("Bianchi Srl", "Corso Venezia 12", "20121 Milano", "IT", "IT987654321", "MI1234567");
+ ADD_BUSINESS("Fernández y Asociados", "Gran Vía 20", "28013 Madrid", "ES", "ES456789123", "CIFB123456");
+ ADD_BUSINESS("Martin & Partners", "12 Avenue Victor Hugo", "75016 Paris", "FR", "FR321654987", "SIRET123456");
+ ADD_BUSINESS("Zielińska Consulting", "ul. Marszałkowska 10", "00-590 Warszawa", "PL", "PL789123456", "REGON123456");
+ ADD_BUSINESS("Sørensen ApS", "Strøget 3", "1460 København", "DK", "DK654321789", "CVR12345678");
+ ADD_BUSINESS("Johansson AB", "Drottninggatan 22", "111 51 Stockholm", "SE", "SE987654321", "OrgNr1234567");
+ ADD_BUSINESS("Nagy Kft.", "Andrássy út 60", "1062 Budapest", "HU", "HU123987654", "Cégjegyzékszám123");
+ ADD_BUSINESS("Santos Lda.", "Avenida da Liberdade 50", "1250-142 Lisboa", "PT", "PT321789654", "NIPC123456789");
+ ADD_BUSINESS("Dupuis SARL", "8 Rue Saint-Denis", "75001 Paris", "FR", "FR456123789", "SIREN123456");
+ ADD_BUSINESS("Müller & Söhne GmbH", "Leipziger Platz 8", "10117 Berlin", "DE", "DE654987321", "HRB987654");
+ ADD_BUSINESS("Romano Srl", "Via Garibaldi 14", "16124 Genova", "IT", "IT321654987", "GE1239876");
+ ADD_BUSINESS("López Asociados", "Plaza del Pilar 6", "50003 Zaragoza", "ES", "ES789321654", "CIFC654321");
+ ADD_BUSINESS("Laurent & Fils", "15 Boulevard Haussmann", "75009 Paris", "FR", "FR987321654", "SIRET654987");
+ ADD_BUSINESS("Kowalczyk Sp. z o.o.", "ul. Piotrkowska 55", "90-001 Łódź", "PL", "PL123456789", "REGON654321");
+ ADD_BUSINESS("Nielsen ApS", "Nørregade 12", "1165 København", "DK", "DK789456123", "CVR87654321");
+ ADD_BUSINESS("Lindberg AB", "Vasagatan 18", "111 20 Stockholm", "SE", "SE456789123", "OrgNr7654321");
+ ADD_BUSINESS("Szabó Kft.", "Kossuth Lajos tér 1", "1055 Budapest", "HU", "HU987123654", "Cégjegyzékszám654321");
+ ADD_BUSINESS("Costa Lda.", "Rua do Ouro 24", "1100-063 Lisboa", "PT", "PT654123987", "NIPC987654321");
+ ADD_BUSINESS("Moreau SARL", "3 Place de la République", "75011 Paris", "FR", "FR321456987", "SIREN789123");
+
+ ADD_PROJECT("eCommerce");
+ ADD_PROJECT("Retail store #1");
+ ADD_PROJECT("Retail store #2");
+ ADD_PROJECT("Kayak rental");
+}
+
void administration_create()
{
g_administration.next_id = 1;
@@ -220,6 +285,7 @@ void administration_create()
administration_create_default_tax_brackets();
administration_create_default_cost_centers();
+ administration_create_debug_data();
}
void administration_destroy()
@@ -232,6 +298,8 @@ void administration_destroy()
bool administration_create_contact(contact data)
{
+ if (!administration_is_contact_valid(data)) return false;
+
contact* new_contact = (contact*)malloc(sizeof(contact));
memcpy((void*)new_contact, (void*)&data, sizeof(contact));
list_append(&g_administration.contacts, new_contact);
@@ -250,6 +318,8 @@ bool administration_can_contact_be_deleted(contact data)
bool administration_update_contact(contact data)
{
+ if (!administration_is_contact_valid(data)) return false;
+
list_iterator_start(&g_administration.contacts);
while (list_iterator_hasnext(&g_administration.contacts)) {
contact* c = (contact *)list_iterator_next(&g_administration.contacts);
@@ -309,6 +379,25 @@ u32 administration_get_contacts(u32 page_index, u32 page_size, contact* buffer)
return write_cursor;
}
+int administration_get_contact_recommendations(contact* buffer, int buf_size, char* name)
+{
+ int write_cursor = 0;
+ if (name[0] == '\0') return 0;
+
+ list_iterator_start(&g_administration.contacts);
+ while (list_iterator_hasnext(&g_administration.contacts)) {
+ contact c = *(contact *)list_iterator_next(&g_administration.contacts);
+
+ if (strops_stristr(c.name, name)) {
+ buffer[write_cursor++] = c;
+ if (write_cursor >= buf_size) break;
+ }
+ }
+ list_iterator_stop(&g_administration.contacts);
+
+ return write_cursor;
+}
+
char* administration_get_file_path()
{
return g_administration.path;
@@ -348,6 +437,11 @@ void administration_cancel_project(project data)
administration_update_project(data);
}
+bool administration_is_project_valid(project data)
+{
+ return strlen(data.description) > 0;
+}
+
char* administration_project_get_status_string(project data)
{
switch(data.state)
@@ -362,6 +456,8 @@ char* administration_project_get_status_string(project data)
bool administration_create_project(project data)
{
+ if (!administration_is_project_valid(data)) return false;
+
data.state = project_state::PROJECT_RUNNING;
data.start_date = time(NULL);
data.end_date = 0;
@@ -376,6 +472,8 @@ bool administration_create_project(project data)
bool administration_update_project(project data)
{
+ if (!administration_is_project_valid(data)) return false;
+
list_iterator_start(&g_administration.projects);
while (list_iterator_hasnext(&g_administration.projects)) {
project* c = (project *)list_iterator_next(&g_administration.projects);
@@ -572,12 +670,20 @@ static s32 administration_create_sequence_number()
return g_administration.next_sequence_number;
}
+static time_t administration_get_default_invoice_expire_duration()
+{
+ return (30 * 24 * 60 * 60); // 30 days
+}
+
invoice administration_create_empty_invoice()
{
invoice result;
memset(&result, 0, sizeof(invoice));
snprintf(result.id, sizeof(result.id), "I/%d", administration_create_id());
snprintf(result.sequential_number, sizeof(result.id), "INV%010d", administration_create_sequence_number());
+ result.issued_at = time(NULL);
+ result.delivered_at = time(NULL);
+ result.expires_at = time(NULL) + administration_get_default_invoice_expire_duration();
return result;
}