#pragma once #include "config.hpp" #include "simclist.h" typedef struct { char country_code[3]; float rate; char description[32]; } country_tax_bracket; typedef struct { char address1[128]; char address2[128]; char country[128]; } address; typedef struct { char id[16]; char name[64]; address address; char taxid[32]; char businessid[32]; char email[64]; char phone_number[16]; char bank_account[32]; } contact; typedef enum { RUNNING, PAUSED, CANCELLED, } project_state; typedef struct { char id[16]; char description[64]; project_state state; time_t start_date; time_t end_date; } project; typedef enum { INVOICE_PAID, INVOICE_EXPIRED, INVOICE_CANCELLED, INVOICE_REFUNDED, INVOICE_CORRECTED, } invoice_status; typedef struct { char id[16]; char invoice_id[16]; char description[128]; country_tax_bracket tax_bracket; char tax_section[16]; s32 amount; s32 net_per_item; s32 net; s32 discount; s32 tax; bool is_intra_community; bool is_triangulation; char currency[16]; char internal_code[64]; } billing_item; typedef struct { char id[16]; char sequential_number[16]; char customer_id[16]; char supplier_id[16]; time_t issued_at; time_t delivered_at; time_t expires_at; char document[255]; list_t billing_items; char project_id[16]; char cost_center_id[16]; char cost_unit_id[16]; s32 total; s32 tax; s32 net; invoice_status status; address shipping_address; char currency[16]; time_t keep_untill; time_t payment_on_account_date; char tax_representative[64]; char corrected_sequential_number[16]; } invoice; typedef struct { contact company_info; s32 next_id; char path[4096]; char program_version[10]; char country_code[3]; list_t contacts; list_t projects; list_t invoices; list_t tax_brackets; char ai_service[16]; char ai_key[32]; char email_service[16]; char email_key[32]; } administration; void administration_create(); void administration_destroy(); char* administration_get_file_path(); s32 administration_create_id(); contact administration_get_company_info(); void administration_set_company_info(contact data); bool administration_remove_contact(contact data); bool administration_create_contact(contact data); bool administration_update_contact(contact data); u32 administration_get_contact_count(); u32 administration_get_contacts(u32 page_index, u32 page_size, contact* buffer); void administration_cancel_project(project data); bool administration_remove_project(project data); bool administration_create_project(project data); bool administration_update_project(project data); char* administration_project_get_status_string(project data); u32 administration_get_project_count(); u32 administration_get_projects(u32 page_index, u32 page_size, project* buffer); u32 administration_get_tax_bracket_count(); u32 administration_get_tax_brackets(country_tax_bracket* buffer);