Ticket #80 (closed miglioria: sistemata)

Opened 4 years ago

Last modified 4 years ago

Modifica Modello catalogo prodotto e Listini prezzo

Reported by: dom_thual Owned by: modello
Priority: importante Milestone: ACQUISTIAMO - L'utente può ordinare
Component: sviluppo Keywords:
Cc:

Description

La definizione di un Patto di solidarietà si permette di definire un elenco di prodotti ad un certo prezzo. Questo elenco viene consultato al livello anagrafico anche in assenza di ordine.

La generazione di un ordine crea un listino che può essere contestualizzato.

Change History

comment:1 Changed 4 years ago by dom_thual

la proposta:
*Anagrafica*

class Product(models.Model, PermissionResource): "PRODUCT FROM PRODUCER"

producer = models.ForeignKey(Supplier)

class SupplierStock(models.Model, PermissionResource): "PRODUCT SELL BY SUPPLIER"

supplier = models.ForeignKey(Supplier)
product = models.ForeignKey(Product)
price = models.FloatField()

class GASSupplierSolidalPact(models.Model, PermissionResource): "LIST OF PRODUCTS"

gas = models.ForeignKey(GAS)
supplier = models.ForeignKey(Supplier)

-- supplier_gas_catalog = models.ManyToManyField(Product, null=True, blank=True) # which Products GAS members can order from Supplier
++ supplier_gas_catalog = models.ManyToManyField(SupplierStock, blank=True, through='GASSupplierStock') # which Products at which price GAS members can order from Supplier

order_price_percent_update = models.FloatField()

--*Dinamico (file order.py)*
--
--class GASSupplierStock(models.Model, PermissionResource): "PRODUCT FOR A GAS"
-- gas = models.ForeignKey(GAS)
-- supplier_stock = models.ForeignKey(SupplierStock)
-- def price(self):
-- price_percent_update = GASSupplierSolidalPact...order_price_percent_update

++#Add nel file supplier/Models.py
++class GASSupplierStock(models.Model, PermissionResource): "PRODUCT FOR A GAS"
++ supplier_stock = models.ForeignKey(SupplierStock)
++ def price(self):
++ price_percent_update = GASSupplierSolidalPact...order_price_percent_update
++
++*Dinamico (file order.py)*

class GASSupplierOrder(models.Model, PermissionResource):
-- gas = models.ForeignKey(GAS)
-- supplier = models.ForeignKey(Supplier)
++ pds = models.ForeignKey(GASSupplierSolidalPact) see #ticket79

products = models.ManyToManyField(GASSupplierStock, help_text=_("products available for the order"), blank=True, through='GASSupplierOrderProduct')

class GASSupplierOrderProduct(models.Model, PermissionResource): "PRODUCT FOR AN ORDER"

order = models.ForeignKey(!GASSupplierOrder)
stock = models.ForeignKey(!GASSupplierStock)

++ ADD custom fields if necesary relative of Order Constraint

class GASMemberOrder(models.Model, PermissionResource): "PRODUCT ORDERED"

product = models.ForeignKey(GASSupplierOrderProduct)

comment:2 Changed 4 years ago by dom_thual

Prima di tutto ho riportato tutta la sequenza dei listini per capire appieno la logica di implementazione. Qualcosa sembra non ottimale. A confermare i miei dubbi è l'inizializzazione che Lorenzo ha fatto (def setUp) per il Test Case GASSupplierOrderTest: Cf.https://github.com/feroda/gasistafelice/commit/879c3edb4b301e902c31406f91441297ad25576a riga 147.

Che guadagno:
Principalmente lo scopo è di togliere dalla parte gestione degli ordini (parte dinamica) la classe GASSupplierStock per portarla nella parte Anagrafica.

Generare il catalogo-listino degli GASSupplierStock alla generazione di un patto di solidarietà.
Infatti come mostrato nel Test case per l'ordine la creazione degli GASSupplierStock devono arrivare prima dell'ordine.

La creazione di un ordine provoca la generazione del listino d'acquisto (order.products). Ciascun product deve accogliere un eventuale contestualizzazione: ad esempio la quantità minima da ordinare non è 0.100 ma 0.500 (solo per questo ordine)

Sostituire il catalogo che punta direttamente alla classe Product (con tutte le logiche in meno da gestire)

Che ditte? O allora mi sfugge qualcosa sul funzionamento e lo scopo del catalogo e del listino GASSupplierStock. è sempre stato legato alla contestualità dell'ordine quando a fare questo lavoro è il GASSupplierOrderProduct.

comment:3 Changed 4 years ago by fero

  • Status changed from new to closed
  • Resolution set to sistemata
  • GASSupplierStock e GASSupplierOrder
    • hanno come chiave esterna il GASSupplierSolidalPact (attributo pact)
  • GASSupplierStock spostato nel file gas/models/base.py
  • GASSupplierSolidalPact ha un attributo supplier_stock definito come models.ManyToManyField(SupplierStock, through=GASSupplierStock, null=True, blank=True)

Penso che il through qui sopra rispetti la semantica intesa da Django, ho lasciato un commento nel codice a tale proposito

Last edited 4 years ago by fero (previous) (diff)
Note: See TracTickets for help on using tickets.