Skip to main content

Python Restfull API GAzie DB

Installazione

  1. PIP:
    pip install py_restfull_gazie
    

Adattare GAzie a CRUD PHP API

Procedure da Eseguire Su DB GAzie:

Prima di procedere occorre che il DB GAzie si pronto ad usare CRUD PHP API inserendo in tabella una chiave primaria 'id'.

Utilizzare lo script seguento per farlo.

DELIMITER //

DROP PROCEDURE IF EXISTS AddIdPrimaryKeyToGazie //

CREATE PROCEDURE AddIdPrimaryKeyToGazie()
BEGIN
    -- =========================================================================
    -- 1. TUTTE LE DICHIARAZIONI (Devono stare in cima)
    -- =========================================================================
    DECLARE done INT DEFAULT FALSE;
    DECLARE current_table VARCHAR(255);
    DECLARE old_pk_columns VARCHAR(512);
    
    -- Cursore per escludere tabelle con 'id' o con qualsiasi altro AUTO_INCREMENT
    DECLARE table_cursor CURSOR FOR 
        SELECT t.TABLE_NAME 
        FROM information_schema.TABLES t
        WHERE t.TABLE_SCHEMA = DATABASE()
          AND t.TABLE_NAME LIKE 'gaz_%'
          AND NOT EXISTS (
              SELECT 1 
              FROM information_schema.COLUMNS c 
              WHERE c.TABLE_SCHEMA = DATABASE() 
                AND c.TABLE_NAME = t.TABLE_NAME 
                AND c.COLUMN_NAME = 'id'
          )
          AND NOT EXISTS (
              SELECT 1 
              FROM information_schema.COLUMNS c 
              WHERE c.TABLE_SCHEMA = DATABASE() 
                AND c.TABLE_NAME = t.TABLE_NAME 
                AND c.EXTRA LIKE '%auto_increment%'
          );

    -- L'handler deve essere l'ultima cosa dichiarata
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;


    -- =========================================================================
    -- 2. ISTRUZIONI ESEGUIBILI
    -- =========================================================================
    
    -- Creazione della tabella temporanea per il LOG
    DROP TEMPORARY TABLE IF EXISTS temp_log_alter_tables;
    CREATE TEMPORARY TABLE temp_log_alter_tables (
        id INT AUTO_INCREMENT PRIMARY KEY,
        eseguito_alle TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        tabella_modificata VARCHAR(255),
        query_eseguita TEXT
    );

    OPEN table_cursor;

    read_loop: LOOP
        FETCH table_cursor INTO current_table;
        
        IF done THEN
            LEAVE read_loop;
        END IF;

        -- Recupera dinamicamente le colonne che compongono l'attuale chiave primaria
        SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ', ')
        INTO old_pk_columns
        FROM information_schema.KEY_COLUMN_USAGE
        WHERE TABLE_SCHEMA = DATABASE()
          AND TABLE_NAME = current_table
          AND CONSTRAINT_NAME = 'PRIMARY';

        -- Se esiste una vecchia chiave primaria, procediamo
        IF old_pk_columns IS NOT NULL THEN
            
            SET @dynamic_sql = CONCAT(
                'ALTER TABLE `', current_table, '` ',
                'DROP PRIMARY KEY, ',
                'ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST, ',
                'ADD UNIQUE KEY `uk_', current_table, '_old_pk` (', old_pk_columns, ');'
            );

            -- Scrittura nel LOG
            INSERT INTO temp_log_alter_tables (tabella_modificata, query_eseguita) 
            VALUES (current_table, @dynamic_sql);

            -- Esecuzione della query
            PREPARE stmt FROM @dynamic_sql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
            
        END IF;

    END LOOP;

    CLOSE table_cursor;
    
    -- 3. Stampa a schermo del risultato finale
    SELECT * FROM temp_log_alter_tables;
    
    -- Pulizia finale
    DROP TEMPORARY TABLE IF EXISTS temp_log_alter_tables;

END //

DELIMITER ;

Chiamare la Procedura

CALL AddIdPrimaryKeyToGazie();

Uso

Il server espone le tabelle GAzie come risorse JSON sotto il prefisso PREFIX_API (default /contabile). In modalità DEVELOPMENT=true la documentazione interattiva (Swagger) è disponibile su /docs.

Endpoint Metodi Chiave del record singolo
/health/ GET —
/products/ GET, POST /products/{codice} — stringa con zeri iniziali (00100010001)
/anagra/ GET, POST /anagra/{id}
/companies/ GET, POST /companies/{codice}
/customers/ GET, POST /customers/{codice}
/documents/ GET /documents/{id_tes} — sola lettura

Ogni risorsa con lista accetta i parametri page (default 1), limit (1-100, default 10), company (azienda GAzie, default 1) e search: ricerca sui campi della risorsa (codice/descri per i prodotti, ragso1, ragso2, pariva, e_mail, telefo sull'anagrafica per i clienti, numfat/numdoc/tipdoc per i documenti). Senza search non viene applicato alcun filtro.

Le liste rispondono con la struttura standard:

{"data": [ ... ],
 "pagination": {"page": 1, "limit": 10, "total_records": 8507,
                "total_pages": 851, "has_next": true, "has_previous": false}}

Codici di errore: 422 parametri non validi · 400 operazione fallita su Gazie · 404 record non trovato · 500 errore imprevisto.

Cliente di un'anagrafica (/customers/by_anagra)

Cerca i clienti collegati a una scheda anagrafica. In gaz_001clfoco non c'è la ragione sociale, solo il puntatore id_anagra verso anagra: serve per stabilire se un'anagrafica ha già un cliente aperto prima di crearne uno.

GET /contabile/customers/by_anagra?id_anagra=42&company=1&page=1&limit=10

id_anagra è obbligatorio; page, limit e company hanno gli stessi significato e limiti delle altre risorse. La risposta usa la struttura standard {"data": [...], "pagination": {...}}: un'anagrafica senza clienti risponde 200 con data vuota, non un errore.

Documenti (/documents/)

Ogni testata riporta il tipo di documento tradotto dal campo tipdoc più i flag e_fattura ed e_ricevuta:

{"id_tes": 6, "tipdoc": "FAI", "numdoc": 1, "numfat": "1",
 "datfat": "2011-01-22", "tipo_documento": "Fattura",
 "e_fattura": true, "e_ricevuta": false}
tipdoc tipo_documento
FAI, AFA, VRI, AFC, AFT Fattura
ADT, DDT, DDR DDT
FNC Nota di credito
RIC, RF, RFR, RFI Ricevuta (sigle preventive: assenti nel DB attuale, appena emesse sono già gestite)
qualsiasi altro codice resta il codice grezzo (trasparente)
  • GET /documents/ — elenco paginato (8507 testate); search prova su numero fattura, numero documento e tipo.
  • GET /documents/{id_tes} — testata singola per id_tes (la chiave di tesdoc è id_tes, non id); 404 se assente.
  • Sola lettura: la scrittura dei documenti (testata + righe) non è ancora esposta.

Configurazione

Per la configurazione occore un file .env:

# Configurazione generica 
PREFIX_API=/contabile
GAZIE_URL=http://127.0.0.1:8082/modules/api/index.php
APP_TOKEN=test-token
PORT_EXPOSE=5002
DEVELOPMENT=true

Eseguire lo script api:

python -m py_restfull_gazie.main

Sia avviera' il server restfull api con swagger.

Metadata

Release files for py-restfull-gazie 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for py-restfull-gazie 0.1.8
File Size Uploaded
py_restfull_gazie-0.1.8.tar.gz 48.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for py-restfull-gazie 0.1.8
File Interpreter ABI Platform
py_restfull_gazie-0.1.8-py3-none-any.whl Python 3 none any Details

Total release size: 111.0 kB

Release files / py_restfull_gazie-0.1.8.tar.gz

Download URL py_restfull_gazie-0.1.8.tar.gz
Size 48.2 kB
Tags Source
SHA-256 checksum
How to use checksums
77d774635850612aa8fc3a2300700b3e385dc18e372677285e9c832a87d99f2f
BLAKE2b-256 checksum
How to use checksums
ff1a4e897dcbc13156067f0f06861cfbd97c9762e1ad7297a68397aee29cc0a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / py_restfull_gazie-0.1.8-py3-none-any.whl

Download URL py_restfull_gazie-0.1.8-py3-none-any.whl
Size 62.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ed1c91449b2303a9bb9484236d26b0d3de2c92f1699da2e925b1eb391f592b84
BLAKE2b-256 checksum
How to use checksums
ae6d3112ed6ad3ec0b8d872c388e585acf23b2626223e3c620c8626750a82ec7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

0.1.8 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page