QSF Import of gncCustomer and gncInvoice

Derek Atkins warlord at MIT.EDU
Thu Jun 1 13:11:16 EDT 2006


Georgi Mirchev <manager at mirchevideas.com> writes:

> It turned out that I just can't use the same parameter for the invoices. 
> The "owner" param returns gncOwner object, and is used by the rest of 
> GnuCash, so nothing can be changed here.
> Instead I added "owner-qof" that is of type QOF_TYPE_CHOICE, and works 
> with entities. It works fine with customers, and will work fine with the 
> other 3 objects that can be owners of an invoice. The import of 
> customers/addresses works fine now.

I still don't think that's the right answer...  I have no objection to
changing the definition of a GncOwner (although you DEFINITELY need to
be careful about how it's done, because if done "incorrectly" it will
take a LOT of effort to change the code everywhere where it assumes it
knows how a GncOwner is implemented).

> I'm working on the collections now, so that I can import the invoice 
> entries. In order to get any entries in, I had to add a kludge. The QOF 
> iterates over all parameters of the imported object, calling their 
> getters and trying to determine the time. Guess what happens when the 
> getter doesn't actually return an entity, like in the case of parameter 
> that is of type gncOwner. So the QOF book merger code now checks 
> specifically for "gncOwner". Kludge, but works. Unless we add additional 
> param flag "has QofInstance", so that it is compatible with QOF, or  we 
> add dummy QofInstance to gncOwner, I can't see how to resolve that.

... and this is DEFINITELY not the right answer.  We shouldn't
special-case anything inside QOF.

> There is an issue that seems to be a little more complex. During the 
> merge of two books the entries from the first are "copied" into the 
> second, then the first book and it's entries are destroyed. The problem 
> is that the "copy" often is just pointer copy. The reason is that 
> although we have clone functions in the gnc objects, the QofObject 
> doesn't specify a 'clone' callback, so QOF cannot clone any objects. I 
> think this needs to be added, so that QOF can safely clone an object 
> whenever needed.
> What do you think?

I think, as Chris said, that these APIs are only half baked and really
require a lot of thought and effort to make work correctly.  I would
recommend you sit back and come up with a reasonable design before you
jump head-first into coding it up.  come up with a page or two
describing how you think it should work.  Be detailed, but not
loquatious.

Once you have a design we can talk about the merits, work that out,
and then you're welcome to go full-bore into it.

Keep in mind that we're really trying to get 2.0 out the door, so
don't expect many cycles on something like this which really is a 2.0
distraction.

-derek
-- 
       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
       Member, MIT Student Information Processing Board  (SIPB)
       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
       warlord at MIT.EDU                        PGP key available


More information about the gnucash-devel mailing list