diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-09-27 09:47:26 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-09-27 09:47:26 +0200 |
| commit | 58edcf619ee9d589dd7b54b8a9cbd4271740c13b (patch) | |
| tree | fccd23132f96eb3f5da3b530b78ad826f534687f /src | |
| parent | bd3f2b84742067d0b9049b9f42f2266f94dbb0f9 (diff) | |
fix shipping info r/w issue. fix date r/w timezone issue.
Diffstat (limited to 'src')
| -rw-r--r-- | src/administration.cpp | 43 | ||||
| -rw-r--r-- | src/administration_reader.cpp | 4 | ||||
| -rw-r--r-- | src/administration_writer.cpp | 15 | ||||
| -rw-r--r-- | src/ui/ui_contacts.cpp | 20 | ||||
| -rw-r--r-- | src/ui/ui_expenses.cpp | 3 | ||||
| -rw-r--r-- | src/ui/ui_invoices.cpp | 3 |
6 files changed, 66 insertions, 22 deletions
diff --git a/src/administration.cpp b/src/administration.cpp index b6dfcbb..af276f3 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -871,6 +871,18 @@ int administration_contact_get_autocompletions(contact* buffer, int buf_size, ch return write_cursor; } +a_err administration_addressee_is_valid(delivery_info data) +{ + a_err result = A_ERR_SUCCESS; + if (strlen(data.name) == 0) result |= A_ERR_MISSING_NAME; + if (strlen(data.address.city) == 0) result |= A_ERR_MISSING_CITY; + if (strlen(data.address.postal) == 0) result |= A_ERR_MISSING_POSTAL; + if (strlen(data.address.address1) == 0) result |= A_ERR_MISSING_ADDRESS1; + if (strlen(data.address.country_code) == 0) result |= A_ERR_MISSING_COUNTRYCODE; + + return result; +} + a_err administration_contact_is_valid(contact data) { a_err result = A_ERR_SUCCESS; @@ -879,7 +891,6 @@ a_err administration_contact_is_valid(contact data) if (strlen(data.address.city) == 0) result |= A_ERR_MISSING_CITY; if (strlen(data.address.postal) == 0) result |= A_ERR_MISSING_POSTAL; if (strlen(data.address.address1) == 0) result |= A_ERR_MISSING_ADDRESS1; - //if (strlen(data.address.address2) == 0) return 0; if (strlen(data.address.country_code) == 0) result |= A_ERR_MISSING_COUNTRYCODE; if (data.type == contact_type::CONTACT_BUSINESS) @@ -1080,6 +1091,7 @@ project administration_project_create_empty() memset(&result, 0, sizeof(project)); result.state = project_state::PROJECT_RUNNING; result.start_date = time(NULL); + result.start_date -= (result.start_date % 86400); result.end_date = 0; snprintf(result.id, sizeof(result.id), "P/%d", administration_create_id()); return result; @@ -1461,7 +1473,7 @@ a_err administration_invoice_is_valid(invoice* invoice) { a_err result = A_ERR_SUCCESS; if (list_size(&invoice->billing_items) == 0) result |= A_ERR_MISSING_BILLING_ITEMS; - if (invoice->is_triangulation && administration_contact_is_valid(invoice->addressee) != A_ERR_SUCCESS) result |= A_ERR_INVALID_ADDRESSEE; + if (invoice->is_triangulation && administration_addressee_is_valid(invoice->addressee) != A_ERR_SUCCESS) result |= A_ERR_INVALID_ADDRESSEE; if (administration_contact_is_valid(invoice->customer) != A_ERR_SUCCESS) result |= A_ERR_INVALID_CUSTOMER; if (administration_contact_is_valid(invoice->supplier) != A_ERR_SUCCESS) result |= A_ERR_INVALID_SUPPLIER; @@ -1500,16 +1512,24 @@ a_err administration_invoice_remove(invoice* inv) return A_ERR_NOT_FOUND; } +static void _administration_invoice_set_addressee(invoice* inv, contact contact) +{ + memcpy(&inv->addressee.name, &contact.name, sizeof(inv->addressee.name)); + memcpy(&inv->addressee.address.address1, &contact.address.address1, sizeof(inv->addressee.address.address1)); + memcpy(&inv->addressee.address.address2, &contact.address.address2, sizeof(inv->addressee.address.address2)); + memcpy(&inv->addressee.address.city, &contact.address.city, sizeof(inv->addressee.address.city)); + memcpy(&inv->addressee.address.postal, &contact.address.postal, sizeof(inv->addressee.address.postal)); + memcpy(&inv->addressee.address.region, &contact.address.region, sizeof(inv->addressee.address.region)); + memcpy(&inv->addressee.address.country_code, &contact.address.country_code, sizeof(inv->addressee.address.country_code)); +} + a_err administration_invoice_update(invoice* inv) { a_err result = administration_invoice_is_valid(inv); if (result != A_ERR_SUCCESS) return result; // Addressee is same as customer. - if (!inv->is_triangulation) - { - memcpy(&inv->addressee, &inv->customer, sizeof(contact)); - } + if (!inv->is_triangulation) _administration_invoice_set_addressee(inv, inv->customer); list_iterator_start(&g_administration.invoices); while (list_iterator_hasnext(&g_administration.invoices)) { @@ -1535,10 +1555,7 @@ a_err administration_invoice_import(invoice* inv) a_err result = administration_invoice_is_valid(inv); if (result != A_ERR_SUCCESS) return result; - if (!inv->is_triangulation) - { - memcpy(&inv->addressee, &inv->customer, sizeof(contact)); - } + inv->is_triangulation = !(memcmp(&inv->addressee.address, &inv->customer.address, sizeof(address)) == 0); inv->issued_at -= (inv->issued_at % 86400); inv->delivered_at -= (inv->delivered_at % 86400); @@ -1563,11 +1580,7 @@ a_err administration_invoice_add(invoice* inv) a_err result = administration_invoice_is_valid(inv); if (result != A_ERR_SUCCESS) return result; - // Addressee is same as customer. - if (!inv->is_triangulation) - { - memcpy(&inv->addressee, &inv->customer, sizeof(contact)); - } + if (!inv->is_triangulation) _administration_invoice_set_addressee(inv, inv->customer); inv->issued_at -= (inv->issued_at % 86400); inv->delivered_at -= (inv->delivered_at % 86400); diff --git a/src/administration_reader.cpp b/src/administration_reader.cpp index 09a4a0a..bf8f8db 100644 --- a/src/administration_reader.cpp +++ b/src/administration_reader.cpp @@ -302,8 +302,8 @@ bool administration_reader_import_project(char* buffer, size_t buffer_size) xml_get_str(root, data.id, MAX_LEN_ID, "Id"); xml_get_str(root, data.description, MAX_LEN_LONG_DESC, "Description"); data.state = (project_state)xml_get_s32(root, "State"); - data.start_date = xml_get_s64(root, "StartDate"); - data.end_date = xml_get_s64(root, "EndDate"); + data.start_date = xml_get_date_x(root, "StartDate", 0); + data.end_date = xml_get_date_x(root, "EndDate", 0); a_err result = administration_project_import(data); if (result == A_ERR_SUCCESS) { diff --git a/src/administration_writer.cpp b/src/administration_writer.cpp index c27b3e3..b08723b 100644 --- a/src/administration_writer.cpp +++ b/src/administration_writer.cpp @@ -522,11 +522,22 @@ bool administration_writer_save_project_blocking(project project) int buf_length = 0; char* file_content = administration_writer_copy_template(project_save_template, &buf_length); + struct tm *tm_info = 0; + char date_buffer[11]; // "YYYY-MM-DD" + null terminator + + + strops_replace(file_content, buf_length, "{{PROJECT_ID}}", project.id); strops_replace(file_content, buf_length, "{{PROJECT_DESCRIPTION}}", project.description); strops_replace_int32(file_content, buf_length, "{{PROJECT_STATE}}", project.state); - strops_replace_int64(file_content, buf_length, "{{PROJECT_STARTDATE}}", (long long)project.start_date); - strops_replace_int64(file_content, buf_length, "{{PROJECT_ENDDATE}}", (long long)project.end_date); + + tm_info = gmtime(&project.start_date); + strftime(date_buffer, sizeof(date_buffer), "%Y-%m-%d", tm_info); + strops_replace(file_content, buf_length, "{{PROJECT_STARTDATE}}", date_buffer); + + tm_info = gmtime(&project.end_date); + strftime(date_buffer, sizeof(date_buffer), "%Y-%m-%d", tm_info); + strops_replace(file_content, buf_length, "{{PROJECT_ENDDATE}}", date_buffer); //// Write to Disk. char final_path[50]; diff --git a/src/ui/ui_contacts.cpp b/src/ui/ui_contacts.cpp index 549273d..fc03e84 100644 --- a/src/ui/ui_contacts.cpp +++ b/src/ui/ui_contacts.cpp @@ -48,6 +48,25 @@ void ui_setup_contacts() memset(&selected_for_removal, 0, sizeof(contact)); } +void draw_addressee_form_ex(delivery_info* buffer, bool viewing_only = false) +{ + a_err last_err = administration_addressee_is_valid(*buffer); + + ImGui::PushID(buffer); + + ImGui::Spacing(); + ImGui::BeginDisabled(); + + if (!viewing_only) ImGui::EndDisabled(); + + ImGui::FormInputTextWithErrorHint(localize("contact.form.fullname"), buffer->name, IM_ARRAYSIZE(buffer->name), last_err & A_ERR_MISSING_NAME); + + ui_draw_address_form(&buffer->address, last_err); + + if (viewing_only) ImGui::EndDisabled(); + ImGui::PopID(); +} + void draw_contact_form_ex(contact* buffer, bool viewing_only = false, bool with_autocomplete = false) { a_err last_err = administration_contact_is_valid(*buffer); @@ -86,7 +105,6 @@ void draw_contact_form(contact* buffer, bool viewing_only = false) draw_contact_form_ex(buffer, viewing_only, false); } - static void draw_contact_list() { const u32 items_per_page = 50; diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp index 7dd5add..9094d30 100644 --- a/src/ui/ui_expenses.cpp +++ b/src/ui/ui_expenses.cpp @@ -34,6 +34,7 @@ static invoice selected_for_removal = {0}; static billing_item* invoice_items_buffer = 0; +void draw_addressee_form_ex(delivery_info* buffer, bool viewing_only = false); void draw_contact_form_ex(contact* buffer, bool viewing_only = false, bool with_autocomplete = false); void draw_invoice_items_form(invoice* invoice); @@ -91,7 +92,7 @@ static void draw_expense_form(invoice* buffer, bool viewing_only = false) if (buffer->is_triangulation) { ImGui::Spacing(); ImGui::Text(localize("invoice.form.shippinginformation")); - draw_contact_form_ex(&buffer->addressee, 0,0); + draw_addressee_form_ex(&buffer->addressee, 0); } ImGui::Separator(); diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp index 6c3e229..0ef3fb2 100644 --- a/src/ui/ui_invoices.cpp +++ b/src/ui/ui_invoices.cpp @@ -36,6 +36,7 @@ static invoice selected_for_removal = {0}; static billing_item* invoice_items_buffer = 0; void draw_contact_form_ex(contact* buffer, bool viewing_only = false, bool with_autocomplete = false); +void draw_addressee_form_ex(delivery_info* buffer, bool viewing_only = false); void ui_destroy_invoices() { @@ -212,7 +213,7 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) if (buffer->is_triangulation) { ImGui::Spacing(); ImGui::Text(localize("invoice.form.shippinginformation")); - draw_contact_form_ex(&buffer->addressee, 0,0); + draw_addressee_form_ex(&buffer->addressee, 0); } ImGui::Separator(); |
