Forum >> Principianti >> Calendario grafico con scadenze

Pagina: 1

Bongiorno, sto valutando come creare una visualizzazione a barre orizzontali (con sviluppo orizzontale mensile) che mi visualizza per ogni articolo l'inizio e la fine di una tal promo visualizzando anche le sovrapposizioni di date (magari una inizia prima che finisca l'altra).
Dovrebbe anche mettere in coda sulla stessa "barra" tutte le promozioni con lo stesso codice articolo (perché non vengono tutte comunicate assieme, ne arrivano tutti i giorni).

Quello che chiedo è qualche suggerimento per poter realizzare ciò ; poi cercherò di svilupparlo.

Premetto che i dati vanno estrapolati da file ricevuto in .csv di circa 10/12.000 righe.


Pensavo di creare con canvas lo "specchietto dei 31 gg" con dei rettangoli verticali che poi si intersecano con le barre del prodotti evidenziando la durata, ... potrebbe essere o è una cavolata?

Poi devo valutare come fare in modo che tutte le promo per lo stesso articolo vengano visualizzare sulla stessa barra una di seguito all'altra.


Come si capisce non so bene come partire per non arenarmi subito sulla strada sbagliata.


Avete vogli di darmi qualche dritta.... ?



Grazie
------
Alberto
Allegati
beh, ovviamente il discorso può variare in base ai dati da rappresentare ma di per se è possibile realizzarlo in molti modi.

Uno dei più semplici che mi viene in mente è quello di sfruttare il gestore "grid" per generare un header tipo "codice|descrizione!01|02|..." e quindi sfruttare rowspan nel configurare le celle di codice e descrizione in rapporto al numero di offerte da rappresentare per articolo, mentre ilo metodo colspan permetterebbe di unificare le celle dei giorni in cui ricade una singola offerta. delle label diversamente colorate evidenzierebbero i periodi delle offerte, magari corredati da una brevissima descrizione.




Potrebbe anche utilizzarsi un canvas per "disegnare" le cose ma sarebbe un attimino più articolato.

Volendo potrebbe anche realizzarsi un mix di metodologie ibride.




In ogni caso dovresti decidere "cosa" vuoi per davvero visualizzare e valutare le dimensioni necessarie alla rappresentazione prima ancora di iniziare una implementazione, quantità di dati eccedenti lo schermo comportano approcci diversi da quantità per cui una schermata è sufficiente.




Nel caso Tu ritenga di provare qui qualche bozza proponi un set di dati su cui ragionare che vediamo cosa si riesce ad escogitare.




Ciao
Fatti non foste a viver come bruti...
beh, ovviamente il discorso può variare in base ai dati da rappresentare ma di per se è possibile realizzarlo in molti modi.

Uno dei più semplici che mi viene in mente è quello di sfruttare il gestore "grid" per generare un header tipo "codice|descrizione!01|02|..." e quindi sfruttare rowspan nel configurare le celle di codice e descrizione in rapporto al numero di offerte da rappresentare per articolo, mentre ilo metodo colspan permetterebbe di unificare le celle dei giorni in cui ricade una singola offerta. delle label diversamente colorate evidenzierebbero i periodi delle offerte, magari corredati da una brevissima descrizione.




Potrebbe anche utilizzarsi un canvas per "disegnare" le cose ma sarebbe un attimino più articolato.

Volendo potrebbe anche realizzarsi un mix di metodologie ibride.




In ogni caso dovresti decidere "cosa" vuoi per davvero visualizzare e valutare le dimensioni necessarie alla rappresentazione prima ancora di iniziare una implementazione, quantità di dati eccedenti lo schermo comportano approcci diversi da quantità per cui una schermata è sufficiente.




Nel caso Tu ritenga di provare qui qualche bozza proponi un set di dati su cui ragionare che vediamo cosa si riesce ad escogitare.




Ciao

Buonasera, allora ecco un set di dati (chiaramente taroccati) su cui ragionare.

Nelle ultime righe cambiando le date per avere più intersezioni excel non ne ha voluti di lasciarmi il trattino e mi ha messo lo slash.

I campi che io ricevo sono questi, il numero di righe sono decine di migliaia.

Io vorrei poter visualizzare per ogni referenza (codice) tutte le date iniziali e finali della durata di ogni singola promo; come inizio per capire mi va bene anche che ogni promo per lo stesso articolo venga visualizzata con una barra diversa (raggruppando le promo per lo stesso codice su barre vicine tra loro)

Spero di essere stato chiaro.

Lo scopo è vedere la durata della promo su una tavolozza di calendario e vedere se poi per lo stesso articolo alla fine della prima c'è una promo di proseguimento (magari con prezzi diversi)




Capisco che l'argomento a chi non ne ha a che fare possa sembrare "stupido" ma ormai si lavora cosi....




Grazie per la pazienza



------
Alberto
Allegati
Tieni conto che a me interessa visualizzare il codice, il numero della promo, le date, il marchio e il prezzo al pubblico

Dimenticavo... i dati io li lavorerò partendo da un archivio in Sqlire3 creato con il set di dati che hai visto che importerò dopo conversione excel-csv; causa controlli vari da effettuare prima di avere un archivio finito (il quale sarà la somma di tutte le promo arrivate gg x gg nell'anno).
Mediamente poi le righe saranno 50/60000 nel db che però verranno usate per gruppi di date.

Spero di non confondere troppo le idee.


--- Ultima modifica di trescon in data 2025-05-29 21:11:12 ---
------
Alberto
Tieni conto che a me interessa visualizzare il codice, il numero della promo, le date, il marchio e il prezzo al pubblico
...
Bisogna valutare ciò che si può rappresentare ... ho scaricato i Tuoi dati di esempio e devo dire che purtroppo non Ti aiutano tanto per la formattazione incoerente per tipi di dato quanto per la mancanza di normalizzazione dei dati stessi.

Purtroppo, causa trasloco in corso, al momento ho poche opportunità di scrivere e non ho avuto spunto di discutere preventivamente con Te le criticità che i Tuoi dati presentano, ho pertanto provveduto a formattare uniformemente le date (è un fattore rilevante) e ad implementare un abozzo di normalizzazione dei riferimenti a singoli articoli delle varie promozioni che vi riferiscono ... quest'ultima è certamente la condizione che Ti crea più difficoltà. Per ovviare ad essa ho stabilito di unificare i dati per "Codice Prodotto" riferendo i dati associati (non uniformi) al primo trovato ed associando ad esso articolo le promozioni inerenti.

Ovviamente, ho operato su un csv prodotto dai dati, manipolati, da Te forniti, ed ho memorizzato il tutto in una lista di dizionari, stralcio del codice relativo :

        with open(fname) as f:
            data = [x.split(';') for x in f.readlines() if x]
        articles = []
        codes = set([x[8] for x in data[1:]])
        for c in codes:
            values = [x for x in data if x[8] == c]
            if not values:
                pass
            else:
                art = {}
                art['codice'] = values[0][8]
                art['modello'] = values[0][9]
                art['marchio'] = values[0][10]
                art['descrizione'] = values[0][11]
                art['quantita'] = values[0][12]
                art['prezzo'] = f'{max([float(x[15]) for x in values]):.2f}'
                art['promozioni'] = []                
                for d in values:
                    prom = {}
                    prom['codice'] = d[0]
                    prom['competenza'] = d[1]
                    prom['attivo'] = d[2]
                    prom['cumulabile'] = d[3]
                    prom['soggetto'] = d[4]
                    prom['fornitore'] = d[5]
                    prom['inizio'] = d[6]
                    prom['fine'] = d[7]
                    prom['sc%'] = d[13]
                    prom['scv'] = d[14]
                    prom['prezzo'] = f'{float(d[15]):0.2f}'
                    art['promozioni'].append(prom)
                articles.append(art)
        articles.sort(key=lambda x: x['codice'])
        self.articoli = articles
Non sono certo di aver interpretato correttamente i dati ma in fin dei conti è solo un esempio.




L'esempio è composto da due finestre, nella prima una treeview permette di selezionare uno o più articoli mostrando in una seconda treeview le promozioni associate con dati più o meno completi.

Due bottoni di comando permettono di aprire la finestra del "calendario" da Te richiesta impostando per la rappresentazione di un singolo articolo e per più articoli (non esagerare, non ho reso il calendario "scorrevole"), il calendario è mensile ed impostato per il mese corrente nel sistema, uno spinbox Ti permetterà di scorrere tra i mesi, giungendoa marzo-febbraio il calendario Ti mostrerà delle barre color pastello in corrispondenza degli articoli interessati.

Non sto qui a spiegare il procedimento, ci vorrebbe troppo tempo, studiati la classe "Mensile", è quella che provvede alla rappresentazione a barre delle promozioni.




Il codice non lo ho curato eccessivamente, forse qualche bug ci scappa, comunque nel complesso funziona decentemente.




Fai sapere se Ti è utile e che ne pensi ... se qualche altro utente vorrà esporre critiche e suggerimenti saranno ben accetti.




Allego in file del codice (395 righe) ed il csv di test, devono risiedere nella stessa directory




Ciao



Fatti non foste a viver come bruti...
Allegati


Pagina: 1



Esegui il login per scrivere una risposta.