diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/administration.hpp | 117 | ||||
| -rw-r--r-- | include/file_templates.hpp | 79 | ||||
| -rw-r--r-- | include/strops.hpp | 6 |
3 files changed, 186 insertions, 16 deletions
diff --git a/include/administration.hpp b/include/administration.hpp index 774faf8..5e6f0c1 100644 --- a/include/administration.hpp +++ b/include/administration.hpp @@ -15,7 +15,7 @@ #define MAX_LEN_LONG_DESC 64 #define MAX_LEN_EMAIL 64 #define MAX_LEN_PHONE 16 -#define MAX_LEN_BANK 32 +#define MAX_LEN_BANK 35 #define MAX_LEN_TAXID 32 #define MAX_LEN_BUSINESSID 32 #define MAX_LEN_TAX_SECTION 16 @@ -27,7 +27,7 @@ typedef struct char id[MAX_LEN_ID]; // T/[id] char country_code[MAX_LEN_COUNTRY_CODE]; // 2 letter country code float rate; // 0-100% - char description[MAX_LEN_SHORT_DESC]; // Currently only used for global tax brackets + char description[MAX_LEN_SHORT_DESC]; } country_tax_bracket; typedef struct @@ -117,6 +117,113 @@ typedef struct char tax_section[MAX_LEN_TAX_SECTION]; } billing_item; +/** + * UN/CEFACT Payment Means Code (UNCL4461) + * Source: https://docs.peppol.eu/poacc/billing/3.0/codelist/UNCL4461/ + */ +typedef enum { + PAYMENT_METHOD_INSTRUMENT_NOT_DEFINED = 1, + PAYMENT_METHOD_ACH_CREDIT = 2, + PAYMENT_METHOD_ACH_DEBIT = 3, + PAYMENT_METHOD_ACH_DEMAND_DEBIT_REVERSAL = 4, + PAYMENT_METHOD_ACH_DEMAND_CREDIT_REVERSAL = 5, + PAYMENT_METHOD_ACH_DEMAND_CREDIT = 6, + PAYMENT_METHOD_ACH_DEMAND_DEBIT = 7, + PAYMENT_METHOD_HOLD = 8, + PAYMENT_METHOD_NATIONAL_REGIONAL_CLEARING = 9, + PAYMENT_METHOD_CASH = 10, + PAYMENT_METHOD_ACH_SAVINGS_CREDIT_REVERSAL = 11, + PAYMENT_METHOD_ACH_SAVINGS_DEBIT_REVERSAL = 12, + PAYMENT_METHOD_ACH_SAVINGS_CREDIT = 13, + PAYMENT_METHOD_ACH_SAVINGS_DEBIT = 14, + PAYMENT_METHOD_BOOKENTRY_CREDIT = 15, + PAYMENT_METHOD_BOOKENTRY_DEBIT = 16, + PAYMENT_METHOD_ACH_DEMAND_CCD_CREDIT = 17, + PAYMENT_METHOD_ACH_DEMAND_CCD_DEBIT = 18, + PAYMENT_METHOD_ACH_DEMAND_CTP_CREDIT = 19, + PAYMENT_METHOD_CHEQUE = 20, + PAYMENT_METHOD_BANKERS_DRAFT = 21, + PAYMENT_METHOD_CERTIFIED_BANKERS_DRAFT = 22, + PAYMENT_METHOD_BANK_CHEQUE = 23, + PAYMENT_METHOD_BILL_OF_EXCHANGE_AWAITING_ACCEPTANCE = 24, + PAYMENT_METHOD_CERTIFIED_CHEQUE = 25, + PAYMENT_METHOD_LOCAL_CHEQUE = 26, + PAYMENT_METHOD_ACH_DEMAND_CTP_DEBIT = 27, + PAYMENT_METHOD_ACH_DEMAND_CTX_CREDIT = 28, + PAYMENT_METHOD_ACH_DEMAND_CTX_DEBIT = 29, + PAYMENT_METHOD_CREDIT_TRANSFER = 30, + PAYMENT_METHOD_DEBIT_TRANSFER = 31, + PAYMENT_METHOD_ACH_DEMAND_CCD_PLUS_CREDIT = 32, + PAYMENT_METHOD_ACH_DEMAND_CCD_PLUS_DEBIT = 33, + PAYMENT_METHOD_ACH_PPD = 34, + PAYMENT_METHOD_ACH_SAVINGS_CCD_CREDIT = 35, + PAYMENT_METHOD_ACH_SAVINGS_CCD_DEBIT = 36, + PAYMENT_METHOD_ACH_SAVINGS_CTP_CREDIT = 37, + PAYMENT_METHOD_ACH_SAVINGS_CTP_DEBIT = 38, + PAYMENT_METHOD_ACH_SAVINGS_CTX_CREDIT = 39, + PAYMENT_METHOD_ACH_SAVINGS_CTX_DEBIT = 40, + PAYMENT_METHOD_ACH_SAVINGS_CCD_PLUS_CREDIT = 41, + PAYMENT_METHOD_PAYMENT_TO_BANK_ACCOUNT = 42, + PAYMENT_METHOD_ACH_SAVINGS_CCD_PLUS_DEBIT = 43, + PAYMENT_METHOD_ACCEPTED_BILL_OF_EXCHANGE = 44, + PAYMENT_METHOD_REFERENCED_HOME_BANKING_CREDIT_TRANSFER = 45, + PAYMENT_METHOD_INTERBANK_DEBIT_TRANSFER = 46, + PAYMENT_METHOD_HOME_BANKING_DEBIT_TRANSFER = 47, + PAYMENT_METHOD_BANK_CARD = 48, + PAYMENT_METHOD_DIRECT_DEBIT = 49, + PAYMENT_METHOD_PAYMENT_BY_POSTGIRO = 50, + PAYMENT_METHOD_FR_NORME_6_97_CFONB_OPTION_A = 51, + PAYMENT_METHOD_URGENT_COMMERCIAL_PAYMENT = 52, + PAYMENT_METHOD_URGENT_TREASURY_PAYMENT = 53, + PAYMENT_METHOD_CREDIT_CARD = 54, + PAYMENT_METHOD_DEBIT_CARD = 55, + PAYMENT_METHOD_BANKGIRO = 56, + PAYMENT_METHOD_STANDING_AGREEMENT = 57, + PAYMENT_METHOD_SEPA_CREDIT_TRANSFER = 58, + PAYMENT_METHOD_SEPA_DIRECT_DEBIT = 59, + PAYMENT_METHOD_PROMISSORY_NOTE = 60, + PAYMENT_METHOD_PROMISSORY_NOTE_SIGNED_BY_DEBTOR = 61, + PAYMENT_METHOD_PROMISSORY_NOTE_SIGNED_BY_DEBTOR_AND_ENDORSED_BY_BANK = 62, + PAYMENT_METHOD_PROMISSORY_NOTE_SIGNED_BY_DEBTOR_AND_ENDORSED_BY_THIRD_PARTY = 63, + PAYMENT_METHOD_PROMISSORY_NOTE_SIGNED_BY_BANK = 64, + PAYMENT_METHOD_PROMISSORY_NOTE_SIGNED_BY_BANK_AND_ENDORSED_BY_ANOTHER_BANK = 65, + PAYMENT_METHOD_PROMISSORY_NOTE_SIGNED_BY_THIRD_PARTY = 66, + PAYMENT_METHOD_PROMISSORY_NOTE_SIGNED_BY_THIRD_PARTY_AND_ENDORSED_BY_BANK = 67, + PAYMENT_METHOD_ONLINE_PAYMENT_SERVICE = 68, + PAYMENT_METHOD_TRANSFER_ADVICE = 69, + PAYMENT_METHOD_BILL_DRAWN_BY_CREDITOR_ON_DEBTOR = 70, + PAYMENT_METHOD_BILL_DRAWN_BY_CREDITOR_ON_BANK = 74, + PAYMENT_METHOD_BILL_DRAWN_BY_CREDITOR_ENDORSED_BY_ANOTHER_BANK = 75, + PAYMENT_METHOD_BILL_DRAWN_BY_CREDITOR_ON_BANK_ENDORSED_BY_THIRD_PARTY = 76, + PAYMENT_METHOD_BILL_DRAWN_BY_CREDITOR_ON_THIRD_PARTY = 77, + PAYMENT_METHOD_BILL_DRAWN_BY_CREDITOR_ON_THIRD_PARTY_ACCEPTED_AND_ENDORSED_BY_BANK = 78, + PAYMENT_METHOD_NOT_TRANSFERABLE_BANKERS_DRAFT = 91, + PAYMENT_METHOD_NOT_TRANSFERABLE_LOCAL_CHEQUE = 92, + PAYMENT_METHOD_REFERENCE_GIRO = 93, + PAYMENT_METHOD_URGENT_GIRO = 94, + PAYMENT_METHOD_FREE_FORMAT_GIRO = 95, + PAYMENT_METHOD_REQUESTED_METHOD_NOT_USED = 96, + PAYMENT_METHOD_CLEARING_BETWEEN_PARTNERS = 97, + PAYMENT_METHOD_JP_ELECTRONICALLY_RECORDED_MONETARY_CLAIMS = 98, + PAYMENT_METHOD_MUTUALLY_DEFINED = -1 /** ZZZ */ +} payment_method; + +typedef struct +{ + char payee_bank_account[MAX_LEN_BANK]; // Recipient IBAN or BBAN account. + char payee_account_name[MAX_LEN_LONG_DESC]; // Name of account where payment is made to. + char service_provider_id[MAX_LEN_LONG_DESC]; // BIC or national clearing code. + char payer_bank_account[MAX_LEN_BANK]; // Sender IBAN or BBAN account. + payment_method payment_method; +} payment_information; + +typedef struct +{ + float total; + float tax; + float net; +} tax_subtotal; + typedef struct { char id[MAX_LEN_ID]; // I/[id] @@ -138,9 +245,10 @@ typedef struct float net; char currency[MAX_LEN_CURRENCY]; // 3 letter code - bool is_triangulation; // True of addressee != customer + bool is_triangulation; // True if addressee != customer invoice_status status; bool is_outgoing; // Outgoing or incomming invoice. + payment_information payment_means; bool is_intra_community; // TODO uninplemented time_t payment_on_account_date; // TODO uninplemented @@ -253,6 +361,9 @@ u32 administration_invoice_get_partial_list_outgoing(u32 page_index, u32 pag u32 administration_invoice_get_partial_list_incomming(u32 page_index, u32 page_size, invoice* buffer); u32 administration_invoice_get_all(invoice* buffer); +u32 administration_invoice_get_tax_brackets(invoice* invoice, country_tax_bracket* buffer); +bool administration_invoice_get_subtotal_for_tax_bracket(invoice* invoice, country_tax_bracket bracket, tax_subtotal* buffer); + // Billing item functions. // ======================= u32 administration_billing_item_count(invoice* invoice); diff --git a/include/file_templates.hpp b/include/file_templates.hpp index f267055..3559fbe 100644 --- a/include/file_templates.hpp +++ b/include/file_templates.hpp @@ -1,3 +1,67 @@ +const char* project_save_template = +"<Project>\n" +" <Id>{{PROJECT_ID}}</Id>\n" +" <Description>{{PROJECT_DESCRIPTION}}</Description>\n" +" <State>{{PROJECT_STATE}}</State>\n" +" <StartDate>{{PROJECT_STARTDATE}}</StartDate>\n" +" <EndDate>{{PROJECT_ENDDATE}}</EndDate>\n" +"</Project>\n"; + +const char* costcenter_save_template = +"<CostCenter>\n" +" <Id>{{COSTCENTER_ID}}</Id>\n" +" <Code>{{COSTCENTER_CODE}}</Code>\n" +" <Description>{{COSTCENTER_DESCRIPTION}}</Description>\n" +"</CostCenter>\n"; + +const char* taxbracket_save_template = +"<CountryTaxBracket>\n" +" <Id>{{TAXBRACKET_ID}}</Id>\n" +" <CountryCode>{{TAXBRACKET_COUNTRY}}</CountryCode>\n" +" <Rate>{{TAXBRACKET_RATE}}</Rate>\n" +" <Description>{{TAXBRACKET_DESCRIPTION}}</Description>\n" +"</CountryTaxBracket>\n"; + +const char* contact_save_template = +"<Contact>\n" +" <Id>{{CONTACT_ID}}</Id>\n" +" <Name>{{CONTACT_NAME}}</Name>\n" +" <Type>{{CONTACT_TYPE}}</Type>\n" +" <TaxId>{{CONTACT_TAXID}}</TaxId>\n" +" <BusinessId>{{CONTACT_BUSINESSID}}</BusinessId>\n" +" <Email>{{CONTACT_EMAIL}}</Email>\n" +" <PhoneNumber>{{CONTACT_PHONENUMBER}}</PhoneNumber>\n" +" <BankAccount>{{CONTACT_BANKACCOUNT}}</BankAccount>\n" +" <Address>\n" +" <AddressLine1>{{CONTACT_ADDRESS1}}</AddressLine1>\n" +" <AddressLine2>{{CONTACT_ADDRESS2}}</AddressLine2>\n" +" <CountryCode>{{CONTACT_COUNTRY}}</CountryCode>\n" +" <City>{{CONTACT_CITY}}</City>\n" +" <Postal>{{CONTACT_POSTAL}}</Postal>\n" +" <Region>{{CONTACT_REGION}}</Region>\n" +" </Address>\n" +"</Contact>\n"; + +const char* administration_save_template = +"<Administration>\n" +" <NextId>{{NEXT_ID}}</NextId>\n" +" <NextSequenceNumber>{{NEXT_SEQUENCE_NUMBER}}</NextSequenceNumber>\n" +" <ProgramVersion>{{PROGRAM_VERSION}}</ProgramVersion>\n" +"</Administration>\n"; + +const char* peppol_invoice_tax_subtotal_template = +" <cac:TaxSubtotal>\n" +" <cbc:TaxableAmount currencyID=\"{{CURRENCY}}\">{{TAXABLE_AMOUNT}}</cbc:TaxableAmount>\n" +" <cbc:TaxAmount currencyID=\"{{CURRENCY}}\">{{TAX_AMOUNT}}</cbc:TaxAmount>\n" +" <cac:TaxCategory>\n" +" <cbc:ID>{{TAX_CATEGORY}}</cbc:ID>\n" +" <cbc:Percent>{{TAX_PERCENT}}</cbc:Percent>\n" +" <cac:TaxScheme>\n" +" <cbc:ID>VAT</cbc:ID>\n" +" </cac:TaxScheme>\n" +" </cac:TaxCategory>\n" +" </cac:TaxSubtotal>\n"; + const char *peppol_invoice_template = /*"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"*/ "<Invoice xmlns=\"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2\"\n" @@ -63,7 +127,8 @@ const char *peppol_invoice_template = " </cac:AccountingCustomerParty>\n" "\n" " <cac:PaymentMeans>\n" -" <cbc:PaymentMeansCode>31</cbc:PaymentMeansCode>\n" +" <cbc:PaymentMeansCode>{{PAYMENT_TYPE}}</cbc:PaymentMeansCode>\n" +" <cbc:PaymentID>{{INVOICE_ID}}</cbc:PaymentID>\n" " <cac:PayeeFinancialAccount>\n" " <cbc:ID>{{SUPPLIER_IBAN}}</cbc:ID>\n" " <cac:FinancialInstitutionBranch>\n" @@ -76,17 +141,7 @@ const char *peppol_invoice_template = "\n" " <cac:TaxTotal>\n" " <cbc:TaxAmount currencyID=\"{{CURRENCY}}\">{{TOTAL_TAX_AMOUNT}}</cbc:TaxAmount>\n" -" <cac:TaxSubtotal>\n" -" <cbc:TaxableAmount currencyID=\"{{CURRENCY}}\">{{TAXABLE_AMOUNT}}</cbc:TaxableAmount>\n" -" <cbc:TaxAmount currencyID=\"{{CURRENCY}}\">{{TAX_AMOUNT}}</cbc:TaxAmount>\n" -" <cac:TaxCategory>\n" -" <cbc:ID>{{TAX_CATEGORY}}</cbc:ID>\n" -" <cbc:Percent>{{TAX_PERCENT}}</cbc:Percent>\n" -" <cac:TaxScheme>\n" -" <cbc:ID>VAT</cbc:ID>\n" -" </cac:TaxScheme>\n" -" </cac:TaxCategory>\n" -" </cac:TaxSubtotal>\n" +" {{TAX_SUBTOTAL_LIST}}" " </cac:TaxTotal>\n" "\n" " <cac:LegalMonetaryTotal>\n" diff --git a/include/strops.hpp b/include/strops.hpp index 4570a15..2874c4d 100644 --- a/include/strops.hpp +++ b/include/strops.hpp @@ -1,5 +1,9 @@ #pragma once +#include <stdint.h> size_t strops_copy(char *dst, const char *src, size_t size); char* strops_stristr(char* a, char* b); -void strops_replace(char *buf, size_t buf_size, const char *search, const char *replace);
\ No newline at end of file +void strops_replace(char *buf, size_t buf_size, const char *search, const char *replace); +void strops_replace_int32(char *buf, size_t buf_size, const char *search, int32_t number); +void strops_replace_int64(char *buf, size_t buf_size, const char *search, int64_t number); +void strops_replace_float(char *buf, size_t buf_size, const char *search, float number, int decimals);
\ No newline at end of file |
