Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2
  • 3

ARGOMENTO: [8.0]Modulo Sale order e riga d'ordine

[8.0]Modulo Sale order e riga d'ordine 3 Anni 2 Mesi fa #22879

  • GiuseppeS
  • Avatar di GiuseppeS
  • Offline
  • Expert Boarder
  • Messaggi: 140
  • Ringraziamenti ricevuti 5
  • Karma: 0
Salve.

Sto procedendo alla programmazione del modulo per un ulteriore personalizzazione del mio modulo per la fattura accompagnatoria. Ma, mi sono arenato su un problema.

Volevo fare una cosa del genere nella diga d'ordine:
ProdottoDescrizioneQuantità[Quantità x collo][Quantità tot(qta x collo * qta]PrezzoIVASubtotale
conf cd da 12pzcartone cd da 12pz2122424€22%24€


Ho creato il mio modulo e funziona per metà. Mi spiego meglio.
Quando inserisco il prodotto premendo il pulsante "aggiungi una riga" mi appare la form per l'inserimento.
Faccio le mie dovute modifiche e premo il pulsante "salva e chiudi" fin qui tutto bene. Cioè i dati compaiono correttamente sulla diga d'ordine, come sopra descritto.
Il problema viene quando devo modificare la riga d'ordine, per esempio per aggiungere una diversa quantità.
Infatti sul form che appare c'è solo il pulsante "salva" ma le modifiche che riguardano [qta x collo] e [qta tot] non vengono apportate anche se nel form cambiano.

Che differenza c'è tra i due pulsanti "salva" e "salva e chiudi" mi da l'impressione che chiamino due funzioni diverse. Oppure ho fatto qualche errore di programmazione che non riesco a capire. Se volete si posto anche il codice.

Un ultima domanda.

Per fare il discorso articolo, cartone che contiene tot articoli, ho usato una distinta base ma ho notato che si può fare anche con EDI ("prodotto->inventario" in fondo alla scheda "confezionamento"). Quale metodo mi consigliate?

Grazie
Giuseppe
Ultima modifica: 3 Anni 2 Mesi fa da GiuseppeS.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[8.0]Modulo Sale order e riga d'ordine 3 Anni 2 Mesi fa #22880

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Non ho ben capito il problema ... magari rileggo bene domani ... ma non era meglio usare le unita' di misure differenti e finirla li? o questa strada non era percorribile?
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[8.0]Modulo Sale order e riga d'ordine 3 Anni 2 Mesi fa #22881

  • GiuseppeS
  • Avatar di GiuseppeS
  • Offline
  • Expert Boarder
  • Messaggi: 140
  • Ringraziamenti ricevuti 5
  • Karma: 0
Per quello che voglio fare penso di no. La soluzione da te proposta la vedo più da "compro un prosciutto intero" circa 8 kg e lo vendo affettato.

Quello che intendo io è, ti propongo due esempi che mi capitano nel negozio tutti i giorni:

1) Semplice- Acquisto dal fornitore un cartone di birra(15 bottiglie) e le vendo singole

2) Un po più complesso, se così si può dire - Acquisto sempre un cartone di mezze birre ma questa volta il cartone ne contiene
8 conf da 3. La vendita in questo caso si complica perché ne posso vendere 1 conf(da tre) oppure 1 bottiglia.

In pratica ci sono due modi, almeno da quello che ho potuto capire.

1) Mi creo un articolo "birra" e faccio alcune distinte base (es: cartone di birra da 15) che contengono 15 birre. Oppure due distinte che contengono una "conf. da 3pz" che fa riferimento alla birretta singola, e una "Cartone da 8pz" che fa riferimento alla "conf da 3pz".
Il tutto mi sembra abbastanza lineare e fattibile ma con tanti articoli si può incorrere a grossi problemi di gestione.
In questo modo non ho neanche problemi con i lotti in ingresso perché fanno riferimento alla singola bottiglia.

2) Usare EDI dove in ogni articolo si può descrivere le varie forme di confezionamento. Usando Edi forse è tutto più lineare e soprattutto le varie confezioni sono gestibili direttamente dall'articolo senza bisogno di cercare ne database nell'eventualità di un cambio prezzo.

Penso che riscriverò in modulo passando per EDI anziché la distinta base oppure faccio un modulo ibrido per la produzione di alcuni prodotti.

Detto questo, per far capire a chi compra cosa compra in fattura dovrei rappresentare "un cartone contiene cosa" (1 ct contiene 15 pz) Più o meno come descritto all'inizio.

Il modulo, da me fatto, funziona fino ad un certo punto poi mi sono arenato. Il problema, sia se scelgo l'opzione 1 o 2, mi si ripeterà comunque ed è relativo al passaggio dei dati dalla "form" di inserimento al "tree" che appare in sale_order.

Se premo il pulsante "salva e chiudi" della form i dati vengono scritti nella tree.
Ma se modifico la linea della Tree e mi compare solo il pulsante "Salva" i dati non vengono modificati.
Come se "Salva" e "salva e chiudi" fossero due cosa diverse.

Un po di codice per capire:

La View
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
            
            <record id="order_form_quantity" model="ir.ui.view">
                <field name="name">sale.order.form.molino</field>
                <field name="model">sale.order</field>
                <field name="inherit_id" ref="sale.view_order_form"/>
                <field name="arch" type="xml">
<!--                    <xpath expr="//field[@name='order_line']/form/group/group/div/field[@name='product_uos_qty']" position="before">-->
                    <xpath expr="//field[@name='order_line']/form/group/group/label[@for='product_uos_qty']" position="before">
                        <field name="product_bom_qty" readonly="1"/>
                        <field name="product_uom_qty_tot" readonly="1"/>
                    </xpath>
                
                    <xpath expr="//field[@name='order_line']/tree[@string='Sales Order Lines']/field[@name='product_uom']" position="before">
<!--                        <field name="product_bom_qty" readonly="1" on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, False, parent.date_order, False, parent.fiscal_position, True, context)"/>-->
                            <field name="product_bom_qty" readonly="1" />
                            
                            
<!--                        <field name="product_uom_qty_tot" readonly="1" on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, False, parent.date_order, False, parent.fiscal_position, True, context)"/>-->
                        <field name="product_uom_qty_tot" readonly="1" />
                    </xpath>
                </field>
            </record>
            
 
    </data>
</openerp>

Parte del Modulo
class sale_order_line(models.Model):
    _inherit = 'sale.order.line'
    
    product_uom_qty_tot = fields.Float(string='Total quantity')
    product_bom_qty = fields.Float(string='Bom quantity')
    

    # Parte ancora da fare completamente
    # serve per preparare il contenuto del sale_order_line in fattura
    # lo si nota quando si crea la fattura per aggiungere le righe d'ordine
    @api.model
    def _prepare_order_line_invoice_line(self, line, account_id=False, context=None):
        res  = super(sale_order_line, self)._prepare_order_line_invoice_line(line, account_id=account_id, context=context)
        
	
        print "**** _prepare_order_line_invoice_line MOLINO ****"
        print "**** RES ****", res
        
        return res
    

    @api.model
    def create(self, values, context=None):
        
        if values.get('order_id') and values.get('product_id') and  any(f not in values for f in ['name', 'price_unit', 'product_uom_qty', 'product_uom', 'product_bom_qty', 'product_uom_qty_tot']):

            order = self.env['sale.order'].browse( values['order_id'])
            defaults = self.product_id_change(order.pricelist_id.id, values['product_id'],
                qty=float(values.get('product_uom_qty', False)),
                uom=values.get('product_uom', False),
                qty_uos=float(values.get('product_uos_qty', False)),
                uos=values.get('product_uos', False),
                name=values.get('name', False),
                partner_id=order.partner_id.id,
                date_order=order.date_order,
                fiscal_position=order.fiscal_position[0] if order.fiscal_position else False,
                flag = values.get('flag', False),
                context=dict(context or {})
            )['value']

            if defaults.get('tax_id'):
                defaults['tax_id'] = [[6, 0, defaults['tax_id']]]
            values = dict(defaults, **values)

        return super(sale_order_line, self).create( values, context=context)

    
    @api.multi
    def product_id_change(self, pricelist, product, qty=0, uom=False, qty_uos=0, uos=False,
                            name='', partner_id=False, lang=False, update_tax=True, date_order=False,
                            packaging=False, fiscal_position=False, flag=False, context=None ):
        
        res = super(sale_order_line, self).product_id_change(pricelist, product, qty=qty, uom=uom,
                                                            qty_uos=qty_uos, uos=uos, name=name,
                                                            partner_id=partner_id, lang=lang, update_tax=update_tax,
                                                            date_order=date_order, packaging=packaging, fiscal_position=fiscal_position,
                                                            flag=flag, context=context)
        
        bom_qty = self.env['product.product'].browse(product).product_tmpl_id.bom_ids.bom_line_ids.product_qty

        if product == False or bom_qty == False:
            bom_qty = 1.0
            uom_qty_tot = bom_qty * qty
        else:
            uom_qty_tot = bom_qty * qty
            
        res['value'].update(product_bom_qty = bom_qty, product_uom_qty_tot = uom_qty_tot)
        return res     

Non ho tenuto conto se nella distinta base c'è più di un articolo, infatti mi da errore, ma non è questo il problema.

Vi ringrazio per le eventuali risposte.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[8.0]Modulo Sale order e riga d'ordine 3 Anni 2 Mesi fa #22882

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Premesso che non ho sperimentato la gestione del confezionamento, solo visto che esiste ... dovresti sperimentarci un po' su.

Buona parte di quello che vuoi ottenere lo si fa con le unita' di misura .... mi spiego meglio ... creo una unita' di misura "Birra"

Birra = 1 bottiglia
Confezione da 3 = 3 bottiglie
Confezione da 12 = 12 Bottiglie

Fintanto che il tutto si puo' esprimere in termini di multipli e sottomultipli tutto fila liscio. Sia durante l'acquisto che la vendita ho la possibilita' di specificare se vendo bottiglia, confezione da 3 o confezione da 12 .. tutto in maniera semplice e veloce e senza scomodare una riga di codice ne BOM.

Tutto funziona tranne per il fatto che se vendo 12 bottiglie per Odoo sara' tutto ok anche se in stock ho 4 confezioni da 3 oppure 1 da 12 .... i tre valori sono multipli appunto. Per gestire le unita' indivisibili devi usare il confezionamento ... ma su questo come detto non ho esperienza.

Da quello che scrivi, se ho capito bene, non serve 1 riga di codice ne moduli custom.
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[8.0]Modulo Sale order e riga d'ordine 3 Anni 2 Mesi fa #22885

  • GiuseppeS
  • Avatar di GiuseppeS
  • Offline
  • Expert Boarder
  • Messaggi: 140
  • Ringraziamenti ricevuti 5
  • Karma: 0
Grazie per la risposta.

Ho capito cosa intendi, non sapevo che le unità di misura si potessero usare anche in questo modo. Ma non ci siamo non è la soluzione migliore, per come la vedo io ovviamente.

Cerco di approfondire la differenza sui pulsanti "Salva" e "Salva e chiudi" non vanno proprio.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[8.0]Modulo Sale order e riga d'ordine 3 Anni 3 Settimane fa #23215

  • GiuseppeS
  • Avatar di GiuseppeS
  • Offline
  • Expert Boarder
  • Messaggi: 140
  • Ringraziamenti ricevuti 5
  • Karma: 0
Riprendo l'argomento perché non ho capito ancora come risolvere il problema.
Vi posto un link con un piccolo video per capire il problema problema che ho.
Giusto per trovare una soluzione che credo sia generica cioè valida per tutti i moduli.

www.dropbox.com/s/xyyc8a7w7f4g0az/Opensuse%20Rolling.webm?dl=0

Come si può vedere l'inserimento va bene solo la prima volta quando vi sceglie di inserire un nuovo articolo.
mentre se si modifica un articolo i dati dati non vengono modificati. In pratica quando si preme "save".

Mi potete spiegare il motivo oppure indicarmi dove andare a studiare con qualche esempio?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
  • 3
Tempo creazione pagina: 0.146 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam