PROBLEMA Programmare Carrello | Controllo Prodotti nel Carrello

rob25111

Nuovo Utente
38
0
Ciao a tutti!
Sto programmando un carrello per un e-commerce.

Devo fare in modo che ogni volta che si apra il carrello venga eseguita una funzione che controlli che tutti i prodotti nel carrello siano ancora disponibili (controllando lo stoccaggio). Ora qui il problema:
Ci possono essere nel carrello più prodotti uguali. Mi spiego: se aggiungo prima un prodotto A e poi dopo un po' di nuovo il prodotto A, nel carrello ci saranno 2 Prodotti A (e non 1 con quantità 2), questo per la natura dell'ecommerce.
Quindi prima di controllare lo stoccaggio devo assicurarmi che nel carrello non ci siano 'doppioni' e se si invece come fare?

Sto cercando di risolvere creando una lista_check ossia una lista in cui vengono messi tutti i prodotti già controllati e una lista 'più_prodotti' a cui vengono aggiunti tutti i prodotti con lo stesso Id-prodotto (per poi fare un ulteriore check dopo su tutti i prodotti nella lista 'più_prodotti' e eventualmente eliminare o modificare la quantità di questi ultimi in base alla disponibilità in magazzino). Bene a scriverlo in italiano ma non riesco a tradurre quest'ultimo paragrafo in Python.

Mi sto complicando la vita ? Vi viene un metodo più facile?
Se fosse invece questa l'unica strada percorribile non riesco comunque a scriverla in codice (help me! )

Ecco il Codice scritto fino ad ora: (anche per chi non è esperto di Python dovrebbe essere Facile da intendere)
django framework--based

Python:
lista_check= []
        piu_prodotti=[]
        # controlla se sono aggiunti piu volte lo stesso prodotto al carrello
        # se è disponibile la quanità (per tutte le volte, ok!) altrimenti diminusce la quantita dell'ultimo/i prodotto/i inserito/i fino all disponibilita (stoccaggio)
        for b in carrello_perfetto.prodotti.all():
            for check in lista_check:
                if b.product.id == check[1]:
                    piu_prodotti.append([b.id,check[0],b.product.id,b.quantity])
 
                    # for z in piu_prodotti:
                    #     if z[0]==check[0]:
                    #         piu_prodotti.append([check[1]])
                    # da_prendere= b.quantity + float(check[1])
                    # stoccaggio = b.product.stoccaggio - da_prendere

                    # if stoccaggio >= 0:
                    #     pass
                    # else:
                    #     b.quantity = b.product.stoccaggio-float(check[1])
                    #     print(b.quantity)
                    #     if b.quantity<=0:
                    #         b.delete()
                    #     else:
                    #         b.prezzo=float(b.product.prezzo) * b.quantity
                    #
                    #         b.quantity =round(b.quantity, 2)
                    #         b.prezzo= float(b.prezzo)
                    #         b.save()

            lista_check.append([b.id,b.product.id,b.quantity])

sono fermo fin dove non è commentato.
quelle istruzioni commentate sono un metodo che funziona ma solo se nel carrello ci sono solo 2 prodotti e tutti e due uguali
 
Ultima modifica:

Andretti60

Utente Èlite
6,440
5,091
Scusa ma non ti seguo.
Se faccio un ordine doppio, dovrei essere notificato che il mio carrello contiene già quel prodotto, chiedere conferma e invece di creare un nuovo ordine incrementarne la quantità. Questo è quello che capita nei siti che frequento (e tra me e mia moglie ormai compriamo quasi tutto online, specie dopo la pandemia coronavirus)
 

rob25111

Nuovo Utente
38
0
Scusa ma non ti seguo.
Se faccio un ordine doppio, dovrei essere notificato che il mio carrello contiene già quel prodotto, chiedere conferma e invece di creare un nuovo ordine incrementarne la quantità. Questo è quello che capita nei siti che frequento (e tra me e mia moglie ormai compriamo quasi tutto online, specie dopo la pandemia coronavirus)
è l'commerce di una macelleria.. quindi vorrei che apparissero più prodotti in modo che una persona ad esempio puo' aggiungere prima 1kg di filetto tagliato a fettine sottili e dopo magari 1kg tagliato a pezzetti.
Qualche soluzione?
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,668
11,452
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG

Andretti60

Utente Èlite
6,440
5,091
Lo stesso prodotto può avere lavorazioni diverse, per esempio posso ordinare due coppie dello stesso libro ma una è un regalo, una copia va spedita e me e una a l’indirizzo della persona a cui la regalo (esempio vero).
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,668
11,452
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
non posso.. perché va fatto il check sullo stoccaggio (tutti i prodotti con uno stesso id li sommo e controllo la disponibilità in magazzino, lo stoccaggio appunto)
non significa nulla, una cosa è il materiale (in questo caso la carne) un'altra cosa è il formato, hai presente le penne (sto parlando della pasta): una confezione di penne può essere da 250g, 500g o 1kg. Le penne saranno immagazzinate tutte insieme (stoccaggio totale) ma quando vengono vendute l'ID del prodotto deve essere differente, come ID prodotto puoi immaginare il codice a barre che viene letto al supermetcato.
Penso che dovresti rivedere come hai organizzato le strutture dati sottostanti, perché un prodotto (in questo caso il filetto) è immagazzinato tutto insieme ma venduto in formati o lavorazioni differenti. La carne è una materia prima, la quantità di carne in un pacchetto è una proprietà dell'oggetto da mettere nel carrello, il tipo di lavorazione è un'altra proprietà. Se metti solo l'ID del filetto non puoi avere elementi differenti nel carrello (a meno che non implementi il tipo di dato multiinsieme, dove gli elementi possono essere duplicati, ma neanche in questo caso sarebbe completamente corretto)
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili