Patch a funzionamento registrazione vendite
This commit is contained in:
1 parent
c670aceafb
commit
6fb76ebed6
3 files changed
+543
-788
No files matched your search
+62
-111
@@ -15,165 +15,124 @@ struct product {
|
||||
char name;
|
||||
};
|
||||
|
||||
/*
|
||||
* Modello dati: nel file prodotti si salva solo la giacenza INIZIALE ("initial").
|
||||
* Lo stock corrente e' sempre calcolato: initial - copie vendute
|
||||
* (comprese quelle consumate tramite bundle). Le vendite scrivono solo il file vendite.
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Prodotti */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/**
|
||||
* @brief Restituisce l'array JSON contenente tutti i prodotti.
|
||||
* @brief Restituisce l'array JSON contenente tutti i prodotti, cosi' come salvati su file
|
||||
* (quindi con "initial" e senza stock corrente).
|
||||
* @param fname Percorso del file JSON dei prodotti.
|
||||
* @return Puntatore all'oggetto JSON (array) dei prodotti (da liberare con json_object_put()), oppure NULL in caso di errore.
|
||||
* @return Array JSON (da liberare con json_object_put()), oppure NULL in caso di errore.
|
||||
*/
|
||||
json_object *getProducts(const char *fname);
|
||||
|
||||
/**
|
||||
* @brief Stampa a schermo (tramite ncurses) la lista dei prodotti con relativo prezzo, inventario e tag bundle.
|
||||
* @param fname Percorso del file JSON dei prodotti.
|
||||
* @brief Come getProducts, ma ogni prodotto ha in piu' il campo "stock" calcolato
|
||||
* (-1 = infinito; i bundle hanno sempre -1). E' una vista in memoria: non va salvata.
|
||||
* @param productsFile Percorso del file JSON dei prodotti.
|
||||
* @param soldFile Percorso del file JSON delle vendite (se manca, si assume nessuna vendita).
|
||||
* @return Array JSON (da liberare con json_object_put()), oppure NULL in caso di errore.
|
||||
*/
|
||||
void listProducts(const char *fname);
|
||||
json_object *getProductsWithStock(const char *productsFile, const char *soldFile);
|
||||
|
||||
/**
|
||||
* @brief Aggiunge un nuovo prodotto con prezzo e inventario illimitato.
|
||||
* @param fname Percorso del file JSON dei prodotti.
|
||||
* @param name Nome del prodotto.
|
||||
* @param price Prezzo del prodotto.
|
||||
* @return 0 in caso di successo, 1 se il prodotto esiste già, -1 in caso di errore.
|
||||
* @return 0 in caso di successo, 1 se il prodotto esiste gia', -1 in caso di errore.
|
||||
*/
|
||||
int addProduct(const char *fname, const char *name, double price);
|
||||
|
||||
/**
|
||||
* @brief Aggiunge un nuovo prodotto specificando prezzo e quantità iniziale in magazzino.
|
||||
* @param fname Percorso del file JSON dei prodotti.
|
||||
* @param name Nome del prodotto.
|
||||
* @param price Prezzo del prodotto.
|
||||
* @param stock Quantità iniziale in magazzino (-1 per inventario illimitato).
|
||||
* @return 0 in caso di successo, 1 se il prodotto esiste già, -1 in caso di errore.
|
||||
* @brief Aggiunge un nuovo prodotto specificando prezzo e giacenza iniziale.
|
||||
* @param stock Giacenza iniziale (negativo per inventario illimitato).
|
||||
* @return 0 in caso di successo, 1 se il prodotto esiste gia', -1 in caso di errore.
|
||||
*/
|
||||
int addProductWithInventory(const char *fname, const char *name, double price, int stock);
|
||||
|
||||
/**
|
||||
* @brief Aggiunge un prodotto composto (bundle) costituito da altri componenti.
|
||||
* @param fname Percorso del file JSON dei prodotti.
|
||||
* @param name Nome del bundle.
|
||||
* @param price Prezzo del bundle.
|
||||
* @param components Oggetto JSON (array) descrivente i componenti e le relative quantità.
|
||||
* @return 0 in caso di successo, 1 se il prodotto esiste già, -1 in caso di errore.
|
||||
* @brief Aggiunge un prodotto composto (bundle).
|
||||
* @param components Array JSON di {"name": ..., "qty": ...}; il bundle ne prende possesso in caso di successo.
|
||||
* @return 0 in caso di successo, 1 se il prodotto esiste gia', -1 in caso di errore.
|
||||
*/
|
||||
int addBundleProduct(const char *fname, const char *name, double price, json_object *components);
|
||||
|
||||
/**
|
||||
* @brief Ottiene il prezzo di un prodotto specifico.
|
||||
* @param fname Percorso del file JSON dei prodotti.
|
||||
* @param name Nome del prodotto da cercare.
|
||||
* @return Il prezzo del prodotto, oppure -1.0 se non trovato o in caso di errore.
|
||||
* @brief Ottiene il prezzo di un prodotto.
|
||||
* @return Il prezzo, oppure -1.0 se non trovato o in caso di errore.
|
||||
*/
|
||||
double getPrice(const char *fname, const char *name);
|
||||
|
||||
/**
|
||||
* @brief Aggiorna nome e prezzo di un prodotto esistente, sincronizzando anche le vendite se il nome cambia.
|
||||
* @param productsFile Percorso del file JSON dei prodotti.
|
||||
* @param soldFile Percorso del file JSON delle vendite.
|
||||
* @param oldName Nome attuale del prodotto.
|
||||
* @param newName Nuovo nome da assegnare al prodotto.
|
||||
* @param price Nuovo prezzo del prodotto.
|
||||
* @return 0 in caso di successo, codice di errore/stato altrimenti.
|
||||
* @brief Aggiorna nome e prezzo di un prodotto lasciando invariato lo stock corrente.
|
||||
* @return 0 ok, 1 non trovato, 2 nome gia' usato, -1 errore.
|
||||
*/
|
||||
int updateProduct(const char *productsFile, const char *soldFile, const char *oldName, const char *newName, double price);
|
||||
|
||||
/**
|
||||
* @brief Aggiorna nome, prezzo e inventario di un prodotto esistente.
|
||||
* @param productsFile Percorso del file JSON dei prodotti.
|
||||
* @param soldFile Percorso del file JSON delle vendite.
|
||||
* @param oldName Nome attuale del prodotto.
|
||||
* @param newName Nuovo nome da assegnare.
|
||||
* @param price Nuovo prezzo.
|
||||
* @param stock Quantità in magazzino.
|
||||
* @return 0 in caso di successo, codice di errore/stato altrimenti.
|
||||
* @brief Aggiorna nome, prezzo e stock di un prodotto.
|
||||
* Se il nome cambia aggiorna nella stessa operazione file vendite e riferimenti nei bundle.
|
||||
* @param stock Giacenza ATTUALE desiderata (negativo = infinita).
|
||||
* @return 0 ok, 1 non trovato, 2 nome gia' usato, -1 errore.
|
||||
*/
|
||||
int updateProductWithInventory(const char *productsFile, const char *soldFile, const char *oldName, const char *newName, double price, int stock);
|
||||
|
||||
/**
|
||||
* @brief Legge lo stato dell'inventario (quantità e tracciamento) di un prodotto.
|
||||
* @param fname Percorso del file JSON dei prodotti.
|
||||
* @brief Legge lo stock corrente (calcolato) di un prodotto.
|
||||
* @param productsFile Percorso del file JSON dei prodotti.
|
||||
* @param soldFile Percorso del file JSON delle vendite.
|
||||
* @param name Nome del prodotto.
|
||||
* @param stock Puntatore a intero in cui salvare la quantità di magazzino.
|
||||
* @param tracked Puntatore a intero in cui salvare se l'inventario è tracciato (1) o meno (0).
|
||||
* @return 0 in caso di successo, 1 se il prodotto non viene trovato, -1 in caso di errore.
|
||||
* @param stock Quantita' corrente (PRODUCT_STOCK_UNLIMITED se non tracciato).
|
||||
* @param tracked 1 se l'inventario e' tracciato, 0 altrimenti.
|
||||
* @return 0 ok, 1 prodotto non trovato, -1 errore.
|
||||
*/
|
||||
int getProductInventory(const char *fname, const char *name, int *stock, int *tracked);
|
||||
|
||||
/**
|
||||
* @brief Imposta la quantità e lo stato di tracciamento dell'inventario per un prodotto.
|
||||
* @param fname Percorso del file JSON dei prodotti.
|
||||
* @param name Nome del prodotto.
|
||||
* @param stock Quantità di magazzino da impostare.
|
||||
* @param tracked Flag di tracciamento (1 per tracciato, 0 altrimenti).
|
||||
* @return 0 in caso di successo, 1 se il prodotto non è trovato, -1 in caso di errore.
|
||||
*/
|
||||
int setProductInventory(const char *fname, const char *name, int stock, int tracked);
|
||||
|
||||
/**
|
||||
* @brief Consuma (scala) una determinata quantità dall'inventario di un prodotto o dei suoi componenti (se bundle).
|
||||
* @param fname Percorso del file JSON dei prodotti.
|
||||
* @param name Nome del prodotto.
|
||||
* @param qty Quantità da consumare.
|
||||
* @return 0 in caso di successo, codice di errore o disponibilità insufficiente altrimenti.
|
||||
*/
|
||||
int consumeProductInventory(const char *fname, const char *name, int qty);
|
||||
int getProductInventory(const char *productsFile, const char *soldFile, const char *name, int *stock, int *tracked);
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Copie vendute */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/**
|
||||
* @brief Restituisce il numero di copie vendute di un determinato prodotto.
|
||||
* @param fname Percorso del file JSON delle vendite.
|
||||
* @param name Nome del prodotto.
|
||||
* @return Il numero di copie vendute (0 se non presente, -1 in caso di errore).
|
||||
* @brief Numero di copie vendute di un prodotto.
|
||||
* @return Copie vendute (0 se non presente, -1 in caso di errore).
|
||||
*/
|
||||
int getCount(const char *fname, const char *name);
|
||||
|
||||
/**
|
||||
* @brief Stampa a schermo (tramite ncurses) la lista delle vendite registrate per ciascun prodotto.
|
||||
* @param fname Percorso del file JSON delle vendite.
|
||||
* @brief Stampa a schermo (ncurses) le vendite registrate per ciascun prodotto.
|
||||
*/
|
||||
void listSold(const char *fname);
|
||||
|
||||
/**
|
||||
* @brief Aggiunge una quantità di copie vendute per un prodotto (creando la voce se non esiste).
|
||||
* @param fname Percorso del file JSON delle vendite.
|
||||
* @param name Nome del prodotto.
|
||||
* @param qty Quantità venduta da aggiungere.
|
||||
* @return 0 in caso di successo, -1 in caso di errore.
|
||||
* @brief Aggiunge copie vendute per un prodotto (crea la voce se non esiste).
|
||||
* Non controlla lo stock: per questo usare recordSale().
|
||||
* @return 0 ok, -1 errore.
|
||||
*/
|
||||
int addSold(const char *fname, const char *name, int qty);
|
||||
|
||||
/**
|
||||
* @brief Elimina la registrazione delle vendite di un prodotto e ripristina l'inventario corrispondente.
|
||||
* @param productsFile Percorso del file JSON dei prodotti.
|
||||
* @param soldFile Percorso del file JSON delle vendite.
|
||||
* @param name Nome del prodotto di cui eliminare le vendite.
|
||||
* @return 0 in caso di successo, 1 se la vendita non è presente, -1 o codice di errore in caso di fallimento.
|
||||
* @brief Elimina la registrazione delle vendite di un prodotto.
|
||||
* Lo stock si "ripristina" da solo perche' e' derivato.
|
||||
* @param productsFile Non usato, mantenuto per compatibilita'.
|
||||
* @return 0 ok, 1 vendita non presente, -1 errore.
|
||||
*/
|
||||
int deleteSold(const char *productsFile, const char *soldFile, const char *name);
|
||||
|
||||
/**
|
||||
* @brief Aggiorna la quantità di copie vendute per un prodotto, regolando di conseguenza il magazzino.
|
||||
* @param productsFile Percorso del file JSON dei prodotti.
|
||||
* @param soldFile Percorso del file JSON delle vendite.
|
||||
* @param name Nome del prodotto.
|
||||
* @param qty Nuova quantità totale venduta.
|
||||
* @return 0 in caso di successo, 1 se non presente, codice di errore altrimenti.
|
||||
* @brief Imposta le copie vendute di un prodotto; se aumentano controlla la disponibilita'.
|
||||
* @return 0 ok, 1 vendita non presente, 2 scorta insufficiente, -1 errore.
|
||||
*/
|
||||
int updateSold(const char *productsFile, const char *soldFile, const char *name, int qty);
|
||||
|
||||
/**
|
||||
* @brief Registra una vendita scalando l'inventario dei prodotti e incrementando le vendite, con supporto di rollback in caso di problemi.
|
||||
* @param productsFile Percorso del file JSON dei prodotti.
|
||||
* @param soldFile Percorso del file JSON delle vendite.
|
||||
* @param name Nome del prodotto venduto.
|
||||
* @param qty Quantità venduta.
|
||||
* @return 0 in caso di successo, codice di errore in caso di fallimento.
|
||||
* @brief Registra una vendita dopo aver verificato la disponibilita' (anche dei componenti, se bundle).
|
||||
* Scrive solo il file vendite.
|
||||
* @return 0 ok, 1 prodotto inesistente, 2 scorta insufficiente, -1 errore.
|
||||
*/
|
||||
int recordSale(const char *productsFile, const char *soldFile, const char *name, int qty);
|
||||
|
||||
@@ -182,10 +141,8 @@ int recordSale(const char *productsFile, const char *soldFile, const char *name,
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/**
|
||||
* @brief Calcola le entrate totali sommando il prodotto tra prezzo e copie vendute per ciascun articolo.
|
||||
* @param productsFile Percorso del file JSON dei prodotti.
|
||||
* @param soldFile Percorso del file JSON delle vendite.
|
||||
* @return Il totale delle entrate, oppure -1.0 in caso di errore.
|
||||
* @brief Entrate totali: somma di prezzo * copie vendute.
|
||||
* @return Il totale, oppure -1.0 in caso di errore.
|
||||
*/
|
||||
double getTotalRevenue(const char *productsFile, const char *soldFile);
|
||||
|
||||
@@ -194,11 +151,8 @@ double getTotalRevenue(const char *productsFile, const char *soldFile);
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/**
|
||||
* @brief Esporta i dati delle vendite e dei prodotti in un file in formato CSV.
|
||||
* @param productsFile Percorso del file JSON dei prodotti.
|
||||
* @param soldFile Percorso del file JSON delle vendite.
|
||||
* @param outFile Percorso del file CSV di output.
|
||||
* @return 0 in caso di successo, un valore negativo in caso di errore.
|
||||
* @brief Esporta prodotti e vendite in CSV (separatore ';').
|
||||
* @return 0 ok, -1 errore di lettura prodotti, -2 errore di apertura del file di destinazione.
|
||||
*/
|
||||
int exportSalesToCsv(const char *productsFile, const char *soldFile, const char *outFile);
|
||||
|
||||
@@ -207,23 +161,20 @@ int exportSalesToCsv(const char *productsFile, const char *soldFile, const char
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/**
|
||||
* @brief Assicura che il file di configurazione dell'applicazione esista, creandolo se necessario.
|
||||
* @param fname Percorso del file di configurazione.
|
||||
* @return 0 in caso di successo, codice di errore altrimenti.
|
||||
* @brief Crea il file di configurazione se non esiste.
|
||||
* @return 0 ok, altro in caso di errore.
|
||||
*/
|
||||
int ensureAppConfig(const char *fname);
|
||||
|
||||
/**
|
||||
* @brief Carica la configurazione dell'applicazione dal file specificato.
|
||||
* @param fname Percorso del file di configurazione.
|
||||
* @return 0 in caso di successo, -1 in caso di errore.
|
||||
* @brief Carica la configurazione dal file specificato.
|
||||
* @return 0 ok, -1 errore.
|
||||
*/
|
||||
int loadAppConfig(const char *fname);
|
||||
|
||||
/**
|
||||
* @brief Salva la configurazione corrente dell'applicazione sul file specificato.
|
||||
* @param fname Percorso del file di configurazione.
|
||||
* @return 0 in caso di successo, -1 in caso di errore.
|
||||
* @brief Salva la configurazione corrente sul file specificato.
|
||||
* @return 0 ok, -1 errore.
|
||||
*/
|
||||
int saveAppConfig(const char *fname);
|
||||
|
||||
|
||||
Reference in new issue
Block a user