A Dilluns, 24 de desembre de 2012 01:41:43, Cédric Krier va escriure:
> On 24/12/12 01:15 +0100, Albert Cervera i Areny wrote:
> > A Diumenge, 4 de març de 2012 03:49:24, [email protected] va 
escriure:
> > > Reviewers: ,
> > > 
> > > 
> > > 
> > > Please review this at http://codereview.tryton.org/266002/
> > > 
> > > Affected files:
> > >    M trytond/model/modelsql.py
> > >    M trytond/model/modelstorage.py
> > >    M trytond/tests/test_tryton.py
> > 
> > I have a couple of questions that I'd like to ask before adding the
> > changes to this patch:
> > 
> > - In the sale module, the code for creating an invoice uses the
> > ActiveRecord pattern and ends up with a list of SaleLine instances.
> > Current code uses a loop over those objects and calls .save() on each of
> > them. This is can be improved with the new create() but I thought that
> > the following would work and
> > 
> > it didn't:
> >          invoice = self._get_invoice_sale(invoice_type)
> > 
> > +       invoice.lines = invoice_lines
> > 
> >          invoice.save()
> > 
> > I thought this would be similar to the non-ActiveRecord pattern and would
> > be equivalent to [('create', invoice_line_values)] but it is not.
> 
> When reading the code, for me it is equivalent. How do you conclude
> this?

Because I get the following error when trying to process a sale from the 
client.

You try to read records that don't exist anymore!
(Document type: account.invoice.line)

Any idea on why this could happen?

> But of course in your patch the code should be improved to group the
> create.

If the previous code worked I could avoid the loop and thus it would be 
already grouped.

> > So what I did
> > is the following (using ._save_values property):
> > 
> > +        to_create = []
> > 
> >          for line in self.lines:
> >              if line.id not in invoice_lines:
> >                  continue
> >              
> >              for invoice_line in invoice_lines[line.id]:
> >                  invoice_line.invoice = invoice.id
> > 
> > -                invoice_line.save()
> > -                SaleLine.write([line], {
> > -                        'invoice_lines': [('add', [invoice_line.id])],
> > -                        })
> > +                to_create.append(invoice_line._save_values)
> > +        if to_create:
> > +            InvoiceLine.create(to_create)
> > 
> > 
> > Is that Ok?
> 
> Not for me, _save_values should not be used as it is not part of the API.

-- 
Albert Cervera i Areny
http://www.NaN-tic.com
Tel: +34 93 553 18 03

http://twitter.com/albertnan 
http://www.nan-tic.com/blog

-- 
-- 
[email protected] mailing list



Reply via email to