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 )