5 Commits
Author SHA1 Message Date
rexeref c088caf03e rimosso .fpm dal tree 2026-10-10 20:40:49 +02:00
rexeref 8cd79da5eb Aggiunta gestione export csv 2026-10-10 20:40:24 +02:00
rexeref 8b5b690435 pulizia da file superflui 2026-10-10 19:19:00 +02:00
rexeref c6543cc583 Modifiche e correzioni generali ai assisted 2026-10-10 19:18:28 +02:00
rexeref 05237cc7f1 Update README.md 2026-10-09 17:33:58 +02:00
14 changed files with 1860 additions and 244 deletions

No files matched your search

+4 -3
View File
@@ -3,9 +3,10 @@ Un gestore di inventario e vendite minimale
## Scaricarlo
Disponibile solo per linux.
Scarica l'ultima versione da [qui](https://git.lug.uniroma2.it/rexeref/productManager/releases)!
Scarica l'ultima versione dalla pagina delle releases!
Avvia l'eseguibile da un terminale.
Se non si avvia rendilo prima un eseguibile con chmod +x
***questo codice molto probabilmente NON è sicuro, utilizzarlo a propria indiscrezione***
## Troubleshooting
wip
+4
View File
@@ -0,0 +1,4 @@
Nome;Inventario iniziale;Vendite;Prezzo;Componenti
zainetto;17;0;20.00;
mozzarrella;16;1;3.00;
3x2 mozzarelle;non definito;1;6.00;mozzarrella
1 Nome Inventario iniziale Vendite Prezzo Componenti
2 zainetto 17 0 20.00
3 mozzarrella 16 1 3.00
4 3x2 mozzarelle non definito 1 6.00 mozzarrella
+1
View File
@@ -7,5 +7,6 @@
extern char productPricesFileLocation[64]; // Dichiarazione extern
extern char countFileLocation[64];
extern char configFileLocation[64];
#endif
+17
View File
@@ -0,0 +1,17 @@
#ifndef JSONFILE_H
#define JSONFILE_H
#include <json-c/json.h>
int existsFile(const char *fname);
int createFile(const char *fname);
int renameDataFile(const char *oldName, const char *newName);
json_object *loadJsonArray(const char *fname);
int saveJsonArray(const char *fname, json_object *arr);
json_object *findItemByName(json_object *arr, const char *name);
int removeItemByName(json_object *arr, const char *name);
int renameItemByName(json_object *arr, const char *oldName, const char *newName);
#endif
+21 -6
View File
@@ -6,7 +6,9 @@
#include <stdlib.h>
#include <string.h>
#include <ncurses.h>
#include <json-c/json.h>
#include "jsonFile.h"
#define PRODUCT_STOCK_UNLIMITED (-1)
struct product {
float cost;
@@ -14,23 +16,36 @@ struct product {
char name;
};
/* File */
int existsFile(const char *fname);
int createFile(const char *fname);
int renameDataFile(const char *oldName, const char *newName);
/* Prodotti */
json_object *getProducts(const char *fname);
void listProducts(const char *fname);
int addProduct(const char *fname, const char *name, double price);
int addProductWithInventory(const char *fname, const char *name, double price, int stock);
int addBundleProduct(const char *fname, const char *name, double price, json_object *components);
double getPrice(const char *fname, const char *name);
int updateProduct(const char *productsFile, const char *soldFile, const char *oldName, const char *newName, double price);
int updateProductWithInventory(const char *productsFile, const char *soldFile, const char *oldName, const char *newName, double price, int stock);
int getProductInventory(const char *fname, const char *name, int *stock, int *tracked);
int setProductInventory(const char *fname, const char *name, int stock, int tracked);
int consumeProductInventory(const char *fname, const char *name, int qty);
/* Copie vendute */
int getCount(const char *fname, const char *name);
void listSold(const char *fname);
int addSold(const char *fname, const char *name, int qty);
int deleteSold(const char *productsFile, const char *soldFile, const char *name);
int updateSold(const char *productsFile, const char *soldFile, const char *name, int qty);
int recordSale(const char *productsFile, const char *soldFile, const char *name, int qty);
/* Entrate */
double getTotalRevenue(const char *productsFile, const char *soldFile);
/* Export */
int exportSalesToCsv(const char *productsFile, const char *soldFile, const char *outFile);
/* Config */
int ensureAppConfig(const char *fname);
int loadAppConfig(const char *fname);
int saveAppConfig(const char *fname);
#endif
+2
View File
@@ -9,10 +9,12 @@
int runMainMenu();
void runOptionsMenu();
void runSellWindow();
void runCreateBundleWindow();
void runAboutWindow();
void runViewSalesWindow();
void runViewProductsWindow();
void runAddProductWindow();
void runExportCsvWindow();
void example_window();
#endif
+54
View File
@@ -0,0 +1,54 @@
[
{
"name":"zainetto",
"price":20.0,
"stock":15
},
{
"name":"mozzarrella",
"price":3.0,
"stock":15
},
{
"name":"3x2 mozzarelle",
"price":6.0,
"bundle":1,
"stock":-1,
"components":[
{
"name":"mozzarrella",
"qty":3
}
]
},
{
"name":"astuccio",
"price":10.0,
"stock":-1
},
{
"name":"set penne matite",
"price":8.0,
"stock":30
},
{
"name":"Scuola",
"price":50.0,
"bundle":1,
"stock":-1,
"components":[
{
"name":"zainetto",
"qty":1
},
{
"name":"astuccio",
"qty":1
},
{
"name":"set penne matite",
"qty":2
}
]
}
]
+14
View File
@@ -0,0 +1,14 @@
[
{
"name":"mozzarrella",
"sold":1
},
{
"name":"3x2 mozzarelle",
"sold":1
},
{
"name":"Scuola",
"sold":2
}
]
+1
View File
@@ -2,4 +2,5 @@
char productPricesFileLocation[64]="./pm-item-price-default.json";
char countFileLocation[64]="./pm-item-sold-count-default.json";
char configFileLocation[64]=".fpm";
+113
View File
@@ -0,0 +1,113 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <json-c/json.h>
#include "../include/jsonFile.h"
int existsFile(const char *fname) {
FILE *file = fopen(fname, "r");
if (file) {
fclose(file);
return 1;
}
return 0;
}
int createFile(const char *fname) {
json_object *arr = json_object_new_array();
if (!arr)
return -1;
int res = json_object_to_file_ext(fname, arr, JSON_C_TO_STRING_PRETTY);
json_object_put(arr);
return (res == 0) ? 0 : -1;
}
int renameDataFile(const char *oldName, const char *newName) {
return (rename(oldName, newName) == 0) ? 0 : -1;
}
static json_object *loadRawArray(const char *fname) {
if (!existsFile(fname) && createFile(fname) != 0)
return NULL;
FILE *f = fopen(fname, "r");
if (!f)
return NULL;
int empty = (fgetc(f) == EOF);
fclose(f);
if (empty)
return json_object_new_array();
json_object *arr = json_object_from_file(fname);
if (!arr)
return NULL;
if (!json_object_is_type(arr, json_type_array)) {
json_object_put(arr);
return NULL;
}
return arr;
}
json_object *loadJsonArray(const char *fname) {
return loadRawArray(fname);
}
int saveJsonArray(const char *fname, json_object *arr) {
if (!arr)
return -1;
return (json_object_to_file_ext(fname, arr, JSON_C_TO_STRING_PRETTY) == 0) ? 0 : -1;
}
json_object *findItemByName(json_object *arr, const char *name) {
if (!arr || !name)
return NULL;
size_t n = json_object_array_length(arr);
for (size_t i = 0; i < n; i++) {
json_object *item = json_object_array_get_idx(arr, i);
json_object *jname = NULL;
if (json_object_object_get_ex(item, "name", &jname) &&
strcmp(json_object_get_string(jname), name) == 0)
return item;
}
return NULL;
}
int removeItemByName(json_object *arr, const char *name) {
if (!arr || !name)
return -1;
size_t n = json_object_array_length(arr);
for (size_t i = 0; i < n; i++) {
json_object *item = json_object_array_get_idx(arr, i);
json_object *jname = NULL;
if (json_object_object_get_ex(item, "name", &jname) &&
strcmp(json_object_get_string(jname), name) == 0) {
json_object_array_del_idx(arr, (int)i, 1);
return 0;
}
}
return 1;
}
int renameItemByName(json_object *arr, const char *oldName, const char *newName) {
if (!arr || !oldName || !newName)
return -1;
json_object *item = findItemByName(arr, oldName);
if (!item)
return 1;
json_object_object_add(item, "name", json_object_new_string(newName));
return 0;
}
+805 -97
View File
File diff suppressed because it is too large. Load diff
+4 -24
View File
@@ -22,6 +22,7 @@
#include "../include/windowsDeclaration.h"
#include "../include/windowsBack.h"
#include "../include/logic.h"
#include "../include/globals.h"
void printLogoBG();
@@ -43,36 +44,15 @@ int main(){
noecho();
curs_set(0);
raw();
if (loadAppConfig(configFileLocation) != 0)
warningf("Impossibile caricare la config '%s', uso i valori di default.", configFileLocation);
printLogoBG();
statusf(" ");
refresh();
int running = 0;
while(running != 6){
while (runMainMenu()) {
printLogoBG();
refresh();
running = runMainMenu();
switch(running) {
case 1:
runSellWindow();
break;
case 2:
runViewSalesWindow();
break;
case 3:
runViewProductsWindow();
break;
case 4:
runAddProductWindow();
break;
case 5:
runAboutWindow();
// runOptionsMenu();
break;
case 6:
break;
}
}
endwin();
+1
View File
@@ -1,6 +1,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <ncurses.h>
#include "../include/windowsBack.h"
+819 -114
View File
File diff suppressed because it is too large. Load diff