I do understand your point of view, but my idea is to get results out of
the door. Doing everything right will be a lot of work, and I'm not
prepared to do it all. At least not now.
The current code has a lot of things implemented, and with several bug
fixes and with 50-100 additional lines of code I achieved the following:
1. import of gncCustomer, gncAddress, gncInvoice, gncEntry and Account
2. referencing between the the imported objects so that all of them are
connected - i.e. the addresses belong to customers, the entries belong
to invoices, the owner of the invoice is a customer and each entry
references an account
The referencing between imported and target book is not complete, so all
of these have to be imported in one file. But it WORKS.
I'm preparing patches now, in case someone finds the code useful. If you
choose not to import all patches, you can import only the bug fixes and
the correct code, and leave the code that is some kind of hack out. Thus
it could be at least partially integrated into gnucash.
The code really has a lot of issues, and is far from ready, so this
really is a distraction for 2.0. Thus I'll submit some entries in the
bugzilla with the patches attached, so that they can be handled after
2.0 is out of the door.
Derek Atkins wrote:
Georgi Mirchev <[EMAIL PROTECTED]> 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
begin:vcard
fn:Georgi Mirchev
n:Mirchev;Georgi
org:Mirchev Ideas Ltd.
adr:;;Golash 18;Sofia;;1111;Bulgaria
email;internet:[EMAIL PROTECTED]
title:Manager
tel;work:+359-2-8705566
tel;cell:+359-888-518932
note;quoted-printable:Services:=0D=0A=
=0D=0A=
Software development=0D=0A=
Web development=0D=0A=
Web design=0D=0A=
Intranet solutions=0D=0A=
Consulting services=0D=0A=
Application security=0D=0A=
Hosting solutions=0D=0A=
Software outsourcing=0D=0A=
url:http://www.mirchevideas.com/
version:2.1
end:vcard
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel