PDA

Visualizza la versione completa : Verifica carrello


supermac
15-06-2017, 17:54
Ho un gran bel rompicapo informatico da risolvere con un programma in aspNET VB...

La cosa è questa:

in un ecommerce si vogliono vendere articoli definiti come prodotti singoli MA obbligando i clienti a comprare una coppia di pezzi assortiti definiti con un abbinamento memorizzato in una tabella (openCart ad esempio crea dei Bundle ma ho visto che non funziona come dovrebbe perchè non fa controlli sulle quantità).
Facile, ho pensato io: siccome ad un articolo può esserne abbinato più di un altro (sempre in rapporto di quantità 1 a 1), ho creato una tabella Bundle con due colonne nella quale inserisco nella prima colonna l'art. A e nell'altra colonna l'art. abbinabile.

Avrò quindi una tabella con delle coppie di valori:

A - B

A - C

A - D

che significa sostanzialmente che se uno mette nel carrello un articolo A, il carrello deve contenere almeno un articolo B o un articolo C o un articolo D altrimenti l'ordine non può essere finalizzato.


Nella tabella finiscono quindi le possibili combinazioni tra articoli che devono essere venduti in abbinata.


I problemi vengono fuori al checkout, quando devo verificare se l'ordine può essere finalizzato.

Immaginate di avere questi abbinamenti nella tabella Bundle:

A - B

A - C

A - D

C - D

X - D

X - E

X - F

(da cui si evince che se uno mette in carrello A e C dovrà avere anche D)







Qual'è l'algoritmo con cui posso verificare se un carrello può essere finalizzato controllando la rispondenza degli abbinamenti e il rispetto delle quantità?


Per capire la complessità della cosa, mettete che io abbia nella tabella del carrello queste righe:
2 x A
2 x C
1 x X
2 x D

(ho messo apposta il prod X in mezzo) viene facile dire che il carrello non può essere finalizzato (perchè manca il prodotto abbinato a X oppure -se D lo abbiniamo a X- manca un prodotto D abbinato a C) ma come va costruita la routine per controllare rigorosamente la cosa partendo dal recordset con gli articoli presenti in carrello?


Per divertirsi o per verifica poi, questi carrelli possono essere finalizzati?

Carrello1:
2 x A

1 x B

1 x C

1 x X

2 x D


Carrello2:

2 x A

1 x B

1 x C

3 x X

3 x D


Carrello3:

2 x A

1 x B

2 x D

2 x X

1 x F


(mi sento come la Susi della Settimana Enigmistica :D )

Alhazred
16-06-2017, 09:33
Il problema posto in questi termini non è per niente semplice da risolvere, devi per forza di cose operare in questo modo? Non puoi cambiare sistema?
Se fosse possibile io farei così:
- l'utente sceglie il prodotto A, per proseguire, il sistema gli chiede di scegliere uno dei prodotti associabili, quindi B, C o D
- l'utente sceglie il prodotto da associare e ti salvi l'abbinamento da qualche parte (un array per esempio)
- se l'utente dovesse rimuovere un prodotto dal carrello, il sistema rimuove automaticamente anche quello che gli era stato associato

in questo modo hai la certezza che nel carrello ci sono sempre le coppie corrette.

supermac
16-06-2017, 18:44
No non posso farlo: conta che per fargli selezionare gli articoli in bundle devo farlo uscire dalla pagina di dettaglio del prodotto in cui si trova e portarlo sulla pagina di dettaglio degli altri prodotti in bundle dove potrà scegliere taglia, colore e altre amenità.
Se nella pagina precedente ha selezionato 3 prodotti A e li ha messi in carrello, si sposta nel prodotto B, sceglie le opzioni e ne seleziona uno solo poi si sposta nella pagina di dettaglio del prodotto C, sceglie le altre opzioni e ne seleziona un altro... il controllo non lo posso fare in fase di inserimento, lo devo fare solo guardando quel che ho nel carrello prima della finalizzazione.

Loading