From 572caa74ed824fefa02eb81adc7639a783f243c7 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Sun, 10 Aug 2025 19:03:46 +0200 Subject: working on invoice form --- src/administration.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) (limited to 'src/administration.cpp') 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; } -- cgit v1.2.3-70-g09d2