Funzioni di Logica Aziendale
Funzioni per ricerche, abbinamento OA, attivita, gestione utenti/gruppi e cambiamenti di stato.
Sorgente: module/script/helper/document_script_functions.py
get_lookup_records()
Interroga i dati master dalle tabelle di ricerca (fornitori, articoli, conti contabili, ecc.).
get_lookup_records(org_id, sub_org_id, lookup_name, filters, **kwargs)Parametri:
org_id
str
UUID dell'organizzazione
sub_org_id
str/None
UUID della sotto-organizzazione (o None)
lookup_name
str
Nome della ricerca (es. "supplier", "item", "gl_account")
filters
list
Condizioni di filtro (vedi formati sotto)
skip
int
Offset per la paginazione (predefinito: 0)
limit
int
Risultati massimi (predefinito: 100)
match_all
bool
True = AND, False = OR (predefinito: True)
sort_order
list
Ordinamento (opzionale)
Formati di Filtro
Sono supportati tre formati:
Ordinamento
Esempio — Ricerca fornitore per ID venditore:
Esempio — Cercare conti contabili con filtri multipli:
Internamente utilizza search_operator="SMART" che supporta la corrispondenza approssimativa.
is_supplier_valid()
Verifica se un fornitore esiste nei dati di ricerca.
Parametri:
user
UserAuthentication
L'oggetto di contesto user
filter_data_json
dict
Filtro nel formato {"match_all": True, "filters": [...]}
sub_org_id
str/None
Sotto-organizzazione
Restituisce: True se almeno 1 corrispondenza, altrimenti False
Esempio — Validare il fornitore:
auto_po_match_for_purchase_orders()
Attiva l'abbinamento automatico OA tramite il microservizio po-match-service.
Parametri:
user
UserAuthentication
Deve essere un oggetto utente reale
document_data
dict
Contesto del documento
po_numbers
str/list
Numeri OA (separati da virgola o lista)
Restituisce: document_data aggiornato con po_items, po_match_status, po_multi_matched
Esempio — Abbinamento automatico OA:
Protezione dai duplicati: I numeri OA gia verificati sono memorizzati in already_verified_po_numbers e non verranno abbinati di nuovo.
get_next_sequence_number()
Ottiene e incrementa atomicamente un numero di sequenza nel database.
Parametri:
org_id
str
UUID dell'organizzazione
sequence_name
str
Deve contenere "sequence" (es. "invoice_sequence")
default_value
int
Valore iniziale quando la sequenza viene creata
Restituisce: int — il numero successivo, oppure None se il nome non e valido
Esempio — Generare un numero documento interno:
Regola di denominazione: Il sequence_name deve iniziare o terminare con "sequence", o contenere "SEQUENCE_". Altrimenti la funzione restituisce None.
create_document_task()
Crea un'attivita per il documento corrente.
Parametri:
user
UserAuthentication
Contesto utente
title
str
Titolo dell'attivita
description
str
Descrizione
priority
str/int
Priorita
assigned_to_user_id
str/None
Utente assegnato
assigned_to_group_id
str/None
Gruppo assegnato
send_email
bool
Inviare notifica email
Esempio — Creare un'attivita per fatture con importo elevato:
set_document_sub_org_id()
Assegna una sotto-organizzazione a un documento.
Effetti collaterali:
Imposta
sub_org_idindocument_jsonSalva direttamente nel database (se
doc_ide presente)
Esempio — Instradamento basato sul fornitore:
update_document_status_with_doc_id()
Cambia lo stato di un documento.
Parametri:
doc_id
str
UUID del documento
status
str
Nuovo stato (es. "error", "ready_for_validation")
message
str/None
Messaggio di stato
doc_classification_class
str/None
Per lo stato CLASSIFIED: nuovo tipo di documento
Esempio — Impostare lo stato del documento su errore:
Attenzione: I cambiamenti di stato attivano azioni a valle (workflow DocFlow, hook di cambio stato). Usare solo quando necessario.
get_document_content()
Restituisce il testo OCR completo del documento.
Restituisce: str — Testo concatenato di tutte le pagine
Esempio — Cercare parole chiave nel testo completo:
Il risultato viene memorizzato nella cache per 60 secondi (cache TTL con massimo 128 voci).
get_user_by_id() / get_user_by_email()
Cerca un utente per ID o email.
Restituisce: Oggetto UsersCache con attributi come .email, .first_name, .last_name, .user_id
Esempio — Assegnare un'attivita a un utente specifico:
get_group_by_id() / get_group_by_name()
Cerca un gruppo utenti per ID o nome.
Restituisce: Oggetto GroupCache
Esempio — Trovare un gruppo per l'assegnazione dell'attivita:
compare_values()
Confronto intelligente di valori con conversione di tipo.
Logica di confronto:
None == None→TrueNone != non-None→FalseStringhe che sono numeri → confronto numerico (
"1.0" == "1.00"→True)Stringhe → senza distinzione maiuscole/minuscole, senza distinzione spazi (
"ABC " == " abc"→True)Bool vs Stringa → confronto stringa (
True == "true"→True)Confronto Decimal come fallback
Esempio — Verificare la corrispondenza degli importi:
get_lov_values()
Recupera le voci della Lista di Valori (LOV).
Parametri:
org_id
str
UUID dell'organizzazione
key
str
Chiave LOV
return_type
str
"list_of_objects" o "list_of_values"
sub_org_id
str/None
Filtro sotto-organizzazione opzionale
language_code
str
Codice lingua (es. "en", "de")
Restituisce: Valori LOV come lista di oggetti o come lista semplice.
Esempio — Ottenere i codici fiscali configurati:
Last updated