[outkafe] WG: WG: Development of accounting solution
Status: Alpha
Brought to you by:
datadictator
|
From: Roman M. <rom...@gi...> - 2009-07-05 14:31:28
|
Hi A.J.
I finished the accounting part a few days ago. Since then my boys are
beta testing it. It works fine and the feedback is positive so far. I'm
ready to submit it to you.
Finally I didn't include the cvs part. I wasn't able to fit it into the
design or I simply didn't understand it. Sorry for that. Please feel
free to add it yourself.
How can I submit the code to you?
Kind regards,
Roman
-----Ursprüngliche Nachricht-----
Von: Roman Meier [mailto:rom...@gi...]
Gesendet: Donnerstag, 25. Juni 2009 12:21
An: 'User discussion and support list.'
Betreff: AW: [outkafe] WG: Development of accounting solution
Hi A.J.
Thanks for the cvs report code ! I'll give cvs a chance then :-)
Kind regards,
Roman
-----Ursprüngliche Nachricht-----
Von: A.J. Venter [mailto:ajv...@gm...]
Gesendet: Donnerstag, 25. Juni 2009 09:37
An: User discussion and support list.
Betreff: Re: [outkafe] WG: Development of accounting solution
Hi Roman,
Since you need to extract the data from the database to present a report
you have basically two approaches you can take.
The one is to have your read method export a set of VAR parameters and
feed them back as variables, this is doable and you can put the
conversions in the lib then, - but you have a stack of them so you will
need to use arrays or something... it gets really complex.
The other is to use a tstringlist and set up a function method -which
means the compiler does almost all the work for you, in that case
though, you need to differentiate the columns in some way that will make
it easy to tell them apart on the other end, CVS is by far the easiest
format to parse, heck - here's the code:
Var TmpStr,Time, Description,AmountStr : String;
Amount,Total : Real;
...
Total := 0;
for I in 0 to Stringlist.Count -1 do
Begin
TmpStr := StringList[I];
Time := Copy(TmpStr,1,pos(',',TmpStr)-1);
Delete(TmpStr,1,pos(',',Tmpstr));
Delete (Time,1,1);
Time := Copy(Time,1,pos('"',Time);
//Repeat exactly as above for Description and amountStr
Ammount := StrToFloat(AmountStr);
Total := Total+Amount;
//Add all three to listview, look in the main tab at the userlist
code for an example
End;
//Add the total to the view
Voila - there's the code to display the report, and you already HAVE the
CSV, so adding a button to save the file is now really easy, basically,
I would say if you implement what you want in the easiest possible way -
you'll get the CSV export feature for free :)
Ciao
A.J.
On Thu, Jun 25, 2009 at 11:25 AM, Roman Meier <rom...@gi...>
wrote:
Hi A.J.
Thanks a lot for the detailed road map !
I don't know yet, if I'm going to implement CVS reports. However, I'll
think about it.
I'll start with the implementation within next week.
Kind regards,
Roman
-----Ursprüngliche Nachricht-----
Von: A.J. Venter [mailto:aj...@ou...]
Gesendet: Donnerstag, 25. Juni 2009 08:14
An: User discussion and support list.
Betreff: Re: [outkafe] WG: Development of accounting solution
I went and thought about it... actually - trust me, it won't :)
The older direqcafe didn't use a database at all, it stored it's data
in a flatfile binary data-file that was shared across machines... yes,
it was a REALLY stupid design, but there were reasons for it at the
time (the main one being that it had been meant as an LTSP only
solution, not networked) - but this does mean that the code was
completely wrong for how outkafe works.
Your system really should store these entries in a table in the
database, and use SQL to generate the data for the reports.
Here's how I would go about it:
Step one, access your postgresql server using something like PGadmin,
and create a new table with the fields you need.
It need not be too much, essentially all you need is
Timestamp (also set as your primary key)
Description (something you can use to save what kind of transaction it
was)
Amount (A floatingpoint field to store the amount, positive or
negative).
Before you now do anything else, do a sql-dump of this table, which
will give you an SQL file that people can use to create the table - we
can then add it to the schema for a next release which will include
your work- voila :)
Then you code into liboutkafe.pas - find the methods that do
transactions, there are only about 3 or 4 of them anyway, and add a
SQL call to each of them to log it (you will find enough examples of
how to create the sql calls in the library - just a line or two above)
The SQL you will want to generate will ultimately be something like this
INSERT INTO transaction_log VALUES(NOW,'Time sold','43.75');
There you go - you now have a solid log of transactions - that's your
first major milestone. The next one is to be able to report on it.
The proper way is to first define a new report class in liboutkafe
which will handle the DB stuff for you, essentially your report class
will have just methods to take input fields you want as potential
criteria (for now, lets assume we only have to worry about a date
range, so that will mean our parameters will be two TDate variables
for start and end) - and then perform the SQL steps (which you can see
examples of in the other methods) and return the data as needed.
I would suggest your report method produce a TStringList which holds
the data returned as a CSV format set.
So our entry above would come back as:
"2009-06-25 10:05:22:06","Time sold","43.75"
Voila, now you have a core reporting back end.
Add a new tab on the outkafeadmin interface for accounting, at the top
of the tab put a small panel with your filtering options, you
basically just need two TDateEdits a "save as" button and a "submit"
button, in the rest of the tab, put a TListView to display the stuff,
set your column names - and you're good to go.
The submit button creates an instance of the report class, generates a
report and then parses the CSV in the stringlist to fill the
tstringlist , as you do so, you can add up the column values to
produce a total line at the bottom. You could either put this in the
tlistview itself, or perhaps display it more prominently in a bottom
panel or something - see what works design wise.
The Save-As button should be disabled until the submit button is
pressed, when it is subsequently clicked, it should save the
TStringList to a text file (TStringList has a SaveToFile method which
makes this really easy) - so you'll need a TSaveFileDialog as well to
hook up, there should be examples of using this in the code, else
check wiki.lazarus.freepascal.org
And now your reports are save-able as CSV's, which in turn can be
imported into spreadsheets, and from there into other types of
software if needed :)
The CSV export will be really useful, and very easy to add - so I
think that will greatly increase the utility of your addon, no others
are really critical, if people want a PDF or something, they can use
their spreadsheet program to generate it and take care of things like
formatting while they are at it.
That should give you all you want, with a few touches to make it
useful to a lot of people :) - and while this is just a set of steps,
I think you should find them simple enough to follow, and if you just
put in the time, you'll get what you want, and others will also get
the benefit - and we can release that as the next outkafe release.
As a side-benefit, it means the next set of binaries will also be
updated with libpq requirements etc. for new distro's -all in all, a
good step forward.
I will take it on myself to do a few more things once you're done and
package a release out of the work.
Ciao
A.J.
On Wed, Jun 24, 2009 at 9:53 PM, Roman Meier<rom...@gi...>
wrote:
> Hi A.J.
>
> Thanks for your input !
>
> I can't promise a perfect designed solution too :-) I just need a
> working solution. Maybe you'll find the time one day to improve upon.
>
> I perfectly agree with your propositions. Transactions where money
goes
> out will not come now. I simply don't need that at the moment.
>
> Please get the code for me. It may help.
>
> Kind regards,
> Roman
>
> -----Ursprüngliche Nachricht-----
> Von: A.J. Venter [mailto:ajv...@gm...]
> Gesendet: Mittwoch, 24. Juni 2009 17:23
> An: User discussion and support list.
> Betreff: Re: [outkafe] WG: Development of accounting solution
>
> I may if I go have a look - but it's approach was really rather badly
> designed.
> I wouldn't even touch it if I were you.
>
> What I would suggest, based on code I did for private customers (and
> thus can't share) which worked well:
> Create first of all, a logging module, that logs the transactions,
make
> sure you log everything you actually need, a timestamp of the
> transaction, the amount in etc.
>
> Ditto for transactions where money goes out.
>
> Then instead of thinking "accounting" you think "reporting" - your
> accounting is merely to pull stats from the report, like "total sales
on
> date X" - which is now all doable in pure SQL - lazarus is just the
> interface, the database already knows how to get this data, so just
tell
> it to :)
>
> Ciao
> A.J.
> On Wed, Jun 24, 2009 at 7:11 PM, Roman Meier <rom...@gi...>
> wrote:
> Hi A.J.
>
> Do you still have the code of the older direqcafe version? I can
imagine
> that its accounting part can help me a lot. Can you make it available
> for download?
>
> Kind regards,
> Roman
>
> -----Ursprüngliche Nachricht-----
> Von: Roman Meier [mailto:rom...@gi...]
> Gesendet: Mittwoch, 24. Juni 2009 09:14
> An: 'User discussion and support list.'
> Betreff: AW: [outkafe] Development of accounting solution
>
> Hi A.J.
>
> Thanks for your support !
>
> Good, I'll integrate the code into Outkafe then.
>
> Please feel free to submit your requirements.
>
> Kind regards,
> Roman
>
> -----Ursprüngliche Nachricht-----
> Von: A.J. Venter [mailto:aj...@ou...]
> Gesendet: Montag, 22. Juni 2009 09:56
> An: User discussion and support list.
> Betreff: Re: [outkafe] Development of accounting solution
>
> Hi Roman,
> I think it's a good idea, I must warn you though - I had one in the
> older direqcafe versions, it was the hardest part of the code to
> maintain, you can write it any way you want - but I think if you build
> it into outkafe as a new feature set you will be able to achieve more
> over-all, and can use the outkafe library directly rather than having
to
> rely on plugin calls.
>
> I am happy to support you in the process, but I must say that I
> basically considder outkafe a completed product and I'm only doing
> crucial maintainance on it now, my focus is on kongoni and it's using
up
> every spare moment I have.
> I would love to see outkafe continue, but I just don't have the time
> myself anymore, ideally somebody would take over the project as a
whole
> and see it into the future, with new and fresh ideas, but in the
> meantime, I'll fix critical bugs and help out people like you trying
to
> expand it.
>
>
> Ciao
> A.J.
> On Mon, Jun 22, 2009 at 11:49 AM, Roman Meier <rom...@gi...>
> wrote:
> Hi list
>
> I would like to develop a simple accounting solution for outkafe that
> can be used by anybody using outkafe.
>
> I intend to use the existing outkafe postgresql database to store the
> data. Therefore I can add another table to it. The columns may be:
>
> Id: 4319
> Staff: felix
> Time: 11:3:7
> Date: Sun Feb 1 2009
> Units: 50
> Username: nketsiah
>
> Should I develop a perl plugin for outkafe or should I integrate the
> code directly into outkafe using lazarus?
>
> I need a list with basic requirements / ideas that should be
> implemented?
>
> I need some feedback to make sure that I'm choosing the right
direction.
>
> Kind regards,
> Roman
>
>
>
------------------------------------------------------------------------
> ------
> Are you an open source citizen? Join us for the Open Source Bridge
> conference!
> Portland, OR, June 17-19. Two days of sessions, one day of
unconference:
> $250.
> Need another reason to go? 24-hour hacker lounge. Register today!
>
http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebrid
> ge.org
> _______________________________________________
>
> OutKafe MailingList.
> MailingList Options:
> https://lists.sourceforge.net/lists/listinfo/akinimod-direqcafe
> OutKafe Website/WIKI:
> http://outkafe.outkastsolutions.co.za
>
>
>
> --
> A.J. Venter
> Tel.: +27 21 554 5059
> Fax: +27 11 252 9197
> Outkast Solutions IT
> www.outkastsolutions.co.za
> A division of Global Pact Trading Pty Ltd.
>
> www.silentcoder.co.za - Blog
> scartoonz.silentcoder.co.za - ScarToonz webcomic
>
>
>
------------------------------------------------------------------------
> ------
> _______________________________________________
>
> OutKafe MailingList.
> MailingList Options:
> https://lists.sourceforge.net/lists/listinfo/akinimod-direqcafe
> OutKafe Website/WIKI:
> http://outkafe.outkastsolutions.co.za
>
>
>
> --
> "Semper in excretum set alta variant" - My father
> A.J. Venter - http://www.silentcoder.co.za
>
>
>
------------------------------------------------------------------------
------
> _______________________________________________
>
> OutKafe MailingList.
> MailingList Options:
https://lists.sourceforge.net/lists/listinfo/akinimod-direqcafe
> OutKafe Website/WIKI:
> http://outkafe.outkastsolutions.co.za
>
--
A.J. Venter
Tel.: +27 21 554 5059
Fax: +27 11 252 9197
Outkast Solutions IT
www.outkastsolutions.co.za
A division of Global Pact Trading Pty Ltd.
www.silentcoder.co.za - Blog
scartoonz.silentcoder.co.za - ScarToonz webcomic
------------------------------------------------------------------------
------
_______________________________________________
OutKafe MailingList.
MailingList Options:
https://lists.sourceforge.net/lists/listinfo/akinimod-direqcafe
OutKafe Website/WIKI:
http://outkafe.outkastsolutions.co.za
------------------------------------------------------------------------
------
_______________________________________________
OutKafe MailingList.
MailingList Options:
https://lists.sourceforge.net/lists/listinfo/akinimod-direqcafe
OutKafe Website/WIKI:
http://outkafe.outkastsolutions.co.za
--
"Semper in excretum set alta variant" - My father
A.J. Venter - http://www.silentcoder.co.za
|