From 35be454a180f83d520dfbf08c794828404a18d62 Mon Sep 17 00:00:00 2001 From: Wolfgang Fahl Date: Mon, 18 Nov 2024 16:52:16 +0100 Subject: [PATCH] improves --- crm/crm_core.py | 43 +++++++++++++++++++++++++++++++++++ crm/resources/crm-schema.yaml | 13 ++++++++++- crm/smartcrm_adapter.py | 9 +++++++- 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/crm/crm_core.py b/crm/crm_core.py index 95611a7..9d015e0 100644 --- a/crm/crm_core.py +++ b/crm/crm_core.py @@ -175,4 +175,47 @@ def from_smartcrm(cls, data: Dict) -> 'Contact': action_number=data.get("wgAktion_AktionNummer"), followup=data.get("Wiedervorlage"), created_at=data.get("createdAt") + ) + +@dataclass +class Invoice: + invoice_id: str + organization_number: Optional[str] + comment: Optional[str] + paid_at: Optional[datetime] + gross_amount: Optional[float] + deleted_at: Optional[datetime] + created_by: Optional[str] + last_modified: Optional[datetime] + net_amount: Optional[float] + invoice_date: Optional[datetime] + invoice_number: Optional[str] + year_assignment: Optional[str] + month_assignment: Optional[str] + project_number: Optional[str] + division: Optional[str] + payment_statement: Optional[str] + document: Optional[str] + + @classmethod + def from_smartcrm(cls, data: Dict) -> 'Invoice': + """Convert SmartCRM data dictionary to Invoice instance.""" + return cls( + invoice_id=data.get("rechnungsID"), + organization_number=data.get("Auftraggeber_OrganisationNummer"), + comment=data.get("bemerkung"), + paid_at=TypeConverter.to_datetime(data.get("bezahltAm")), + gross_amount=data.get("brutto"), + deleted_at=TypeConverter.to_datetime(data.get("deletedAt")), + created_by=data.get("erstelltVon"), + last_modified=TypeConverter.to_datetime(data.get("lastmodified")), + net_amount=data.get("netto"), + invoice_date=TypeConverter.to_datetime(data.get("rechnungsdatum")), + invoice_number=data.get("rechnungsnummer"), + year_assignment=data.get("zuordnungJahr"), + month_assignment=data.get("zuordnungMonat"), + project_number=data.get("ZuordnungProjekt_ProjektNummer"), + division=data.get("zuordnungSparte"), + payment_statement=data.get("bezahltAuszug"), + document=data.get("document") ) \ No newline at end of file diff --git a/crm/resources/crm-schema.yaml b/crm/resources/crm-schema.yaml index 850a3b5..27d609e 100644 --- a/crm/resources/crm-schema.yaml +++ b/crm/resources/crm-schema.yaml @@ -39,9 +39,20 @@ node_type_configs: Contact: label: Contact - icon: person + icon: contact_page key_field: contact_number dataclass_name: crm.crm_core.Contact display_order: 20 display_name: Contact description: a Contact + + Invoice: + label: Invoice + icon: receipt + key_field: invoice_id + dataclass_name: crm.crm_core.Invoice + display_order: 40 + display_name: Invoice + description: an Invoice + + diff --git a/crm/smartcrm_adapter.py b/crm/smartcrm_adapter.py index f3e709c..ccb79d0 100644 --- a/crm/smartcrm_adapter.py +++ b/crm/smartcrm_adapter.py @@ -8,7 +8,7 @@ from pathlib import Path from typing import Dict, List from crm.db import DB -from crm.crm_core import Organization, Person, Contact +from crm.crm_core import Organization, Person,Invoice, Contact @dataclass class Topic: @@ -52,6 +52,13 @@ def get_topics(cls)->List[smartCRMTopic]: dataclass=Contact, table_name="Kontakt", node_path="KontaktManager/kontakts/Kontakt", + ), + smartCRMTopic( + name="Invoice", + plural_name="invoices", + dataclass=Invoice, + table_name="Rechnung", + node_path="RechnungManager/rechnungs/Rechnung", ) ] return topics