<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.adempiere.com/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>ADempiere ERP Wiki - User contributions [en]</title>
		<link>http://www.adempiere.com/Special:Contributions/Trifonnt</link>
		<description>From ADempiere ERP Wiki</description>
		<language>en</language>
		<generator>MediaWiki 1.15.4</generator>
		<lastBuildDate>Tue, 21 May 2013 08:01:41 GMT</lastBuildDate>
		<item>
			<title>Sponsored Development:Persistence of Table Preferences</title>
			<link>http://www.adempiere.com/Sponsored_Development:Persistence_of_Table_Preferences</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Create new window */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= License =&lt;br /&gt;
[http://www.gnu.org/copyleft/gpl.html GPL v2] - the same as ADempiere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Team =&lt;br /&gt;
&lt;br /&gt;
== Functional Specifications ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Testers ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
* Functionality One - In Progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
== Functionality One ==&lt;br /&gt;
Currently in ADempiere GridView mode for every table users can re-arrenge columns, each column can be hidden/shown. Unfortunately this configuration is not persisted, so when user close the window it is lost.&lt;br /&gt;
Aim of this development is to allow users to persist their preferences.&lt;br /&gt;
  &lt;br /&gt;
* Each User would be able to hide/show colums &amp;amp; move (position left right) the columns in grid mode.&lt;br /&gt;
Many of these configurations could be saved so that in record view, the user would right click on toggle button and have a choice of the saved configs. If the user left clicks, the last used config is taken. &lt;br /&gt;
&lt;br /&gt;
* Deleting of the saved configurations should be like in the advanced search (from the window - not only from the admin side).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Application Dictionary changes =&lt;br /&gt;
&lt;br /&gt;
== Create new window ==&lt;br /&gt;
[[Image:0-Menu__.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Add Table: &amp;quot;&amp;quot; ==&lt;br /&gt;
[[Image:01-Table-001.jpg]]&lt;br /&gt;
**Fields: Value, Name, Description, Help, ...&lt;br /&gt;
**Samples: (850 PO, 810 Invoice)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://sourceforge.net/tracker/?func=detail&amp;amp;aid=2770661&amp;amp;group_id=176962&amp;amp;atid=883808 FR-2830755 Persistence of swing tables]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</description>
			<pubDate>Tue, 21 Feb 2012 19:18:55 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Sponsored_Development:Persistence_of_Table_Preferences</comments>		</item>
		<item>
			<title>Sponsored Development:Persistence of Table Preferences</title>
			<link>http://www.adempiere.com/Sponsored_Development:Persistence_of_Table_Preferences</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;Created page with '= License = [http://www.gnu.org/copyleft/gpl.html GPL v2] - the same as ADempiere.   = Project Team =  == Functional Specifications == * Trifon Trifonov  == Dev…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= License =&lt;br /&gt;
[http://www.gnu.org/copyleft/gpl.html GPL v2] - the same as ADempiere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Team =&lt;br /&gt;
&lt;br /&gt;
== Functional Specifications ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Testers ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
* Functionality One - In Progress.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
== Functionality One ==&lt;br /&gt;
Currently in ADempiere GridView mode for every table users can re-arrenge columns, each column can be hidden/shown. Unfortunately this configuration is not persisted, so when user close the window it is lost.&lt;br /&gt;
Aim of this development is to allow users to persist their preferences.&lt;br /&gt;
  &lt;br /&gt;
* Each User would be able to hide/show colums &amp;amp; move (position left right) the columns in grid mode.&lt;br /&gt;
Many of these configurations could be saved so that in record view, the user would right click on toggle button and have a choice of the saved configs. If the user left clicks, the last used config is taken. &lt;br /&gt;
&lt;br /&gt;
* Deleting of the saved configurations should be like in the advanced search (from the window - not only from the admin side).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Application Dictionary changes =&lt;br /&gt;
&lt;br /&gt;
== Create new window ==&lt;br /&gt;
[[Image:0-Menu.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Add Table: &amp;quot;&amp;quot; ==&lt;br /&gt;
[[Image:01-Table-001.jpg]]&lt;br /&gt;
**Fields: Value, Name, Description, Help, ...&lt;br /&gt;
**Samples: (850 PO, 810 Invoice)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://sourceforge.net/tracker/?func=detail&amp;amp;aid=2770661&amp;amp;group_id=176962&amp;amp;atid=883808 FR-2830755 Persistence of swing tables]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</description>
			<pubDate>Tue, 21 Feb 2012 19:17:43 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Sponsored_Development:Persistence_of_Table_Preferences</comments>		</item>
		<item>
			<title>User:Trifonnt/MyThoughts</title>
			<link>http://www.adempiere.com/User:Trifonnt/MyThoughts</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Does Community Open Source project need roadmap? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Strange live ==&lt;br /&gt;
Working in Open Source space is very hard sometime or probably most of the time. Contributor's work is in public space and everyone can see it and make comments. I do not speak only for source code, but wiki contributions, forums posts and so on. Contribution to Open Source project has many faces and this is good as all we are good in different areas. Open Source project gather contributors at one space and gives them freedom to express their self. All this is very very nice, BUT, there is always one big BUT. This word makes me sad sometimes, not the word itself but the words which come after BUT. For me Open Source first of all means Free Will to do something, FREE will to comment something, and so on. Just FREE, like i'm free to do it. I do not want anyone to push me to do anything in my Open Source project especially when this man is a man like me, who works side by side with me. I understand that first job of people is for commercial companies with strict rules for everything, but applying rules to Open Source most of the times leads to mistakes. In Adempiere project i was one of the developers who expressed his opinion against rules and i made it not because i do not like rules, but because rules can't work in the Free world. At least rules which demand a contributor to do something when other contributor contribute. I do not see how a contributor can demand other contributor to review his contribution. Contributor can ask for opinion of other contributor, but trying to push other contributor to do something is just something which is not going to happen. Words 'demand' and 'rule' live outside the Free will world of Open Source and are not compatible with the Free world of Open Source. In Adempiere project we have one prove of my words - Policy which demanded a peer review of committed code was reverted, because trackers were left in not appropriate state (in most of the cases second developer do not took the demanded action).&lt;br /&gt;
I write this words because i want to remember my thoughts and writing is the best way to save thoughts in time. I predicted that push of rules in Adempiere would fail, but my prediction increased my bad karma image and my image of complainer which makes me sad. I'm not a complainer, i'm a contributor. I was trying to show to other developers that rules will fail but i didn't found enough understanding at that past moment. Sometimes i wish not to see such bad things, i wish to be calm and nice guy applauding nice contributors and consuming their work anonymously.&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 10:24, 15 February 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Source’s Missed Opportunity ==&lt;br /&gt;
* [http://www.thevarguy.com/2008/01/14/open-sources-missed-opportunity/ Open Source’s Missed Opportunity] Interesting post from The VAR Guy&lt;br /&gt;
&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 03:07, 18 January 2008 (EST)&lt;br /&gt;
&lt;br /&gt;
== Requirements of very small companies ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4676521 sf.net]Interesting post from OpenBravo forums.&lt;br /&gt;
&lt;br /&gt;
== How customers should approach Open source vendor ==&lt;br /&gt;
Very good post from Matt Asay&lt;br /&gt;
* [http://blogs.cnet.com/8301-13505_1-9832883-16.html link]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Yes, I get quite a few requests to have Alfresco integrate with JBoss and Liferay, and I've done business with both. But I didn't need a committee to tell me that. Customers did. Customers have yet to request integration with Compiere, for example, so we haven't done it. Someday we probably will. But when customers vote with dollars.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interesting requirement: Map Your Contacts By Region ==&lt;br /&gt;
* [http://www.sugarcrm.com/forums/showthread.php?p=93524#post93524]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select a group of accounts based on geography...let's say all accounts in Texas. Then be able to map those accounts on an interactive map that will show the locations of each of those accounts as push pins. When you roll over each push pin, it pops up the name of the account and any specified modules like opportunities, calendar etc. Another cool feature would be select any two accounts to calculate the distance/drive time and even download directions.&lt;br /&gt;
&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 02:07, 11 December 2007 (EST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Number of Adempiere developers ==&lt;br /&gt;
22 May 2008.&lt;br /&gt;
&lt;br /&gt;
Adempiere has 70 registered developers in sf.net.&lt;br /&gt;
&lt;br /&gt;
[[User:Trifonnt|trifon]] 03:28, 22 May 2008 (EDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 December 2007.&lt;br /&gt;
&lt;br /&gt;
Adempiere has 56 registered developers in sf.net.&lt;br /&gt;
&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 02:07, 11 December 2007 (EST)&lt;br /&gt;
&lt;br /&gt;
== Risk to be Open Source developer ==&lt;br /&gt;
Here i will try to identify some of the negative sides of being Open Source developer. This are real examples which happen to me and make me sad.&lt;br /&gt;
&lt;br /&gt;
* Help a user and after few days/weeks/months receive a spam message from the company where user work or from him personally.&lt;br /&gt;
** NEVER help a user in private emails. Private emails are for paid support only!&lt;br /&gt;
&lt;br /&gt;
* Many times colleagues or other people tell me that i must increase my prices. It sounds quite good as advice, but the bad side is when they start working with you they are not so happy to pay you recommended by them price. ALWAYS RESPECT YOUR PRICE! &lt;br /&gt;
It is your price which is good for you and under your conditions.&lt;br /&gt;
&lt;br /&gt;
* Many times Managers invite me on a beer and pay the bill. In a return after few days they send me contacts of their employees to help them with technical question. Bad understanding of Open Source model. The fact that source are free do not gives them right to think that i will help their employees for free. It is developers time which must be paid, no matter if he works on Open Source project or commercial project.&lt;br /&gt;
&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 14:43, 1 November 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Idea for additional meta data: AD_Table NamedQuery ==&lt;br /&gt;
JPA has very nice feature 'Named Query'. It would make Application Dictionary more reach if Adempiere has such feature. This idea is very near to Finders, but it allows more wide range of queries.&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 19:17, 26 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idea for additional java interface: DocumentConversion ==&lt;br /&gt;
Adempiere ERP-CRM has processes which generate new document from existing document. For example Generate Invoice from Sales Order. This are quite useful processes, but currently they are not designed with the idea for extendability's. For example if user define new fields in  Sales Order and would like to see values of this fields transfered to Invoice and Shipment later then he must modify source code of GenerateInvoice and GenerateShipment processes. This is not easy and i think that design can be improved. Possible improvements:&lt;br /&gt;
* Define new java interface and invoke classes which implement this interface. This require changes in existing GenerateXxx classes.&lt;br /&gt;
* Define new structure in Application Dictionary which will describe which fields must be transfered during Document Generation process.&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 17:59, 26 October 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Services ==&lt;br /&gt;
Rob Cardwell has very interesting article: [http://www.alignjournal.com/index.cfm?section=article&amp;amp;aid=139 Data Services: A Fundamental Building Block of SOA].&lt;br /&gt;
&lt;br /&gt;
In middle of this article i found that Adempiere has this beautiful functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This approach requires tools that can capture existing data structures from reverse-engineered relational database schema's, and can map these existing structures into more business-oriented data views.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adempiere AD(Application dictionary) on which all tables and windows are based provides meta data for all data structures in the system and even for all graphical components! But with Adempiere user do not need to reverse-engineer database system, all data structures have business oriented view by design.&lt;br /&gt;
&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 22:51, 28 September 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why fights in Open Source projects are bad? ==&lt;br /&gt;
Link to Adempiere post: [https://sourceforge.net/forum/message.php?msg_id=4501509 here]&lt;br /&gt;
&lt;br /&gt;
== What an ERP system MUST NOT allow user to do? ==&lt;br /&gt;
Recently i read a urgent [https://sourceforge.net/forum/message.php?msg_id=4499883 post] in OpenBravo forum. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i have deleted &amp;quot;big bazzar and System&amp;quot;, the default clients and i can't enter to OpenBravo now what is the solution?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interesting? This sounds like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i have deleted &amp;quot;Local Disk C and D&amp;quot; and i can't enter my windows system what is the solution?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most valuable ideas in Compiere is IsActive column and restriction to delete records in most of the tables. It is good if user can delete some Client, but System records must never be deletable!&lt;br /&gt;
This makes another question to me. Is ERP for every user? My answer at this moment is NO. User who implement ERP must be very careful, conscious and most importantly must always make backup of data.&lt;br /&gt;
&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 17:01, 4 September 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenBravo Green? ==&lt;br /&gt;
Recently OpenBravo Green came into my mind(Jordi Mash told me about OpenBravo Green at Adempiere conference in Belrin) and i decided to review it and to check status.&lt;br /&gt;
&lt;br /&gt;
First of all they have good document with intentions and requirements. Good number of frameworks and technologies are listed at this page:&lt;br /&gt;
[http://wiki.openbravo.com/wiki/index.php/Design_principles_for_Openbravo_Green Design principles for Openbravo Green]&lt;br /&gt;
&lt;br /&gt;
They have a prototype and online demo, but i failed to login into demo page.&lt;br /&gt;
[http://demo.openbravo.com/green/ OpenBravo Green demo]&lt;br /&gt;
&lt;br /&gt;
Source code of prototye was more interesting for me and it was the reason that made me write this post.&lt;br /&gt;
&lt;br /&gt;
* I expected to see more commnents and more TODOs. It is prototype and important is to see what developer intend to do than what has been done. Visibility of ideas and intentions is more important than actual work finished. This is not a minus it is just a note and wish from my side.&lt;br /&gt;
&lt;br /&gt;
* Source code dissapointed me, because:&lt;br /&gt;
** I saw one regular web based application. No trace from the idea of Model Driven Architecture or Application dictionary. Probably model classes were generated by some tool, but no evidence or comment in the code or in the wiki pages.&lt;br /&gt;
** Only one author, no participataion from community.&lt;br /&gt;
** Author is Adrian Romero, who is very good POS developer(Tina POS), but i doubt about his experience in ERP systems and Application Driven systems. It looks that he is the only active visible OpenBravo developer. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adempiere: Which is first Data or Code? ==&lt;br /&gt;
Recently i modified very deeply core of Adempiere in order to simplify development and to speed it up. I wasn't sure that such modification is possible and i was very happy when it happened and when at the end it even worked. After some tests i decided to revert to old version of persistent classes (X_xxx) and i deleted newly generated classes and started well known old GenerateModel, but... It failed because GenerateModel needs persistent classes in order to connect to Database. But developer can't generate persistent classes because GenerateModel can't connect to DB. So we got cycle... And here comes my question: Which is first Data or Code?&lt;br /&gt;
I think that design of GenerateModel can be improved:&lt;br /&gt;
&lt;br /&gt;
* In order to connect to DB it should not need Adempiere Client.&lt;br /&gt;
* Data from DB can be moved to external location like (CSV or xml file), but this could creation duplication of data(stored in DB and in file). Not so good idea.&lt;br /&gt;
** CsvJdbc is a good driver which can be used to query CSV files like DB tables: [http://csvjdbc.sourceforge.net/ CsvJdbc - a JDBC driver for CSV files]&lt;br /&gt;
** xlSQL Excel JDBC Driver is another alternative [http://xlsql.sourceforge.net/ xlSQL Excel JDBC Driver]&lt;br /&gt;
** Super CSV [http://supercsv.sourceforge.net/ Super CSV sf.net page]&lt;br /&gt;
** Jxcell [http://www.jxcell.net/index.htm www.jxcell.net]Paid!&lt;br /&gt;
** Xelem [http://xelem.sourceforge.net/index.html xelem.sourceforge.net]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 12:55, 19 August 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Does Community Open Source project need roadmap? ==&lt;br /&gt;
* What does Roadmap means for a project?&lt;br /&gt;
* [http://www.google.com/search?as_q=define%3ARoadmap&amp;amp;hl=en&amp;amp;num=10&amp;amp;btnG=Google+Search&amp;amp;as_epq=&amp;amp;as_oq=&amp;amp;as_eq=&amp;amp;lr=&amp;amp;as_ft=i&amp;amp;as_filetype=&amp;amp;as_qdr=all&amp;amp;as_nlo=&amp;amp;as_nhi=&amp;amp;as_occt=any&amp;amp;as_dt=i&amp;amp;as_sitesearch=&amp;amp;as_rights=&amp;amp;safe=images Goolge define:Roadmap] says few things, but i like mostly one of them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A program for future development indicating what will be developed and when.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
My opinion is that it statement must be more like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A program for future development indicating what will be developed, who will be developed it and when.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Three very important conditions in order to have Roadmap:&lt;br /&gt;
&lt;br /&gt;
** Functionality&lt;br /&gt;
This is easy to be done. We all want functionality and with pleasure we will advice what to be done. So i think that here ANY project can produce good number of items.&lt;br /&gt;
&lt;br /&gt;
** Who will develop it?&lt;br /&gt;
UPS, here the firts problems comes. In order to develop something WE need knowledge, so from the big list of ALL only developers can participate in development. All this means that in Roadmap, Open Source project must identify developers or companies that will create new functionality. Ok, let's say that i would like to build this new functionality and i write my name against the feature.&lt;br /&gt;
&lt;br /&gt;
** When functionality will be developed?&lt;br /&gt;
Who knows? Who can answer? Who is responsible?&lt;br /&gt;
It looks that WHEN brings more question than it answers. In Open Source project if no one commits his time to develop given functionality no one can answer the questions. Moreover if someone commit his free time does anyone has rights to push him for specific date? I do not think so... It is developers free will to participate and create functionality. And as you guess in most of the time it is hard to find free time for building big functionality.&lt;br /&gt;
&lt;br /&gt;
My personal opinion is that spending time to create Roadmap without committed developers/companies against specific functionality is just big wast of time. Even worst it is confusing for the end user who read Roadmap and wait for new version and new functionality. &lt;br /&gt;
&lt;br /&gt;
My big excuse to the users who will be frustrated from ssch Roadmaps.&lt;br /&gt;
[[User:Trifonnt|Trifonnt]] 19:31, 8 August 2007 (EDT)&lt;br /&gt;
&lt;br /&gt;
== To be ADempiere Developer or Adempiere Businessman(Seller) ==&lt;br /&gt;
I work with Adempiere/Compiere since more than 3 years. I must say that i like the product and area very much. I like to develop extensions for Adempiere and i do it everyday for 10-12 hours a day and sometimes more. I know it is not healthy, but... &lt;br /&gt;
But last weeks i started to feel tired from all the rules for Developers and all fights in forums and in email lists. Also i realized that Business people around Adempiere do not have such limitations as Developers. For example:&lt;br /&gt;
&lt;br /&gt;
* On [http://www.adempierebusiness.com/ www.adempierebusiness.com] there are 30 registered Implementation Partners. Good number.&lt;br /&gt;
** What does this Implementation Partners give to Adempiere project?&lt;br /&gt;
Some of them nothing. Well business people say that if we limit and ask for money then this will stop add option of Adempiere. But may i ask how developers can survive?&lt;br /&gt;
** What they get?&lt;br /&gt;
FREE Advertisement. Perfect... I think that Adempiere is the only project that allows such thing. Most of other Open Source projects take money for advertisement and put money back into the project. &lt;br /&gt;
&lt;br /&gt;
* I have read that some of Adempiere Implementation Partners do not work for less than 50 000 USD. Amount which i as developer do not had chance to see till now. Who knows someday Clients may find that contracting developer is much faster and cheaper...&lt;br /&gt;
&lt;br /&gt;
* User expect developers to provide FREE help in Adempiere forums, which gives additional workload to developers.&lt;br /&gt;
&lt;br /&gt;
* Developers are expected to be open and expose all their information to community.&lt;br /&gt;
&lt;br /&gt;
So:&lt;br /&gt;
* I found that i had made mistake. &lt;br /&gt;
It looks that to be Businessman and make money around Adempiere is much easy and painless than to be Adempiere developer. :( &lt;br /&gt;
* I think to reconsider my role in Adempiere project. Role of Implementation Partner looks much safer and giving more incomes.&lt;br /&gt;
* I should start making advertisements from now... So here it is: I can provide Adempiere on Site Implementation for 1500 EURO / week + expenses(hotel + ticket) in case i need to move to other location.&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</description>
			<pubDate>Tue, 21 Feb 2012 19:02:43 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt/MyThoughts</comments>		</item>
		<item>
			<title>User:Trifonnt/Projects</title>
			<link>http://www.adempiere.com/User:Trifonnt/Projects</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project 1 (area: Supply Chain Management) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Migrated from Microsoft Access based application to Compiere ERP-CRM&lt;br /&gt;
Company is the biggest distributor of newspapers in Bulgaria.&lt;br /&gt;
Huge migration effort.&lt;br /&gt;
Imported definitions of:&lt;br /&gt;
Vendors, Customers, Sales Agents, Products, Price Lists, Accounts, Purchase Orders, Sales Orders, Billing addresses, Warehouses.&lt;br /&gt;
Imported ~  20 000 Product definitions.&lt;br /&gt;
Imported ~ 100 000 Purchase Orders.&lt;br /&gt;
Imported ~ 100 000 Sales Orders.&lt;br /&gt;
Developed new module in Compiere ERP-CRM in order to fit company needs in Product Distribution area.&lt;br /&gt;
Developed mobile application and data synchronization module for real time tracking of products.&lt;br /&gt;
Implemented:&lt;br /&gt;
Product Attributes, Purchase Orders, Material Receipts, Invoices (Vendor), Sales Orders, Shipments, Invoices (Customer), Warehouse management, Price Lists, Accounting, Discount Schema.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project 2 (area: ERP) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Migrated from 20 years old application to Compiere ERP-CRM.&lt;br /&gt;
Huge effort in import of data from legacy system.&lt;br /&gt;
Imported definitions of:&lt;br /&gt;
Vednors, Customers, Sales Agents, Products, Price Lists, Accounts, Purchase Orders, Sales Orders, Shippers, Billing addresses, Discount Schema.&lt;br /&gt;
Developed import functionality in Compiere ERP-CRM.&lt;br /&gt;
Developed Slading Scale Commissions in Compiere ERP-CRM.&lt;br /&gt;
Developed Bill of Ladding in Compiere ERP-CRM.&lt;br /&gt;
&lt;br /&gt;
Implemented:&lt;br /&gt;
Purchase Orders, Material Receipts, Invoices (Vendor), Sales Orders, Shipments, Invoices (Customer), Warehouse management, Price Lists, Accounting.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project 3 (area: ERP) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Migrated from Microsoft Solomon to Compiere ERP-CRM.&lt;br /&gt;
Fast migration path.&lt;br /&gt;
Imported definitions of:&lt;br /&gt;
Vendors, Customers, Products, Accounts.&lt;br /&gt;
Developed better user interface to fit needs of users used to work with Microsoft Solomon.&lt;br /&gt;
Developed export from Compiere ERP-CRM to People Soft system.&lt;br /&gt;
Improved traceability of Orders to fit needs of purchasing agency.&lt;br /&gt;
&lt;br /&gt;
Implemented:&lt;br /&gt;
Purchase Orders, Material Receipts, Invoices (Vendor), Sales Orders, Shipments, Invoices (Customer), Warehouse management, Price Lists, Accounting.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project 4 (area: Supply Chain Management) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Extension for Compiere MFG-SCM project.&lt;br /&gt;
Developed java application for java enabled mobile phones.&lt;br /&gt;
Developed web application.&lt;br /&gt;
Developed connection module that enables data scanned with bluetooth enabled barcode scanner to be transferred to mobile phone and after that to web application.&lt;br /&gt;
Application allows factory to track in real time product/part availability.&lt;br /&gt;
Used Java, JSP, Servlet, AJAX and J2ME technologies.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Tue, 21 Feb 2012 18:54:44 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt/Projects</comments>		</item>
		<item>
			<title>Import Validation Helper</title>
			<link>http://www.adempiere.com/Import_Validation_Helper</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Overview of Data Import Validation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Page Status:''' In Progress&lt;br /&gt;
&lt;br /&gt;
== Link to sf.net forum discussion ==&lt;br /&gt;
[https://sourceforge.net/projects/adempiere/forums/forum/610548/topic/4857035 Import Validator Helper]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Overview of Data Import Validation==&lt;br /&gt;
In ADempiere, for importing data from a legacy system, normally we turn to the '''Data Import module''' (&amp;amp;Menu &amp;gt; System Admin &amp;gt; Data &amp;gt; Data Import).&lt;br /&gt;
&lt;br /&gt;
The following picture depicts the concept of how this module works.&lt;br /&gt;
&lt;br /&gt;
[[File:data_import_concept.png]]&lt;br /&gt;
&lt;br /&gt;
If you have been working, and digging into this module before, you will know that the most important part is the validation of raw data --&amp;gt; to data that is valid to ADempiere.&lt;br /&gt;
&lt;br /&gt;
For example, when importing '''Product''', one of the required data is &amp;quot;Product Category&amp;quot;. In the '''Import Product''' window, you will see 2 fields:&lt;br /&gt;
&lt;br /&gt;
[[File:import_product_sample.png]]&lt;br /&gt;
&lt;br /&gt;
When run Import Product, the &amp;quot;Product Category Key&amp;quot; will be validated (using SQL) to get a valid M_Product_Category_ID for &amp;quot;Product Category&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
i.e.,&lt;br /&gt;
&lt;br /&gt;
'''Product Category Key''' = &amp;quot;TILE&amp;quot; --&amp;gt; '''Product Category''' = &amp;quot;Tile&amp;quot; (M_Product_Category_ID = 1000001).&lt;br /&gt;
&lt;br /&gt;
All these looks OK, it work as it should be, but what is my problem?&lt;br /&gt;
&lt;br /&gt;
==My personal problem about Data Import in ADempiere==&lt;br /&gt;
&lt;br /&gt;
Reasons for this '''Import Validation Helper''' is due to the following problems I face:&lt;br /&gt;
&lt;br /&gt;
====Problem 1: Incompatible source of data====&lt;br /&gt;
For that case, that you have control over the source data, it is fine. We can create that CSV file with the valid &amp;quot;Key&amp;quot;. But I my case, I need to reuse product data (CSV file) from other system,&lt;br /&gt;
#Which may not use the same category '''key''' as Adempiere, i.e., they use &amp;quot;TL&amp;quot; --&amp;gt; I need to map it to &amp;quot;TILE&amp;quot; before upload to Import Product table.&lt;br /&gt;
#Which may need to regrouping, i.e., their group &amp;quot;TL&amp;quot;, &amp;quot;TT&amp;quot;, &amp;quot;TB&amp;quot; --&amp;gt; I need to map all of them to &amp;quot;TILE&amp;quot; group in ADempiere.&lt;br /&gt;
And this can't be done automatically in ADempiere's Import Process.&lt;br /&gt;
&lt;br /&gt;
====Problem 2: Cumbersome in writing a lot of validation routine in Import Process====&lt;br /&gt;
If you look in to the code, i.e., ImportProduct.java, you will notice that the first portion of code (in doIt() function) is dedicated for Validation. I.e., for validate M_Product_Category_ID, we have&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		sql = new StringBuffer (&amp;quot;UPDATE I_Product i &amp;quot;&lt;br /&gt;
			+ &amp;quot;SET M_Product_Category_ID=(SELECT M_Product_Category_ID FROM M_Product_Category c&amp;quot;&lt;br /&gt;
			+ &amp;quot; WHERE i.ProductCategory_Value=c.Value AND i.AD_Client_ID=c.AD_Client_ID) &amp;quot;&lt;br /&gt;
			+ &amp;quot;WHERE ProductCategory_Value IS NOT NULL AND M_Product_Category_ID IS NULL&amp;quot;&lt;br /&gt;
			+ &amp;quot; AND I_IsImported&amp;lt;&amp;gt;'Y'&amp;quot;).append(clientCheck);&lt;br /&gt;
		no = DB.executeUpdate(sql.toString(), get_TrxName());&lt;br /&gt;
		log.info(&amp;quot;Set Category=&amp;quot; + no);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A big portion of code in import process, are dedicated for validation.&lt;br /&gt;
&lt;br /&gt;
If using the existing Import Window that already done with ADempiere, it is fine. But when it come to create my own import window, or adding more fields to validate, it is time consuming and error prone.&lt;br /&gt;
&lt;br /&gt;
To address the above problem, I created an Import Validation Helper class (and a data mapping window) that will help mapping data / validate for valid ID even before it is sent into Import Table (when process Import File Loader).&lt;br /&gt;
&lt;br /&gt;
==Import Validation Helper==&lt;br /&gt;
&lt;br /&gt;
====Objectives====&lt;br /&gt;
* Reduce validation code required in Import Processes. Make it configurable here. &lt;br /&gt;
* Make ADempiere data import tools, more flexible to use. Especially with different incoming sources.&lt;br /&gt;
&lt;br /&gt;
====Screen Shot====&lt;br /&gt;
The configuration of how data will be mapped / validated will be configure in the DataMapping window.&lt;br /&gt;
&lt;br /&gt;
[[File:data_mapping_table.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:data_mapping_column.png]]&lt;br /&gt;
&lt;br /&gt;
====Business Requirement====&lt;br /&gt;
&lt;br /&gt;
At the moment of writing, we can only map from OldValue (source) to NewValue (Adempiere). But once completed, this mapping window should address the following requirement&lt;br /&gt;
&lt;br /&gt;
* Map from old value to new value, from string/number &amp;lt;-&amp;gt; string/number&lt;br /&gt;
* Map using wild card&lt;br /&gt;
* Map to constant value, in case source column is not available or not valid.&lt;br /&gt;
* Map by looking to the corresponding table and return valid ID.&lt;br /&gt;
* Map by looking at the default value specify in corresponding table. I.e., getting default warehouse in case of (or in any case) from Warehouse table.&lt;br /&gt;
* etc...&lt;br /&gt;
&lt;br /&gt;
==How to install this plugin==&lt;br /&gt;
&lt;br /&gt;
==Step by Step Guide==&lt;/div&gt;</description>
			<pubDate>Wed, 07 Dec 2011 21:00:48 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Import_Validation_Helper</comments>		</item>
		<item>
			<title>Citizens</title>
			<link>http://www.adempiere.com/Citizens</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;Edited Trifon's current web site&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The citizens of ADempiere Community are known members able to vote on certain project decisions.  &lt;br /&gt;
All citizens can be found on the mailling list &amp;quot;adempiere-citizens&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Please see the discussion about defining our [[Community]]. [[Nominations]] are ongoing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!No!!Name!!Email!!IRC nick!!SF nick!!Date of Entrance!!Reference!!Residence!!Status&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;No&amp;gt;||&amp;lt;Name&amp;gt;||&amp;lt;email&amp;gt;||&amp;lt;irc&amp;gt;||&amp;lt;SF&amp;gt;||&amp;lt;date&amp;gt;||||||&amp;lt;Active/Passive/nominated/applying&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1||[[User:Red1|Redhuan D. Oon]]||[mailto:red1@red1.org red1.org]||&amp;lt;irc&amp;gt;||[http://sourceforge.net/users/red1/ red1]||23.06.2009||http://red1.org/||Malaysia||Active&lt;br /&gt;
|-&lt;br /&gt;
|2||[[User:vpj-cd|Victor Perez]]||[mailto:victor.perez@e-evolution.com e-mail]||&amp;lt;irc&amp;gt;||[http://sourceforge.net/users/vpj-cd/ vpj-cd]||23.06.2009||http://e-evolution.com||Mexico||Active&lt;br /&gt;
|-&lt;br /&gt;
|3||[[User:Trifonnt|Trifon Trifonov]] ||&amp;lt;email&amp;gt;||trifon||[http://sourceforge.net/users/trifonnt trifonnt]||23.06.2009||[http://www.d3soft.biz www.d3soft.biz]||Europe||Active&lt;br /&gt;
|-&lt;br /&gt;
|4||[[User:Teo_sarca|Teo Sarca]]||&amp;lt;email&amp;gt;||teo_sarca||[http://sourceforge.net/users/teo_sarca/ teo_sarca]||23.06.2009||http://www.metas.ro||Romania||Active&lt;br /&gt;
|-&lt;br /&gt;
|5||[[User:Hengsin|Heng Sin]]||[mailto:hengsin@gmail.com gmail]||hengsin||[http://sourceforge.net/users/hengsin hengsin]||07.07.2009||||Malaysia||Active&lt;br /&gt;
|-&lt;br /&gt;
|6||Colin Rooney||&amp;lt;email&amp;gt;||&amp;lt;irc&amp;gt;||&amp;lt;SF&amp;gt;||07.07.2009||||Ireland||Proposed&lt;br /&gt;
|-&lt;br /&gt;
|7||[[User:Juddm|Michael Judd]]||||Michael_Judd||[http://sourceforge.net/users/mjudd/ mjudd]||07.07.2009||[http://www.akunagroup.com www.akunagroup.com]||England||Active&lt;br /&gt;
|-&lt;br /&gt;
|8||Kai Schaeffer||&amp;lt;email&amp;gt;||&amp;lt;irc&amp;gt;||&amp;lt;SF&amp;gt;||07.07.2009||||Germany||Active&lt;br /&gt;
|-&lt;br /&gt;
|9||[[User:Kthiemann|Karsten Thiemann]]||[mailto:kt@schaeffer-ag.de e-mail]||&amp;lt;irc&amp;gt;||&amp;lt;SF&amp;gt;||07.07.2009||||Germany||Active&lt;br /&gt;
|-&lt;br /&gt;
|10||[[User:Mar cal westf|Mario Calderon]]||[mailto:mario.calderon@westfalia-it.com e-mail]||MCalderon||[http://sourceforge.net/users/mar_cal_westf mar_cal_westf]||07.07.2009||[http://www.westfalia-it.com www.westfalia-it.com]||El Salvador||Active&lt;br /&gt;
|-&lt;br /&gt;
|11||Susanne Calderon||[mailto:susanne.de.calderon@westfalia-it.com e-mail]||&amp;lt;irc&amp;gt;||[http://sourceforge.net/users/scalderon scalderon]||07.07.2009||[http://www.westfalia-it.com www.westfalia-it.com]||El Salvador||Active&lt;br /&gt;
|-&lt;br /&gt;
|12||Paul Bowden||&amp;lt;email&amp;gt;||phib||[http://sourceforge.net/users/phib phib]||07.07.2009||[http://www.adaxa.com.au www.adaxa.com.au]||Australia||Active&lt;br /&gt;
|-&lt;br /&gt;
|13||[[User:nwessel|Norbert Wessel]]||n.a.||nwessel||[http://sourceforge.net/users/nwessel nwessel]||07.07.2009||[http://www.metas.de www.metas.de]||Germany||Active&lt;br /&gt;
|-&lt;br /&gt;
|14||[[User:mark_o|Mark Ostermann]]||n.a.||mark_o||[http://sourceforge.net/users/mark_o mark_o]||07.07.2009||[http://www.metas.de www.metas.de]||Germany||Active&lt;br /&gt;
|-&lt;br /&gt;
|15||[[User:Tobi|Tobias Schoenenberg]]||&amp;lt;email&amp;gt;||tobi42||[http://sourceforge.net/users/tobi42 tobi42]||07.07.2009||[http://www.metas.de www.metas.de]||Germany||Active&lt;br /&gt;
|-&lt;br /&gt;
|16||Steven Sackett||&amp;lt;email&amp;gt;||&amp;lt;irc&amp;gt;||adaxa||18.07.2009||[http://www.adaxa.com.au www.adaxa.com.au]||Australia||Active&lt;br /&gt;
|-&lt;br /&gt;
|17||Bayu Cahya P||&amp;lt;email&amp;gt;||&amp;lt;irc&amp;gt;||bayucahya ||2.08.2009|| || Indonesia ||Active&lt;br /&gt;
|-&lt;br /&gt;
|18||[[User:dantam|Daniel Tamm]]||n.a.||&amp;lt;irc&amp;gt;||usrdno ||2.08.2009||[http://www.adempiere.se www.adempiere.se]||Sweden||Active&lt;br /&gt;
|-&lt;br /&gt;
|19||[[User:Dominik|Dominik Zajac]]||&amp;lt;email&amp;gt;||banym||banym||2.08.2009||[http://www.baycix.de www.baycix.de] ||Germany ||Active&lt;br /&gt;
|-&lt;br /&gt;
|20||Peter De Zutter||&amp;lt;email&amp;gt;||&amp;lt;irc&amp;gt;||Goanookie ||2.08.2009|| || Belgium ||Active&lt;br /&gt;
|-&lt;br /&gt;
|21||[[User:Rvergara|Ramiro Vergara]]||[mailto:ramiro.vergara@gmail.com e-mail]||rvergara||[http://sourceforge.net/users/rvergara rvergara]||2.08.2009|| ||Chile ||Active&lt;br /&gt;
|-&lt;br /&gt;
|22||[[User:tspc|Tony Snook]]||[mailto:tspc@dodo.com.au e-mail]||tony_tspc||[http://sourceforge.net/users/tspc tspc]||2.08.2009|| ||Australia||Active &lt;br /&gt;
|-&lt;br /&gt;
|23||[[User:Genied|Angelo Dabalà]]|| || || genied ||3.08.2009|| || Italy ||Active&lt;br /&gt;
|-&lt;br /&gt;
|24||[[User:Mutha|Moses Wangaruro Kariuki]]|| || ||wangaruro ||3.08.2009|| || Kenya ||Active&lt;br /&gt;
|-&lt;br /&gt;
|25||Allan Howard||[mailto:ar_howard@internode.on.net email]||ar_howard||ar_howard||3.08.2009||[http://www.intouchdirect.com.au Intouch Direct]||Australia||Active&lt;br /&gt;
|-&lt;br /&gt;
|26||[[User:Needle58|Dirk Niemeyer]]|| || ||needle58 ||3.08.2009|| || Germany ||Active&lt;br /&gt;
|-&lt;br /&gt;
|27 ||[[user:Viola|Joerg Viola]]||[mailto:joerg.viola@googlemail.com gmail] || ||[https://sourceforge.net/users/joergviola joergviola] ||3.08.2009|| [http://www.objectcode.de www.objectcode.de]|| Germany ||Active&lt;br /&gt;
|-&lt;br /&gt;
|28||[[User:redchris|Cristina Ghita]]||[mailto:cristinamghita@gmail.com gmail]||redchris||[https://sourceforge.net/users/redchris/ redchris]||6.08.2009||http://www.metas.ro||Romania ||Active&lt;br /&gt;
|-&lt;br /&gt;
|29||Enrique Ruibal||||||ruibal||6.08.2009|| || Mexico ||Active&lt;br /&gt;
|-&lt;br /&gt;
|30||[[User:Bogdan|Ioan Bogdan]]||||||bogdan_i||6.08.2009|| || Romania ||Active&lt;br /&gt;
|-&lt;br /&gt;
|31||Moisés Quezada||||||moyses||6.08.2009|| || Mexico ||Active&lt;br /&gt;
|-&lt;br /&gt;
|32||Ngigi Waithaka||||||ngigiwaithaka||6.08.2009|| || Kenya ||Active&lt;br /&gt;
|-&lt;br /&gt;
|33||[[User:Armenrz|Armen Rizal]]||||||armenrz||11.08.2009|| || Indonesia ||Active&lt;br /&gt;
|-&lt;br /&gt;
|34||[[User:Jhsolutions|Joel Hoffman]]|||||| [https://sourceforge.net/users/mjhoff mjhoff]||11.08.2009|| || USA ||Active&lt;br /&gt;
|-&lt;br /&gt;
|35||Joel Stangeland||||||JsSolutions ||11.08.2009|| || USA ||Active&lt;br /&gt;
|-&lt;br /&gt;
|36||[[User:Praneet|Praneet Tiwari]]||||||praneettiwari  ||11.08.2009|| || India ||Active&lt;br /&gt;
|-&lt;br /&gt;
|37||Akos Gabriel||akos.gabriel@i-logic.hu||||gabrielke ||24.08.2009||http://i-logic.hu ||Hungary ||Active&lt;br /&gt;
|-&lt;br /&gt;
|38||Alberto Abudinen||||||albertoabudinen ||24.08.2009|| || Chile ||Active&lt;br /&gt;
|-&lt;br /&gt;
|39||Antoni Ten||||||antoniten ||24.08.2009|| || Spain ||Active&lt;br /&gt;
|-&lt;br /&gt;
|40||[[User:Dellph|Chris Ian Fiel]]||||||dellph ||24.08.2009|| || Philippines ||Active&lt;br /&gt;
|-&lt;br /&gt;
|41||Edwin Ang||||||edwin_ang ||24.08.2009|| || Singapore ||Active&lt;br /&gt;
|-&lt;br /&gt;
|42||[[User:Dittmann|Holger Dittmann]]||||||Openk-hd,hdicr ||24.08.2009|| || Germany ||Active&lt;br /&gt;
|-&lt;br /&gt;
|43||[[User:Interopen|Ivan Calderon]]||||||Interopen ||24.08.2009|| || Spain ||Active&lt;br /&gt;
|-&lt;br /&gt;
|44||Joao Boto||||||eskabetxe ||24.08.2009|| || Portugal ||Active&lt;br /&gt;
|-&lt;br /&gt;
|45||[[User:Ivanceras|Jovansonlee Cesar]]||||||Ivanceras ||24.08.2009|| || Philippines ||Active&lt;br /&gt;
|-&lt;br /&gt;
|46||Kang Ngiap. Hee||||||Beancounter31 ||24.08.2009|| || ||Active&lt;br /&gt;
|-&lt;br /&gt;
|47||Kestutis Mikolajunas||||||amberis, Kestutis||24.08.2009|| || ||Active&lt;br /&gt;
|-&lt;br /&gt;
|48||Paul Aviles||||||Paviles ||24.08.2009|| || USA ||Active&lt;br /&gt;
|-&lt;br /&gt;
|49||Raouf Mazouz||||||raoufmazouz ||24.08.2009|| || ||Active&lt;br /&gt;
|-&lt;br /&gt;
|50||Satyaakam Goswami||||||satyaakam,Satyag ||24.08.2009|| || ||Active&lt;br /&gt;
|-&lt;br /&gt;
|51||Syamsul Anuar Abd Nasir||||||Wariola ||24.08.2009|| || ||Active&lt;br /&gt;
|-&lt;br /&gt;
|52||John MacDonald||||||jcmac||24.08.2009|| || ||Active&lt;br /&gt;
|-&lt;br /&gt;
|53||[[User:Afalcone|Alejandro Falcone]]||||afalcone||[http://sourceforge.net/users/afalcone/ afalcone]||11.09.2009||http://www.openbiz.com.ar ||Argentina|| Active&lt;br /&gt;
|-&lt;br /&gt;
|54||Andrés Cárdenas||||||Amozjacf||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|55||Ariel A. Rosenbrock||||||arosenbrock@yahoo.com||11.09.2009|| || Argentina || Active&lt;br /&gt;
|-&lt;br /&gt;
|56||Benjamin Enrique Garcia||||||benjamin_garcia||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|57||Camilo Parra||||||camiloparra||11.09.2009|| || Colombia || Active&lt;br /&gt;
|-&lt;br /&gt;
|58||Diego Carrero||||||diegocgi||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|59||Evans Armitage||||||r035198x||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|60||Fabian Aguilar||||||faaguila||11.09.2009|| || Chile || Active&lt;br /&gt;
|-&lt;br /&gt;
|61||Fernando Saavedra||||||fercho_comus||11.09.2009|| || Ecuador || Active&lt;br /&gt;
|-&lt;br /&gt;
|62||Fred Blauer||||||fblauer@gmail.com||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|63||Gustavo Vega Q.||||||Bozhd||11.09.2009|| || Ecuador || Active&lt;br /&gt;
|-&lt;br /&gt;
|64||Iveen Duarte||||||iveen||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|65||Javier Carvajal||||||Reivaj7||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|66||Jens Pfeiffer||||||jmpiloq||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|67||Jesús García||||||j2garcia||11.09.2009|| || Colombia || Active&lt;br /&gt;
|-&lt;br /&gt;
|68||Jorge Iván Tabares||||||jtabares||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|69||Jorge Vallejo||||||joredva||11.09.2009|| || Ecuador || Active&lt;br /&gt;
|-&lt;br /&gt;
|70||José Antonio Pons||||japons||japons||11.09.2009|| || Spain || Active&lt;br /&gt;
|-&lt;br /&gt;
|71||Joseph Brower||||||jb_02_98||11.09.2009|| || USA || Active&lt;br /&gt;
|-&lt;br /&gt;
|72||Juan C. Cavo||||||jccaleta||11.09.2009|| ||Argentina || Active&lt;br /&gt;
|-&lt;br /&gt;
|73||Layda Salas||||||laydasalasc||11.09.2009|| || Colombia || Active&lt;br /&gt;
|-&lt;br /&gt;
|74||Leonardo Gutierrez||||||leogiga||11.09.2009|| || Colombia || Active&lt;br /&gt;
|-&lt;br /&gt;
|75||Leonardo Reyes||||||ljreyesd, Desarrollo utb||11.09.2009|| || Colombia || Active&lt;br /&gt;
|-&lt;br /&gt;
|76||Luis Felipe Castilla||||||luisfcastilla||11.09.2009|| || Colombia || Active&lt;br /&gt;
|-&lt;br /&gt;
|77||Manuel Quinteiro||||||mquinteiro||11.09.2009|| || Spain || Active&lt;br /&gt;
|-&lt;br /&gt;
|78||Miguel Hernández Giusti||||||hernandezmiw||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|79||Paula Miller||||||mmiller09||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|80||Rafael Dominguez||||||rafcar2003||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|81||Ruben Alberto Urbe Rosas||||||ruben01121958||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|82||Victor Capuggi||||||vcappugi||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|83||Yogan Naidoo||||||ynaidoo||11.09.2009|| || || Active&lt;br /&gt;
|-&lt;br /&gt;
|84||[[User:CarlosRuiz|Carlos Ruiz]][[Talk:Citizens#New Citizen is Citizen No. 2|*]]||||CarlosRuiz||[http://sourceforge.net/users/globalqss/ globalqss]||||http://www.globalqss.com/||Colombia||Active&lt;br /&gt;
|-&lt;br /&gt;
|85||Russ Herrold||||orc_emac||[http://sourceforge.net/users/herrold/ herrold]||||||USA||Active&lt;br /&gt;
|-&lt;br /&gt;
|86||Thomas Kreser||||||kreser||26.10.2009||http://www.catura.de||Germany||Active&lt;br /&gt;
|-&lt;br /&gt;
|87||[[User:Fer_luck|Fernando Lucktemberg]]||||fer_luck||fer_luck||22.12.2009||||Brazil||Active&lt;br /&gt;
|-&lt;br /&gt;
|88||Germán Tabares||||||gtabaresc||12.01.2010||||Colombia||Active&lt;br /&gt;
|-&lt;br /&gt;
|89||Pedro Rozo||||||smartjsp||21.12.2010||http://www.smartjsp.com||Colombia||Active&lt;br /&gt;
|-&lt;br /&gt;
|90||Jireh Arciaga||||||jairah||21.12.2010||||?||?&lt;br /&gt;
|-&lt;br /&gt;
|91||Sergio Trillo||||sctrade||sctrade||21.12.2010||http://www.sctrade.es||Spain/Barcelona||Active&lt;br /&gt;
|-&lt;br /&gt;
|92||Muhammad Nasir Aftab||||Nasir||nasiraftab||21.12.2010||[[User:Muhammadnasir]]||Pakistan||Active&lt;br /&gt;
|-&lt;br /&gt;
|93||Kitti Upariphutthiphong||||||Kittiu||21.12.2010||http://www.ecosoft.co.th/||Thailand||Active&lt;br /&gt;
|-&lt;br /&gt;
|94||Ayaz Ahmed||||Ayaz||ayaz_ahmed||21.12.2010||||Karachi, Pakistan||Active&lt;br /&gt;
|-&lt;br /&gt;
|95||Peter Shepetko||||pshepetko||pshepetko||21.12.2010||http://www.fina.net.ua||Ukraine||Active&lt;br /&gt;
|-&lt;br /&gt;
|96||Kakhaber Kheladze||||fina||fina||21.12.2010||http://www.fina.net.ua||Georgia||Active&lt;br /&gt;
|-&lt;br /&gt;
|97||Michael Mckay||||MikeMcKay||mjmckay||08.04.2010|| - ||Canada||Active&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:2nd ADempiere European Conference]]&lt;br /&gt;
[[Category:Community Contract]]&lt;/div&gt;</description>
			<pubDate>Mon, 21 Nov 2011 16:31:31 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Citizens</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Paid Adempiere development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me (Yes, i'm one of the founders of ADempiere... so crazy indeed )=&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
* [https://trifonnt.wordpress.com My blog in wordpress.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD (No VAT included)&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount (No VAT included)&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount (No VAT included)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month. (No VAT included)&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO (No VAT included)&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel (No VAT included)&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel (No VAT included)&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel (No VAT included)&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day (No VAT included)&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Tue, 27 Sep 2011 07:59:44 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Paid on site Adempiere Developer training */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me (Yes, i'm one of the founders of ADempiere... so crazy indeed )=&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
* [https://trifonnt.wordpress.com My blog in wordpress.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD (No VAT included)&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount (No VAT included)&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount (No VAT included)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month. (No VAT included)&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO (No VAT included)&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel (No VAT included)&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel (No VAT included)&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel (No VAT included)&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Tue, 27 Sep 2011 07:59:32 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Paid On-Site Flash ADempiere User training(1 day) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me (Yes, i'm one of the founders of ADempiere... so crazy indeed )=&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
* [https://trifonnt.wordpress.com My blog in wordpress.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD (No VAT included)&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount (No VAT included)&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount (No VAT included)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month. (No VAT included)&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO (No VAT included)&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel (No VAT included)&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel (No VAT included)&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Tue, 27 Sep 2011 07:59:20 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Paid On-Site ADempiere User training(1 week) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me (Yes, i'm one of the founders of ADempiere... so crazy indeed )=&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
* [https://trifonnt.wordpress.com My blog in wordpress.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD (No VAT included)&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount (No VAT included)&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount (No VAT included)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month. (No VAT included)&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO (No VAT included)&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel (No VAT included)&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Tue, 27 Sep 2011 07:59:05 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* ADempiere Virtual Appliance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me (Yes, i'm one of the founders of ADempiere... so crazy indeed )=&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
* [https://trifonnt.wordpress.com My blog in wordpress.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD (No VAT included)&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount (No VAT included)&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount (No VAT included)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month. (No VAT included)&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO (No VAT included)&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Tue, 27 Sep 2011 07:58:41 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Contract based ADempiere Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me (Yes, i'm one of the founders of ADempiere... so crazy indeed )=&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
* [https://trifonnt.wordpress.com My blog in wordpress.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD (No VAT included)&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount (No VAT included)&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount (No VAT included)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month. (No VAT included)&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Tue, 27 Sep 2011 07:58:17 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* ADempiere Technical Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me (Yes, i'm one of the founders of ADempiere... so crazy indeed )=&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
* [https://trifonnt.wordpress.com My blog in wordpress.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD (No VAT included)&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount (No VAT included)&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount (No VAT included)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month.&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Tue, 27 Sep 2011 07:57:51 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>Sponsored Development:ADempiere Eclipse Based UI</title>
			<link>http://www.adempiere.com/Sponsored_Development:ADempiere_Eclipse_Based_UI</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Benefits of ADempiere UI based on Eclipse RCP(Rich Client Platform) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= License =&lt;br /&gt;
[http://www.gnu.org/copyleft/gpl.html GPL v2] - the same as ADempiere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Team =&lt;br /&gt;
&lt;br /&gt;
== Coordinator ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Functional Specifications ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Testers ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
* Proposed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
== Benefits of ADempiere UI based on Eclipse RCP(Rich Client Platform) ==&lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP is one of the best java based platforms for creating extensible, flexible and user friendly Graphical Interfaces.&lt;br /&gt;
&lt;br /&gt;
* It is used by [http://www.eclipse.org/community/rcp.php many] organizations worldwide, one of the biggest users of Eclipse RCP is NASA for their [http://www.eclipse.org/community/casestudies/NASAfinal.pdf Interplanetary Operations]. &lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP like Eclipse is based on OSGI and out of the box supports modularity based on Plug-ins and OSGI bundles.&lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP has good number of [http://wiki.eclipse.org/index.php/Rich_Client_Platform#Books_on_RCP.2C_with_chapters_on_RCP.2C_or_otherwise_relevant_to_RCP_development books] and [http://wiki.eclipse.org/index.php/Rich_Client_Platform#Tutorials tutorials] which can helps developers and new comers to get started with the platform.&lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP out of the box has concepts for packaging, updating, user preferences tracking and storing and accessibility.&lt;br /&gt;
&lt;br /&gt;
* ADempiere will greatly benefit if it's UI is created on well known and documented platform.&lt;br /&gt;
&lt;br /&gt;
* Example application created with Eclipse RCP [http://www.eclipse.org/community/images/eclipseTrader.jpg Eclipse Trader]&lt;br /&gt;
&lt;br /&gt;
= Application Dictionary changes =&lt;br /&gt;
&lt;br /&gt;
== Create new window ==&lt;br /&gt;
[[Image:0-Window.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Add Table: &amp;quot;&amp;quot; ==&lt;br /&gt;
[[Image:01-Table-001.jpg]]&lt;br /&gt;
**Fields: Value, Name, Description, Help, ...&lt;br /&gt;
**Samples: (850 PO, 810 Invoice)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://wiki.eclipse.org/index.php/Rich_Client_Platform Eclipse Rich Client Platform]&lt;br /&gt;
* [http://www.eclipse.org/community/rcp.php Eclipse RCP: Case Studies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</description>
			<pubDate>Wed, 07 Sep 2011 06:45:25 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Sponsored_Development:ADempiere_Eclipse_Based_UI</comments>		</item>
		<item>
			<title>Sponsored Development:ADempiere Eclipse Based UI</title>
			<link>http://www.adempiere.com/Sponsored_Development:ADempiere_Eclipse_Based_UI</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Benefits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= License =&lt;br /&gt;
[http://www.gnu.org/copyleft/gpl.html GPL v2] - the same as ADempiere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Team =&lt;br /&gt;
&lt;br /&gt;
== Coordinator ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Functional Specifications ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Testers ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
* Proposed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
== Benefits of ADempiere UI based on Eclipse RCP(Rich Client Platform) ==&lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP is one of the best java based platforms for creating extensible, flexible and user friendly Graphical Interfaces.&lt;br /&gt;
&lt;br /&gt;
* It is used by [http://www.eclipse.org/community/rcp.php many] organizations worldwide, one of the biggest users of Eclipse RCP is NASA for their [http://www.eclipse.org/community/casestudies/NASAfinal.pdf Interplanetary Operations]. &lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP like Eclipse is based on OSGI and out of the box supports modularity based on Plug-ins and OSGI bundles.&lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP has good number of books and tutorials which can helps developers and new comers to get started with the platform.&lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP out of the box has concepts for packaging, updating, user preferences tracking and storing and accessibility.&lt;br /&gt;
&lt;br /&gt;
* ADempiere will greatly benefit if it's UI is created on well known and documented platform.&lt;br /&gt;
&lt;br /&gt;
* Example application created with Eclipse RCP[http://www.eclipse.org/community/images/eclipseTrader.jpg Eclipse Trader]&lt;br /&gt;
&lt;br /&gt;
= Application Dictionary changes =&lt;br /&gt;
&lt;br /&gt;
== Create new window ==&lt;br /&gt;
[[Image:0-Window.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Add Table: &amp;quot;&amp;quot; ==&lt;br /&gt;
[[Image:01-Table-001.jpg]]&lt;br /&gt;
**Fields: Value, Name, Description, Help, ...&lt;br /&gt;
**Samples: (850 PO, 810 Invoice)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://wiki.eclipse.org/index.php/Rich_Client_Platform Eclipse Rich Client Platform]&lt;br /&gt;
* [http://www.eclipse.org/community/rcp.php Eclipse RCP: Case Studies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</description>
			<pubDate>Wed, 07 Sep 2011 06:42:21 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Sponsored_Development:ADempiere_Eclipse_Based_UI</comments>		</item>
		<item>
			<title>Sponsored Development:ADempiere Eclipse Based UI</title>
			<link>http://www.adempiere.com/Sponsored_Development:ADempiere_Eclipse_Based_UI</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Functionality One */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= License =&lt;br /&gt;
[http://www.gnu.org/copyleft/gpl.html GPL v2] - the same as ADempiere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Team =&lt;br /&gt;
&lt;br /&gt;
== Coordinator ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Functional Specifications ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Testers ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
* Proposed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
* Create ADempiere UI based on Eclipse RCP(Rich Client Platform).&lt;br /&gt;
Eclipse RCP is one of the best java based platforms for creating extensible, flexible and user friendly Graphical Interfaces.&lt;br /&gt;
&lt;br /&gt;
* It is used by [http://www.eclipse.org/community/rcp.php many] organizations worldwide, one of the biggest users of Eclipse RCP is NASA for their [http://www.eclipse.org/community/casestudies/NASAfinal.pdf Interplanetary Operations]. &lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP like Eclipse is based on OSGI and out of the box supports modularity based on Plug-ins and OSGI bundles.&lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP has good number of books and tutorials which can helps developers and new comers to get started with the platform.&lt;br /&gt;
&lt;br /&gt;
* Eclipse RCP out of the box has concepts for packaging, updating, user preferences tracking and storing and accessibility.&lt;br /&gt;
&lt;br /&gt;
* ADempiere will greatly benefit if it's UI is created on well known and documented platform.&lt;br /&gt;
&lt;br /&gt;
* Example application created with Eclipse RCP[http://www.eclipse.org/community/images/eclipseTrader.jpg Eclipse Trader]&lt;br /&gt;
&lt;br /&gt;
= Application Dictionary changes =&lt;br /&gt;
&lt;br /&gt;
== Create new window ==&lt;br /&gt;
[[Image:0-Window.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Add Table: &amp;quot;&amp;quot; ==&lt;br /&gt;
[[Image:01-Table-001.jpg]]&lt;br /&gt;
**Fields: Value, Name, Description, Help, ...&lt;br /&gt;
**Samples: (850 PO, 810 Invoice)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://wiki.eclipse.org/index.php/Rich_Client_Platform Eclipse Rich Client Platform]&lt;br /&gt;
* [http://www.eclipse.org/community/rcp.php Eclipse RCP: Case Studies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</description>
			<pubDate>Wed, 07 Sep 2011 06:41:13 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Sponsored_Development:ADempiere_Eclipse_Based_UI</comments>		</item>
		<item>
			<title>Sponsored Development:ADempiere Eclipse Based UI</title>
			<link>http://www.adempiere.com/Sponsored_Development:ADempiere_Eclipse_Based_UI</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Create new window */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= License =&lt;br /&gt;
[http://www.gnu.org/copyleft/gpl.html GPL v2] - the same as ADempiere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Team =&lt;br /&gt;
&lt;br /&gt;
== Coordinator ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Functional Specifications ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Testers ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
* Proposed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
== Functionality One ==&lt;br /&gt;
* Create ADempiere UI based on Eclipse RCP(Rich Client Platform).&lt;br /&gt;
Eclipse RCP is one of the best java based platforms for creating extensible, flexible and user friendly Graphical Interfaces.&lt;br /&gt;
It is used by [http://www.eclipse.org/community/rcp.php many] organizations worldwide, one of the biggest users of Eclipse RCP is NASA for their [http://www.eclipse.org/community/casestudies/NASAfinal.pdf Interplanetary Operations]. &lt;br /&gt;
Eclipse RCP like Eclipse is based on OSGI and out of the box supports modularity based on Plug-ins and OSGI bundles.&lt;br /&gt;
Eclipse RCP has good number of books and tutorials which can helps developers and new comers to get started with the platform.&lt;br /&gt;
ADempiere will greatly benefit if it's UI is created on well known and documented platform.&lt;br /&gt;
Eclipse RCP out of the box has concepts for packaging, updating, user preferences tracking and storing and accessibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Application Dictionary changes =&lt;br /&gt;
&lt;br /&gt;
== Create new window ==&lt;br /&gt;
[[Image:0-Window.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Add Table: &amp;quot;&amp;quot; ==&lt;br /&gt;
[[Image:01-Table-001.jpg]]&lt;br /&gt;
**Fields: Value, Name, Description, Help, ...&lt;br /&gt;
**Samples: (850 PO, 810 Invoice)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://wiki.eclipse.org/index.php/Rich_Client_Platform Eclipse Rich Client Platform]&lt;br /&gt;
* [http://www.eclipse.org/community/rcp.php Eclipse RCP: Case Studies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</description>
			<pubDate>Wed, 07 Sep 2011 06:39:28 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Sponsored_Development:ADempiere_Eclipse_Based_UI</comments>		</item>
		<item>
			<title>Sponsored Development:ADempiere Eclipse Based UI</title>
			<link>http://www.adempiere.com/Sponsored_Development:ADempiere_Eclipse_Based_UI</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;Created new page ADempiere Eclipse Based UI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= License =&lt;br /&gt;
[http://www.gnu.org/copyleft/gpl.html GPL v2] - the same as ADempiere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Team =&lt;br /&gt;
&lt;br /&gt;
== Coordinator ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Functional Specifications ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
== Testers ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
* [[User:User|First Last]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
* Proposed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
&lt;br /&gt;
== Functionality One ==&lt;br /&gt;
* Create ADempiere UI based on Eclipse RCP(Rich Client Platform).&lt;br /&gt;
Eclipse RCP is one of the best java based platforms for creating extensible, flexible and user friendly Graphical Interfaces.&lt;br /&gt;
It is used by [http://www.eclipse.org/community/rcp.php many] organizations worldwide, one of the biggest users of Eclipse RCP is NASA for their [http://www.eclipse.org/community/casestudies/NASAfinal.pdf Interplanetary Operations]. &lt;br /&gt;
Eclipse RCP like Eclipse is based on OSGI and out of the box supports modularity based on Plug-ins and OSGI bundles.&lt;br /&gt;
Eclipse RCP has good number of books and tutorials which can helps developers and new comers to get started with the platform.&lt;br /&gt;
ADempiere will greatly benefit if it's UI is created on well known and documented platform.&lt;br /&gt;
Eclipse RCP out of the box has concepts for packaging, updating, user preferences tracking and storing and accessibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Application Dictionary changes =&lt;br /&gt;
&lt;br /&gt;
== Create new window ==&lt;br /&gt;
[[Image:0-Menu.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Add Table: &amp;quot;&amp;quot; ==&lt;br /&gt;
[[Image:01-Table-001.jpg]]&lt;br /&gt;
**Fields: Value, Name, Description, Help, ...&lt;br /&gt;
**Samples: (850 PO, 810 Invoice)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://wiki.eclipse.org/index.php/Rich_Client_Platform Eclipse Rich Client Platform]&lt;br /&gt;
* [http://www.eclipse.org/community/rcp.php Eclipse RCP: Case Studies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</description>
			<pubDate>Wed, 07 Sep 2011 06:34:31 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Sponsored_Development:ADempiere_Eclipse_Based_UI</comments>		</item>
		<item>
			<title>FR3403603 Mavenize</title>
			<link>http://www.adempiere.com/FR3403603_Mavenize</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Technical Specifications=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Tasks:&lt;br /&gt;
**Collect the new clean ant files written by the &amp;quot;Swiss Guys&amp;quot; from Metux &lt;br /&gt;
**Define modules based on relations in the ant files&lt;br /&gt;
**Define work packages and who is responsible to which package&lt;br /&gt;
**Define project coordinator &lt;br /&gt;
**Collect money and/or resources for doing this effort &lt;br /&gt;
**Define time schedule together with TT and FT for organize the switch to maven build process&lt;br /&gt;
**Prepare training for all developers who don't know about maven building philosophy and how it works in the ADempiere world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
*Feature Request: #3403603 &amp;quot;Mavenize ADempiere&amp;quot; [https://sourceforge.net/tracker/?func=detail&amp;amp;atid=879335&amp;amp;aid=3403603&amp;amp;group_id=176962]&lt;br /&gt;
&lt;br /&gt;
*Most recent forum thread about mavenizing: http://sourceforge.net/projects/adempiere/forums/forum/611167/topic/4659270&lt;br /&gt;
*Maven home page: http://maven.apache.org/&lt;br /&gt;
**Maven IDE: http://mevenide.codehaus.org/&lt;br /&gt;
*ADempiere Software development procedure: http://www.adempiere.com/Software_Development_Procedure&lt;br /&gt;
*Mercurial home page: http://mercurial.selenic.com/&lt;br /&gt;
**Mercurial flow extension https://bitbucket.org/yinwm/hgflow/wiki/UserManual&lt;br /&gt;
&lt;br /&gt;
*ADempiere HG repo: http://adempiere.hg.sourceforge.net:8000/hgroot/adempiere/adempiere&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
&lt;br /&gt;
===Developers===&lt;br /&gt;
&lt;br /&gt;
* [[User:tobi | Tobias Schöneberg]]&lt;br /&gt;
* [[User:Dominik|Banym]]&lt;br /&gt;
* [[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
Please add you here if you want to help.&lt;br /&gt;
&lt;br /&gt;
===Testers===&lt;br /&gt;
===Sponsors===&lt;br /&gt;
&lt;br /&gt;
=== Branch code ===&lt;br /&gt;
&lt;br /&gt;
Add HG repo URL(s) here&lt;br /&gt;
*Branch name is FR3403603_mavenize&lt;br /&gt;
&lt;br /&gt;
=== Roadmap Document===&lt;br /&gt;
&lt;br /&gt;
Use/Extend the table as required&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background:#3399FF; color:white&amp;quot; | Functionality / Feature&lt;br /&gt;
! style=&amp;quot;background:#3399FF; color:white&amp;quot; | Status&lt;br /&gt;
! style=&amp;quot;background:#3399FF; color:white&amp;quot; | Developer&lt;br /&gt;
! style=&amp;quot;background:#3399FF; color:white&amp;quot; | Priority&lt;br /&gt;
! style=&amp;quot;background:#3399FF; color:white&amp;quot; | Milestone&lt;br /&gt;
! style=&amp;quot;background:#3399FF; color:white&amp;quot; | Release Date&lt;br /&gt;
! style=&amp;quot;background:#3399FF; color:white&amp;quot; | Summary&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;left&amp;quot; style=&amp;quot;background:#999999; color:white&amp;quot; | New Functionality&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot; | Functionality 1&lt;br /&gt;
!style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|Pending &lt;br /&gt;
!style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|[[User:vpj-cd |Victor Perez]]&lt;br /&gt;
!style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|High&lt;br /&gt;
!style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|Version No&lt;br /&gt;
!style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|--&lt;br /&gt;
!style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|Draft&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot; |* Functionality 2&lt;br /&gt;
! style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|Pending&lt;br /&gt;
! style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|[[User:vpj-cd |Victor Perez]]&lt;br /&gt;
! style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|High&lt;br /&gt;
! style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|Version No&lt;br /&gt;
! style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|--&lt;br /&gt;
! style=&amp;quot;background:#EFF5FB; color:#0080FF&amp;quot;|Draft&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tracker ===&lt;br /&gt;
URLs of related SourceForge trackers / threads.&lt;br /&gt;
&lt;br /&gt;
=== Migration Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
commented this out, because aparently it doesn't apply hre&lt;br /&gt;
=== Java Package ===&lt;br /&gt;
=== Java Test ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Install Step ===&lt;br /&gt;
Installation instructions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
commented this out, because aparently it doesn't apply hre&lt;br /&gt;
==Application Dictionary Components: ==&lt;br /&gt;
A list of new application dictionary entries (e.g. new windows) with a short description.&lt;br /&gt;
===Entity Type===&lt;br /&gt;
===Elements===&lt;br /&gt;
===Table===&lt;br /&gt;
*ERD&lt;br /&gt;
===Window===&lt;br /&gt;
===Process===&lt;br /&gt;
===Menu===&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</description>
			<pubDate>Tue, 06 Sep 2011 18:11:02 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:FR3403603_Mavenize</comments>		</item>
		<item>
			<title>ADempiere World Conference 2011</title>
			<link>http://www.adempiere.com/ADempiere_World_Conference_2011</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Beuth berlin.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
==News==&lt;br /&gt;
* [[User:Nwessel|Nwessel]] 11:21, 29 August 2011 (UTC) - Schedule uploaded&lt;br /&gt;
* [[User:Nwessel|Nwessel]] 08:23, 29 August 2011 (UTC) - Directions from hotel to conference added: [[#How_to_get_to_the_conference_from_the_hotel]]&lt;br /&gt;
* [[User:Nwessel|Nwessel]] 12:23, 28 August 2011 (UTC) - Conference will be be available via online stream. More details coming soon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schedule==&lt;br /&gt;
&lt;br /&gt;
===Saturday (03.09.11)===&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; width=&amp;quot;700&amp;quot; &lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
09:00 Doors open&lt;br /&gt;
&lt;br /&gt;
09:30 opening of the conference by ADev Board members&lt;br /&gt;
&lt;br /&gt;
09:45 Presentation of ADempiere eV&lt;br /&gt;
&lt;br /&gt;
10:00 ADempiere in a Nutshell [[user:nwessel|Norbert Wessel]] / [[metas]] &lt;br /&gt;
&lt;br /&gt;
10:45 Hands on Side Track: Mavenizing ADempiere (Tobias Schöneberg)&lt;br /&gt;
&lt;br /&gt;
11:00 Presentation ADempiere integration at Schaeffer AG&lt;br /&gt;
&lt;br /&gt;
11:30 Integration at Ottawa Flying Club - small business example.  Automation of order/invoice creation and integration of legacy systems. [[User:MJMcKay|MJMcKay]] &lt;br /&gt;
&lt;br /&gt;
12:00 Using ADempiere Webui and Business API to create Business Portals [[user:nwessel|Norbert Wessel]] / [[metas]]&lt;br /&gt;
&lt;br /&gt;
'''''13:00 lunch break'''''&lt;br /&gt;
&lt;br /&gt;
14:00 Testing with Sahi by [[User:MJMcKay|Michael McKay]]&lt;br /&gt;
&lt;br /&gt;
15:00 new [http://www.adempiere.com/Sponsored_Development:_Libero_Cost_Engine Costing Engine]  [[User:vpj-cd|Victor Perez]] / [http://www.e-evolution.com e-Evolution] &lt;br /&gt;
&lt;br /&gt;
16:00 Available&lt;br /&gt;
&lt;br /&gt;
17:00 Open Discussion&lt;br /&gt;
&lt;br /&gt;
18:30 Come together at conference location (Enjoy German Beer!)&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sunday (04.09.11)===&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; width=&amp;quot;700&amp;quot; &lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
09:00 Doors open&lt;br /&gt;
&lt;br /&gt;
09:30 Using Fuse and Replication interface as Enterprise Service Bus for ADempiere Teo Sarca / [[metas]] &lt;br /&gt;
&lt;br /&gt;
10:00 new [http://www.adempiere.com/Sponsored_Development:_Libero_Warehouse_Management Wherehouse Management]  [[User:vpj-cd|Victor Perez]] / [http://www.e-evolution.com e-Evolution] -  &lt;br /&gt;
&lt;br /&gt;
11:00 Integrate UPS Webservice for calculate shipment cost (Schaeffer AG) &lt;br /&gt;
&lt;br /&gt;
12:00 Available&lt;br /&gt;
&lt;br /&gt;
'''''13:00 lunch break'''''&lt;br /&gt;
&lt;br /&gt;
14:00 Continious Integration in ADempiere Project Tobias Schöneberg / [[metas]] &lt;br /&gt;
&lt;br /&gt;
15:00 Software Development Procedure in ADempiere Project Mark Ostermann / [[metas]] &lt;br /&gt;
&lt;br /&gt;
15:30 Community Council of ADempiere Project&lt;br /&gt;
&lt;br /&gt;
16:00 Results of Off Track Workshops (Mavenizing ADempiere)&lt;br /&gt;
&lt;br /&gt;
16:30 [http://www.adempiere.com/Sponsored_Development:_Libero_Smart_Browser Smart Browser]  [[User:vpj-cd|Victor Perez]] / [http://www.e-evolution.com e-Evolution] - 45 Min&lt;br /&gt;
&lt;br /&gt;
17:30 Closing&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
After organizing [[2nd European ADempiere Conference]] in 2009 which followed the [[European ADempiere Conference]] in 2007, [[ADeV|ADempiere e.V. (ADeV)]] invites the community to the next Conference which takes places 2011 in Berlin!&lt;br /&gt;
&lt;br /&gt;
* 03rd - 04th of September 2011 (Saturday - Sunday) &lt;br /&gt;
* University of Beuth in Berlin, Germany (http://www.beuth-hochschule.de/)&lt;br /&gt;
* Agenda&lt;br /&gt;
** Community Gathering&lt;br /&gt;
** Workshops / Knowledgetransfer&lt;br /&gt;
** 2nd of September: ADeV member meeting (private) ADeV is voting a new board&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Who should come?==&lt;br /&gt;
* Community =&amp;gt; Meet ADempierians!&lt;br /&gt;
* ADempiere User and Service Providers =&amp;gt; Learn about ADempiere and meet the Experts!&lt;br /&gt;
* ADempiere Newbies =&amp;gt; learn what ADempiere can do for you!&lt;br /&gt;
&lt;br /&gt;
==How to register?==&lt;br /&gt;
* send an email to [[File:Eventadempiere.de.png]] with your name, company and if you need a hotel room&lt;br /&gt;
* add your name to the [[#Participants|Participants-List]]&lt;br /&gt;
&lt;br /&gt;
=Call for Paper=&lt;br /&gt;
==Workshop: Call for paper==&lt;br /&gt;
#Testing with Sahi by [[User:MJMcKay|Michael McKay]] - 45 Min&lt;br /&gt;
#new [http://www.adempiere.com/Sponsored_Development:_Libero_Cost_Engine Costing Engine]  [[User:vpj-cd|Victor Perez]] / [http://www.e-evolution.com e-Evolution] - 45 Min&lt;br /&gt;
#new [http://www.adempiere.com/Sponsored_Development:_Libero_Warehouse_Management Wherehouse Management]  [[User:vpj-cd|Victor Perez]] / [http://www.e-evolution.com e-Evolution] - 45 Min&lt;br /&gt;
#new [http://www.adempiere.com/Sponsored_Development:_Libero_Smart_Browser Smart Browser]  [[User:vpj-cd|Victor Perez]] / [http://www.e-evolution.com e-Evolution] - 45 Min&lt;br /&gt;
#Integrate UPS Webservice for calculate shipment cost (Schaeffer AG) - 45 Min&lt;br /&gt;
#ADempiere in a Nutshell [[user:nwessel|Norbert Wessel]] / [[metas]] - 45 Min&lt;br /&gt;
#Continious Integration in ADempiere Project Tobias Schöneberg / [[metas]] - 45 Min&lt;br /&gt;
#Software Development Procedure in ADempiere Project Mark Ostermann / [[metas]] : 20 Min&lt;br /&gt;
#Using Fuse and Replication interface as Enterprise Service Bus for ADempiere Teo Sarca / [[metas]] - 20 Min&lt;br /&gt;
&lt;br /&gt;
===Present your Project: Call for paper===&lt;br /&gt;
If you have implemented an exciting project with adempiere you are invited to present it in a timeframe of 20 Minutes to show others how you solved the problems, either technical or functional.&lt;br /&gt;
&lt;br /&gt;
#Presentation ADempiere integration at Schaeffer AG&lt;br /&gt;
#Using ADempiere Webui and Business API to create feature rich web apps for remote users [[user:nwessel|Norbert Wessel]] / [[metas]] - 20 Min&lt;br /&gt;
#Integration at Ottawa Flying Club - small business example.  Automation of order/invoice creation and integration of legacy systems. [[User:MJMcKay|MJMcKay]] - 20 Min&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
* To make the results applicable to other we ask you to only present projects that are already implemented and went live&lt;br /&gt;
* You are free to choose if you want to name your customer&lt;br /&gt;
* You may either focus on technical or functional or on both aspects&lt;br /&gt;
&lt;br /&gt;
List your project:&lt;br /&gt;
* &amp;lt;your name&amp;gt;, &amp;lt;description of the project&amp;gt;, &amp;lt;problems you solved&amp;gt;, &amp;lt;presentation is technical, functional, or mixed&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Open Space: Call for ideas===&lt;br /&gt;
#Mavenizing ADempiere (Tobias Schöneberg)&lt;br /&gt;
#automated UI testing on ADempiere [[User:MetuX|Marco Koster]] (metuX GmbH)&lt;br /&gt;
#separating ADempiere setup/silentsetup into a pure build and a pure configuration part (metuX GmbH)&lt;br /&gt;
&lt;br /&gt;
=Participants=&lt;br /&gt;
* to register send an email to [[File:Eventadempiere.de.png]] with your name, company and if you need a hotel room&lt;br /&gt;
* add your name here (optional) &lt;br /&gt;
&lt;br /&gt;
Note: Even when you are already on the participants list you need to register here [[File:Eventadempiere.de.png]] so we know your email address to contact you.&lt;br /&gt;
&lt;br /&gt;
#[[User:Mark_o|Mark Ostermann]] ([[metas]])&lt;br /&gt;
#Kai Schaeffer (Schaeffer AG)&lt;br /&gt;
#[[User:Kthiemann|Karsten Thiemann]] (Schaeffer AG)&lt;br /&gt;
#Dirk Niemeyer&lt;br /&gt;
#[[User:nwessel|Norbert Wessel]] ([[metas]])&lt;br /&gt;
#[[User:Teo_sarca|Teo Sarca]] ([[metas]])&lt;br /&gt;
#[[User:tobi | Tobias Schöneberg]] ([[metas]])&lt;br /&gt;
#[[User:MJMcKay|Mike Mckay]]&lt;br /&gt;
#[[User:Kittiu|Kitti U.]] ([http://www.ecosoft.co.th ecosoft])&lt;br /&gt;
#[[User:Wipawiij|Wipawii J.]]([http://www.ecosoft.co.th ecosoft])&lt;br /&gt;
#[[User:Nantachai|Nantachai S.]]([http://www.ecosoft.co.th ecosoft])&lt;br /&gt;
#[[User:Dominik|Dominik Zajac]]&lt;br /&gt;
#[[User:Trifonnt|Trifon Trifonov]] (D3 Soft Ltd.)&lt;br /&gt;
#Detelina Malkodanska (D3 Soft Ltd.)&lt;br /&gt;
#[[User:redchris|Cristina Ghita]] ([[metas]])&lt;br /&gt;
#Mario Calderon (westfalia)&lt;br /&gt;
#Susanne Calderon (westfalia)&lt;br /&gt;
#[[User:MetuX|Marco Koster]] (metuX GmbH)&lt;br /&gt;
#[[User:Juddm|Michael Judd]] (Akuna)&lt;br /&gt;
#William Wolfe&lt;br /&gt;
#[[User:MetuX|Peter Sommer]] (metuX GmbH)&lt;br /&gt;
#[[User:MetuX|Philip Gossweiler]] (metuX GmbH)&lt;br /&gt;
#[[User:ren3d|René Quintero]]&lt;br /&gt;
#Werner Scharinger (catura ag)&lt;br /&gt;
#Eberhard Wind (catura ag)&lt;br /&gt;
#Vassilis Voreopoulos&lt;br /&gt;
# André Fracassi (Effa Motors / devCoffee)&lt;br /&gt;
# Bruno Luis Ferreira (Effa Motors / devCoffee)&lt;br /&gt;
# Eduardo Effa (Effa Motors / devCoffee)&lt;br /&gt;
#[[User:muriloht|Murilo Habermann Torquato]] (Effa Motors / devCoffee)&lt;br /&gt;
#[[User:Rvergara|Ramiro Vergara]] (OFB Consulting)&lt;br /&gt;
#[[User:db|Dietmar Berlinger]] (promandant)&lt;br /&gt;
# Sabine Sebastian (promandant)&lt;br /&gt;
# Kai Du&lt;br /&gt;
#Hilário Fochi ([http://www.kenos.com.br Kenos] / [http://www.soliton.com.br Soliton])&lt;br /&gt;
#[[User:ralexsander|Ricardo Alexsander Santana]] ([http://www.kenos.com.br Kenos] / [http://www.soliton.com.br Soliton])&lt;br /&gt;
#Marcelo Rufino ([http://www.kenos.com.br Kenos] / [http://www.soliton.com.br Soliton])&lt;br /&gt;
#[[User:vpj-cd|Victor Perez]] / [http://www.e-evolution.com e-Evolution]&lt;br /&gt;
#[[User:Mwagner|Maik Wagner]]&lt;br /&gt;
# Jan Rößler (Schaeffer AG)&lt;br /&gt;
#Edilson Duarte Neto (LCR)&lt;br /&gt;
# Sven Gaul (Schaeffer AG)&lt;br /&gt;
#[[User:akapp|Andreas Kapp]]([http://www.artooa.com Artooa])&lt;br /&gt;
# Arthur Mielimonka&lt;br /&gt;
#[[User:Genied|Angelo Dabalà]]&lt;br /&gt;
# Mario Missakian (Creyasoft)&lt;br /&gt;
&lt;br /&gt;
=Accomodation=&lt;br /&gt;
We have reserved an allocation of 25 beds in the hotel &amp;quot;Hotel4Youth&amp;quot; from Th 01.09.2011 - Mo 05.09.2011.&lt;br /&gt;
&lt;br /&gt;
'''SOLD OUT''': Please contact hotel directly for further beds!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Hotel4Youth Am Mauerpark ***''' [http://hotel4youth.com/hotel_02.html]&lt;br /&gt;
* Bernauer Str. 45/46 | 10435 Berlin | Berlin Mitte &lt;br /&gt;
* Pricing&lt;br /&gt;
** Price Singlebed = 58 EUR (including breakfast and VAT)&lt;br /&gt;
** Price Twinbed = 78 EUR (including breakfast and VAT)&lt;br /&gt;
&lt;br /&gt;
Please contact us via [[File:Eventadempiere.de.png]] if you want to book a room.&lt;br /&gt;
 &lt;br /&gt;
==Directions==&lt;br /&gt;
===How to get to the conference from the hotel===&lt;br /&gt;
[http://maps.google.de/maps?saddr=Luxemburger+Stra%C3%9Fe+10,+13353,+Berlin&amp;amp;daddr=Bernauer+Stra%C3%9Fe+45,+Berlin+10435+Berlin&amp;amp;hl=de&amp;amp;ie=UTF8&amp;amp;ll=52.549062,13.384094&amp;amp;spn=0.039875,0.113811&amp;amp;sll=52.524786,13.351479&amp;amp;sspn=0.159587,0.455246&amp;amp;geocode=Fd7FIQMdgL3LACk5VfvdflGoRzGyITNGFP89LA%3BFSqxIQMdVH_MACmbIAbE-VGoRzGqLYWJ1YNTYg&amp;amp;vpsrc=6&amp;amp;mra=pd&amp;amp;z=14 From Hotel (Bernauer Straße 45 - 46) to Conference (Luxemburger Straße 10)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Contact=&lt;br /&gt;
==Orga Team==&lt;br /&gt;
* [[user:nwessel|Norbert Wessel]], Email: [[File:Eventadempiere.de.png]] &lt;br /&gt;
* Fabian Renk&lt;br /&gt;
* Dominik Zajac (Video Conferencing)&lt;br /&gt;
* Kai Schaeffer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Conference]]&lt;br /&gt;
[[Category:ADempiere World Conference 2011]]&lt;/div&gt;</description>
			<pubDate>Mon, 29 Aug 2011 15:21:13 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:ADempiere_World_Conference_2011</comments>		</item>
		<item>
			<title>User:Trifonnt/Howtos Hints</title>
			<link>http://www.adempiere.com/User:Trifonnt/Howtos_Hints</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Practical Use of Document Type &amp;amp; Sequence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Adempiere Frequently Asked Question ===&lt;br /&gt;
&lt;br /&gt;
==== Practical Use of Document Type &amp;amp; Sequence ====&lt;br /&gt;
* What is the real purpose of Document Sequence?&lt;br /&gt;
&lt;br /&gt;
The purpose is to have different sequence (Document No) for each document type.&lt;br /&gt;
For example: Imagine you want to difference the PO depending on what you buy.&lt;br /&gt;
You could have the document type &amp;quot;Purchase Order-A&amp;quot; and the &amp;quot;Purchase Order-B&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Purchase Order-A&amp;quot; --&amp;gt; Sequence (Document no):A00001&lt;br /&gt;
&amp;quot;Purchase Order-B&amp;quot; --&amp;gt; Sequence (Document no):B00001&lt;br /&gt;
&lt;br /&gt;
So for the same transaction (Purchase order) you can difference distinct sequence numbers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Example of ADempiere Document Sequence ====&lt;br /&gt;
https://sourceforge.net/projects/adempiere/forums/forum/611163/topic/3906868&lt;br /&gt;
&lt;br /&gt;
* We want Document to have number such as PO/000001/07/2011, where:&lt;br /&gt;
PO = Is a constant, indicate that document is Purchase Order&lt;br /&gt;
000001 = Running number&lt;br /&gt;
07 = Month(July)&lt;br /&gt;
2011 = Year&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Settings:&lt;br /&gt;
Prefix = PO/&lt;br /&gt;
Decimal Pattern = 000000&lt;br /&gt;
Sufix = /@Created&amp;lt;MM&amp;gt;@/@Created&amp;lt;yyyy&amp;gt;@&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to create new user and restricted access rights? ====&lt;br /&gt;
Define Role for User&lt;br /&gt;
Create Role:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Click on the General Setup -&amp;gt; Security -&amp;gt; Role&lt;br /&gt;
Click on the New button(ex: MyRole).&lt;br /&gt;
Select the Organization from drop down.&lt;br /&gt;
Enter the Name for role.&lt;br /&gt;
Select the User Level from User Level drop down.&lt;br /&gt;
Tick on the Manual Checkbox.&lt;br /&gt;
Click on the Save button.&lt;br /&gt;
Click on the Grant Access button (eg:Access to All for Sale Module).&lt;br /&gt;
Select the Module from drop down that you have to include.&lt;br /&gt;
Select the Access To from drop down that you have to include.&lt;br /&gt;
Click on the OK button.&lt;br /&gt;
Click on the Save button.&lt;br /&gt;
&lt;br /&gt;
Click on the Org Access tab.&lt;br /&gt;
Select the Organization for newely defined role.&lt;br /&gt;
Click on the Save button.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create User:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Click on the General Setup -&amp;gt; Security -&amp;gt; User.&lt;br /&gt;
Select the Organization from organization drop down.&lt;br /&gt;
(Note: user organization and define role organization must be same.)&lt;br /&gt;
Enter the Name for user(ex: ABC). &lt;br /&gt;
Set the Password for user.&lt;br /&gt;
Click on the Save button.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assign Role to User:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-     Click on the User Roles tab. &lt;br /&gt;
Select Role from drop down(ex:MyRole).&lt;br /&gt;
Click on the Save button.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the User tab.&lt;br /&gt;
Select the Default Role from drop down(ex:MyRole).&lt;br /&gt;
Select Default Client from drop down.&lt;br /&gt;
Select the Default Organization from drop down.&lt;br /&gt;
Click on the Save button.&lt;br /&gt;
Login as ABC user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to modify Invoice(Customer) Posting? ====&lt;br /&gt;
&lt;br /&gt;
Using Ademepire &amp;quot;GL Distribution&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Default Adempiere Account posting:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
Account                     Debit               Credit&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
Account Receivable         55.000.000         &lt;br /&gt;
   A tax                                        5.000.000&lt;br /&gt;
   Service Revenue                             50.000.000&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Desired Adempiere Account posting:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
Account                     Debit               Credit&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
Account Receivable         52.750.000                           &lt;br /&gt;
An Account                  2.250.000 - which is 4.5%x50.000.000&lt;br /&gt;
   A tax                                        5.000.000        &lt;br /&gt;
   Service Revenue                             50.000.000&lt;br /&gt;
----------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Desired functionality can be achieved with Account splitting.&lt;br /&gt;
Rule must be defined in the system which will split posting into Account Receivable on two account entries.&lt;br /&gt;
&lt;br /&gt;
==== Show where products are located ====&lt;br /&gt;
Submitted By: Jan Kantert (jab_doa)&lt;br /&gt;
&lt;br /&gt;
Summary: Show where products are located&lt;br /&gt;
&lt;br /&gt;
sf.net tracker: [https://sourceforge.net/tracker/?func=detail&amp;amp;atid=879335&amp;amp;aid=1768749&amp;amp;group_id=176962 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial Comment:&lt;br /&gt;
Log in as System Administrator. Select &amp;quot;Application Dictionary&amp;quot; -&amp;gt; &amp;quot;Window, Tab &amp;amp; Field&amp;quot; -&amp;gt; Name = Product&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;Tab&amp;quot;. &lt;br /&gt;
Go to the end of the list and add a new row. Zoom in and set Table to &amp;quot;M_Storage_M_Storage&amp;quot;, Name to &amp;quot;Located at&amp;quot;, Description to &amp;quot;Where are my units located?&amp;quot;, Tab Level to &amp;quot;2&amp;quot; and check &amp;quot;read only&amp;quot;. &lt;br /&gt;
Now save and click on &amp;quot;Create Fields&amp;quot;. Thats it. Now you can see where your units are when zooming into a product.&lt;br /&gt;
&lt;br /&gt;
==== Security ====&lt;br /&gt;
Submitted By: Armen (armenrz)&lt;br /&gt;
&lt;br /&gt;
Summary: Security&lt;br /&gt;
&lt;br /&gt;
sf.net tracker: [https://sourceforge.net/forum/message.php?msg_id=4451508 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) ADempiere support role based security - Role window.&lt;br /&gt;
&lt;br /&gt;
2) Role Data Access. &lt;br /&gt;
&lt;br /&gt;
You can also play around with SQLWhere in Window, Tab &amp;amp; Field.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
(instr('@#User_Level@','C')&amp;lt;&amp;gt;0 OR C_BPartner.CreatedBy=@#AD_user_ID@ OR C_BPartner.SalesRep_ID=@#AD_User_ID@)&lt;br /&gt;
&lt;br /&gt;
For pricelist, there's one place you can't hide price from user, which is  Product Info. You need to modify some codes to do this. What I did is add IsCanViewPrice option in Role so now each role can be set either they can view price or not.&lt;br /&gt;
&lt;br /&gt;
==== Bank Transfer tips ====&lt;br /&gt;
Submitted By: usman88&lt;br /&gt;
&lt;br /&gt;
Summary: Bank Transfer tips&lt;br /&gt;
&lt;br /&gt;
sf.net tracker: [https://sourceforge.net/forum/message.php?msg_id=4467580 here]&lt;br /&gt;
&lt;br /&gt;
* [http://www.adempiere.com/wiki/index.php/Bank_to_Bank_Transfer_Transaction_tips Bank to Bank Transfer Transaction tips]&lt;br /&gt;
&lt;br /&gt;
Small tips to handle 1 source Bank to 1 recipient Bank transfer transaction. &lt;br /&gt;
&lt;br /&gt;
1. Create new cash journal.&lt;br /&gt;
&lt;br /&gt;
2. Select appropriate cash book ( in my case i use dummy cash book to serve this transaction)&lt;br /&gt;
&lt;br /&gt;
3. Next go to cash line and create a new line and select cash type as bank transfer.&lt;br /&gt;
&lt;br /&gt;
4. Then select source bank account and type in transfer amount&lt;br /&gt;
&lt;br /&gt;
5. Create 2nd line as in step 3. &lt;br /&gt;
&lt;br /&gt;
6. This time select recipient bank account and type in transfer amount but in negative sign.&lt;br /&gt;
&lt;br /&gt;
7. Back to cash journal tab, complete and post it.&lt;br /&gt;
&lt;br /&gt;
8. To finalize it create, complete and post Bank statement for each bank account.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PS. Above tips can be use for more complex scenario such as transfer from 2 bank to 1 recipient.&lt;br /&gt;
&lt;br /&gt;
==== Listing a BOM within a BOM ====&lt;br /&gt;
Submitted By: stingreye&lt;br /&gt;
&lt;br /&gt;
Summary: Listing a BOM within a BOM&lt;br /&gt;
&lt;br /&gt;
sf.net tracker: [https://sourceforge.net/forum/message.php?msg_id=4369782 here]&lt;br /&gt;
&lt;br /&gt;
Here is the view in Oracle... Because we have so many parts we ended up doing&lt;br /&gt;
a materialized view that we update with a process in Compiere everytime we&lt;br /&gt;
 change&lt;br /&gt;
a BOM.  We did that so we could report off of this view faster.&lt;br /&gt;
&lt;br /&gt;
I am sure someone out here could write a much better query than this but here&lt;br /&gt;
is what I did.  Basically, created a view on top of itself so that the parent&lt;br /&gt;
records would null.  Then used the connect by clause to generate the hierarchy.&lt;br /&gt;
You will also notice the use of connect_by_root = Top level of bill.&lt;br /&gt;
Connect_by_ISLEAF = bottom level of bill.  Level = what level of the hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE VIEW BOM_INDENTED&lt;br /&gt;
(TOPLEVELID, TOPLEVEL, TOPLEVEL_DESC, PRODUCTNUM, PRODDEC, &lt;br /&gt;
 M_PRODUCTBOM_ID, BOM_LEVEL, BOMQTY, DESCRIPTION, AD_CLIENT_ID, &lt;br /&gt;
 AD_ORG_ID, ROWNUMBER, BOM_LEVEL_NUM, BOTTOMCOMPONENT)&lt;br /&gt;
AS &lt;br /&gt;
&lt;br /&gt;
SELECT   CONNECT_BY_ROOT M_ProductBom_ID AS TOPLEVELID,CONNECT_BY_ROOT Value&lt;br /&gt;
AS TOPLEVEL,CONNECT_BY_ROOT b.DESCRIPTION AS TOPLEVEL_DESC, Value AS&lt;br /&gt;
 ProductNum,&lt;br /&gt;
b.DESCRIPTION AS ProdDesc, M_PRODUCTBOM_ID,LPAD(' ',2*(LEVEL-1)) ||&lt;br /&gt;
 TO_CHAR(LEVEL)&lt;br /&gt;
BOM_Level, BOMQTY, a.DESCRIPTION,a.AD_CLIENT_ID, a.AD_ORG_ID, ROWNUM, LEVEL,&lt;br /&gt;
Connect_By_ISLEAF&lt;br /&gt;
  FROM &lt;br /&gt;
  &lt;br /&gt;
-- part 2 subquerry combining top level and bom to create null to start from&lt;br /&gt;
( SELECT&lt;br /&gt;
 &amp;quot;M_PRODUCT_BOM_ID&amp;quot;,&amp;quot;AD_CLIENT_ID&amp;quot;,&amp;quot;AD_ORG_ID&amp;quot;,&amp;quot;ISACTIVE&amp;quot;,--&amp;quot;CREATED&amp;quot;,&amp;quot;C&lt;br /&gt;
REATEDBY&amp;quot;,&amp;quot;UPDATED&amp;quot;,&amp;quot;UPDATEDBY&amp;quot;,  (remove becuase unnnecessarry)&lt;br /&gt;
&amp;quot;LINE&amp;quot;,&amp;quot;M_PRODUCT_ID&amp;quot;,&amp;quot;M_PRODUCTBOM_ID&amp;quot;,&amp;quot;BOMQTY&amp;quot;,&amp;quot;DESCRIPTION&amp;quot;,&amp;quot;BOMTYPE&amp;quot;&lt;br /&gt;
FROM M_PRODUCT_BOM&lt;br /&gt;
&lt;br /&gt;
UNION&lt;br /&gt;
-- part 1 the tope level querry creating the nulls that is combined in part 2&lt;br /&gt;
SELECT M_PRODUCT_BOM_1.M_PRODUCT_BOM_ID, M_PRODUCT_BOM.AD_CLIENT_ID,&lt;br /&gt;
M_PRODUCT_BOM.AD_ORG_ID, M_PRODUCT_BOM_1.ISACTIVE,-- M_PRODUCT_BOM_1.CREATED,&lt;br /&gt;
M_PRODUCT_BOM_1.CREATEDBY, M_PRODUCT_BOM_1.UPDATED, M_PRODUCT_BOM_1.UPDATEDBY,&lt;br /&gt;
(removed unnecessary)&lt;br /&gt;
 M_PRODUCT_BOM_1.LINE,M_PRODUCT_BOM_1.M_PRODUCTBOM_ID AS M_PRODUCT_ID,&lt;br /&gt;
M_PRODUCT_BOM.M_PRODUCT_ID AS M_PRODUCTBOM_ID,  M_PRODUCT_BOM_1.BOMQTY,&lt;br /&gt;
M_PRODUCT_BOM_1.DESCRIPTION, M_PRODUCT_BOM_1.BOMTYPE&lt;br /&gt;
FROM M_PRODUCT_BOM LEFT JOIN M_PRODUCT_BOM  M_PRODUCT_BOM_1 ON&lt;br /&gt;
M_PRODUCT_BOM.M_PRODUCT_ID = M_PRODUCT_BOM_1.M_PRODUCTBOM_ID&lt;br /&gt;
GROUP BY M_PRODUCT_BOM_1.M_PRODUCT_BOM_ID, M_PRODUCT_BOM.AD_CLIENT_ID,&lt;br /&gt;
M_PRODUCT_BOM.AD_ORG_ID, M_PRODUCT_BOM_1.ISACTIVE, M_PRODUCT_BOM_1.CREATED,&lt;br /&gt;
M_PRODUCT_BOM_1.CREATEDBY, M_PRODUCT_BOM_1.UPDATED, M_PRODUCT_BOM_1.UPDATEDBY,&lt;br /&gt;
M_PRODUCT_BOM_1.LINE, M_PRODUCT_BOM.M_PRODUCT_ID,&lt;br /&gt;
 M_PRODUCT_BOM_1.M_PRODUCTBOM_ID,&lt;br /&gt;
M_PRODUCT_BOM_1.BOMQTY, M_PRODUCT_BOM_1.DESCRIPTION, M_PRODUCT_BOM_1.BOMTYPE&lt;br /&gt;
HAVING (((M_PRODUCT_BOM_1.M_PRODUCTBOM_ID) IS NULL))) a&lt;br /&gt;
-- part 3 continued&lt;br /&gt;
   INNER JOIN M_PRODUCT b&lt;br /&gt;
   ON a.M_PRODUCTBOM_ID = b.M_PRODUCT_ID&lt;br /&gt;
  START WITH a.M_PRODUCT_ID IS NULL&lt;br /&gt;
  CONNECT BY PRIOR  M_PRODUCTBOM_ID = a.M_PRODUCT_ID&lt;br /&gt;
  ORDER SIBLINGS BY b.Value&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use materialized views... we did it the following way (I really&lt;br /&gt;
know very little about them, so if someone has a better idea of how to use them&lt;br /&gt;
for this, it would be appreciated)&lt;br /&gt;
The materialized view would be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE MATERIALIZED VIEW BOM_INDENTED_MV&lt;br /&gt;
(PTX_Path,TOPLEVELID, TOPLEVEL, TOPLEVEL_DESC, PRODUCTNUM, PRODDEC, &lt;br /&gt;
 M_PRODUCTBOM_ID, BOM_LEVEL, BOMQTY, DESCRIPTION, AD_CLIENT_ID, &lt;br /&gt;
 AD_ORG_ID, BOM_LEVEL_NUM, BOTTOMCOMPONENT,TOPLEVEL_ISACTIVE, COMP_ISACTIVE,&lt;br /&gt;
TOP_Client)&lt;br /&gt;
 &lt;br /&gt;
 Build IMMEDIATE&lt;br /&gt;
 REFRESH ON DEMAND &lt;br /&gt;
 DISABLE QUERY REWRITE&lt;br /&gt;
 &lt;br /&gt;
AS &lt;br /&gt;
SELECT Path, TOPLEVELID,TOPLEVEL,TOPLEVEL_DESC, ProductNum, ProdDesc,&lt;br /&gt;
M_PRODUCTBOM_ID, BOM_Level, BOMQTY, f1.DESCRIPTION,mp2.AD_CLIENT_ID,&lt;br /&gt;
 mp2.AD_ORG_ID,&lt;br /&gt;
BomLevelNum, BottomComponent, MP.ISACTIVE AS TOPLEV_ISACTIVE, MP2.ISACTIVE AS&lt;br /&gt;
COMP_ISACTIVE, mp.AD_CLIENT_ID AS TOPLEVEL_Client&lt;br /&gt;
  FROM (&lt;br /&gt;
SELECT DISTINCT SYS_CONNECT_BY_PATH (M_PRODUCTBOM_ID,'/') AS Path,&lt;br /&gt;
 CONNECT_BY_ROOT&lt;br /&gt;
M_ProductBom_ID AS TOPLEVELID,CONNECT_BY_ROOT Value AS TOPLEVEL,CONNECT_BY_ROOT&lt;br /&gt;
b.DESCRIPTION AS TOPLEVEL_DESC, Value AS ProductNum, b.DESCRIPTION AS ProdDesc,&lt;br /&gt;
M_PRODUCTBOM_ID,LPAD(' ',2*(LEVEL-1)) || TO_CHAR(LEVEL) BOM_Level, BOMQTY,&lt;br /&gt;
a.DESCRIPTION,a.AD_CLIENT_ID, a.AD_ORG_ID, LEVEL AS BomLevelNum,&lt;br /&gt;
 Connect_By_ISLEAF&lt;br /&gt;
AS BottomComponent&lt;br /&gt;
  FROM &lt;br /&gt;
  &lt;br /&gt;
-- part 2 subquerry combining top level and bom to create null to start from&lt;br /&gt;
( SELECT&lt;br /&gt;
 &amp;quot;M_PRODUCT_BOM_ID&amp;quot;,&amp;quot;AD_CLIENT_ID&amp;quot;,&amp;quot;AD_ORG_ID&amp;quot;,&amp;quot;ISACTIVE&amp;quot;,--&amp;quot;CREATED&amp;quot;,&amp;quot;C&lt;br /&gt;
REATEDBY&amp;quot;,&amp;quot;UPDATED&amp;quot;,&amp;quot;UPDATEDBY&amp;quot;,  (remove becuase unnnecessarry)&lt;br /&gt;
&amp;quot;LINE&amp;quot;,&amp;quot;M_PRODUCT_ID&amp;quot;,&amp;quot;M_PRODUCTBOM_ID&amp;quot;,&amp;quot;BOMQTY&amp;quot;,&amp;quot;DESCRIPTION&amp;quot;,&amp;quot;BOMTYPE&amp;quot;&lt;br /&gt;
FROM M_PRODUCT_BOM&lt;br /&gt;
&lt;br /&gt;
UNION&lt;br /&gt;
-- part 1 the tope level querry creating the nulls that is combined in part 2&lt;br /&gt;
SELECT M_PRODUCT_BOM_1.M_PRODUCT_BOM_ID, M_PRODUCT_BOM.AD_CLIENT_ID,&lt;br /&gt;
M_PRODUCT_BOM.AD_ORG_ID, M_PRODUCT_BOM_1.ISACTIVE,-- M_PRODUCT_BOM_1.CREATED,&lt;br /&gt;
M_PRODUCT_BOM_1.CREATEDBY, M_PRODUCT_BOM_1.UPDATED, M_PRODUCT_BOM_1.UPDATEDBY,&lt;br /&gt;
(removed unnecessary)&lt;br /&gt;
 M_PRODUCT_BOM_1.LINE,M_PRODUCT_BOM_1.M_PRODUCTBOM_ID AS M_PRODUCT_ID,&lt;br /&gt;
M_PRODUCT_BOM.M_PRODUCT_ID AS M_PRODUCTBOM_ID,  M_PRODUCT_BOM_1.BOMQTY,&lt;br /&gt;
M_PRODUCT_BOM_1.DESCRIPTION, M_PRODUCT_BOM_1.BOMTYPE&lt;br /&gt;
FROM M_PRODUCT_BOM LEFT JOIN M_PRODUCT_BOM  M_PRODUCT_BOM_1 ON&lt;br /&gt;
M_PRODUCT_BOM.M_PRODUCT_ID = M_PRODUCT_BOM_1.M_PRODUCTBOM_ID&lt;br /&gt;
GROUP BY M_PRODUCT_BOM_1.M_PRODUCT_BOM_ID, M_PRODUCT_BOM.AD_CLIENT_ID,&lt;br /&gt;
M_PRODUCT_BOM.AD_ORG_ID, M_PRODUCT_BOM_1.ISACTIVE, M_PRODUCT_BOM_1.CREATED,&lt;br /&gt;
M_PRODUCT_BOM_1.CREATEDBY, M_PRODUCT_BOM_1.UPDATED, M_PRODUCT_BOM_1.UPDATEDBY,&lt;br /&gt;
M_PRODUCT_BOM_1.LINE, M_PRODUCT_BOM.M_PRODUCT_ID,&lt;br /&gt;
 M_PRODUCT_BOM_1.M_PRODUCTBOM_ID,&lt;br /&gt;
M_PRODUCT_BOM_1.BOMQTY, M_PRODUCT_BOM_1.DESCRIPTION, M_PRODUCT_BOM_1.BOMTYPE&lt;br /&gt;
HAVING (((M_PRODUCT_BOM_1.M_PRODUCTBOM_ID) IS NULL))) a&lt;br /&gt;
-- part 3 continued&lt;br /&gt;
   INNER JOIN M_PRODUCT b&lt;br /&gt;
   ON a.M_PRODUCTBOM_ID = b.M_PRODUCT_ID&lt;br /&gt;
  START WITH a.M_PRODUCT_ID IS NULL&lt;br /&gt;
  CONNECT BY PRIOR  M_PRODUCTBOM_ID = a.M_PRODUCT_ID&lt;br /&gt;
  ORDER SIBLINGS BY b.Value&lt;br /&gt;
) f1&lt;br /&gt;
INNER JOIN M_PRODUCT mp ON TOPLEVELID=mp.M_PRODUCT_ID&lt;br /&gt;
INNER JOIN M_PRODUCT mp2 ON M_PRODUCTBOM_ID = mp2.M_PRODUCT_ID&lt;br /&gt;
ORDER BY Path&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to refresh the materialize view we used the following database procedure&lt;br /&gt;
where we used a parameter in the &amp;quot;report process&amp;quot; window to identify which MV&lt;br /&gt;
to refresh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE PROCEDURE Indented_Bom_Mv_Refresh&lt;br /&gt;
(&lt;br /&gt;
	PInstance_ID    		IN NUMBER	&lt;br /&gt;
)&lt;br /&gt;
AS&lt;br /&gt;
--	Logistice&lt;br /&gt;
	ResultStr						VARCHAR2(2000);&lt;br /&gt;
	Message							VARCHAR2(2000);&lt;br /&gt;
	Record_ID						NUMBER;&lt;br /&gt;
	--	Parameter&lt;br /&gt;
	CURSOR Cur_Parameter (PInstance NUMBER) IS&lt;br /&gt;
		SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date&lt;br /&gt;
		FROM AD_PINSTANCE i, AD_PINSTANCE_PARA p&lt;br /&gt;
		WHERE i.AD_PInstance_ID=PInstance&lt;br /&gt;
		AND i.AD_PInstance_ID=p.AD_PInstance_ID(+)&lt;br /&gt;
		ORDER BY p.SeqNo;&lt;br /&gt;
	--	Parameter Variables&lt;br /&gt;
	p_MVIEW						VARCHAR2(2000);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
	DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || PInstance_ID);&lt;br /&gt;
    ResultStr := 'PInstanceNotFound';&lt;br /&gt;
    UPDATE AD_PINSTANCE&lt;br /&gt;
    SET Created = SYSDATE,&lt;br /&gt;
        IsProcessing = 'Y'&lt;br /&gt;
    WHERE AD_PInstance_ID=PInstance_ID;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
--	Get Parameters&lt;br /&gt;
	ResultStr := 'ReadingParameters';&lt;br /&gt;
	FOR p IN Cur_Parameter (PInstance_ID) LOOP&lt;br /&gt;
		Record_ID := p.Record_ID;&lt;br /&gt;
		IF (p.ParameterName = 'MVIEW') THEN&lt;br /&gt;
 			P_PTX_MVIEW := p.P_String;&lt;br /&gt;
			DBMS_OUTPUT.PUT_LINE('  MVIEW=' || p_MVIEW);&lt;br /&gt;
		ELSE&lt;br /&gt;
			DBMS_OUTPUT.PUT_LINE('*** Unknown Parameter=' || p.ParameterName);&lt;br /&gt;
	 	END IF;&lt;br /&gt;
	END LOOP;	--	Get Parameter&lt;br /&gt;
	DBMS_OUTPUT.PUT_LINE('  Record_ID=' || Record_ID);&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
DBMS_MVIEW.REFRESH (p_PTX_MVIEW, 'c');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;FINISH_PROCESS&amp;gt;&amp;gt;&lt;br /&gt;
	--  Update AD_PInstance&lt;br /&gt;
	DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished ' || Message);&lt;br /&gt;
    UPDATE  AD_PINSTANCE&lt;br /&gt;
    SET Updated = SYSDATE,&lt;br /&gt;
        IsProcessing = 'N',&lt;br /&gt;
        Result = 1,                 -- success&lt;br /&gt;
        ErrorMsg = Message&lt;br /&gt;
    WHERE   AD_PInstance_ID=PInstance_ID;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
    RETURN;&lt;br /&gt;
&lt;br /&gt;
EXCEPTION&lt;br /&gt;
    WHEN  OTHERS THEN&lt;br /&gt;
		ResultStr := ResultStr || ': ' || SQLERRM || ' - ' || Message;&lt;br /&gt;
		DBMS_OUTPUT.PUT_LINE(ResultStr);&lt;br /&gt;
        UPDATE  AD_PINSTANCE&lt;br /&gt;
        SET Updated = SYSDATE,&lt;br /&gt;
            IsProcessing = 'N',&lt;br /&gt;
            Result = 0,             -- failure&lt;br /&gt;
            ErrorMsg = ResultStr&lt;br /&gt;
        WHERE   AD_PInstance_ID=PInstance_ID;&lt;br /&gt;
        COMMIT;&lt;br /&gt;
        RETURN;&lt;br /&gt;
END ;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== User authentication in Adempiere using LDAP ====&lt;br /&gt;
Submitted By: gemmiti&lt;br /&gt;
&lt;br /&gt;
Summary: User authentication in Adempiere using LDAP&lt;br /&gt;
&lt;br /&gt;
sf.net tracker: [https://sourceforge.net/forum/message.php?msg_id=3959888 here]&lt;br /&gt;
&lt;br /&gt;
Enabling LDAP Functionality:&lt;br /&gt;
&lt;br /&gt;
1.  Log in as SysAdmin&lt;br /&gt;
&lt;br /&gt;
2.  Go to Menu &amp;gt; System Admin &amp;gt; System&lt;br /&gt;
&lt;br /&gt;
3.  In Field &amp;quot;Ldap URL&amp;quot; fill in your LDAP URL, i.e. &amp;quot;LDAP://YourLdapServer.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4.  In field &amp;quot;LDAP Domain&amp;quot; Your Domain, i.e., &amp;quot;YourLdapServer.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
5.  Log Out as SysAdmin&lt;br /&gt;
&lt;br /&gt;
6.  Log In as SuperUser/Admin&lt;br /&gt;
&lt;br /&gt;
7.  GoTo Menu &amp;gt; General Rules &amp;gt; Security&amp;gt;User&lt;br /&gt;
&lt;br /&gt;
8.  In tab &amp;quot;User Contact&amp;quot; and &amp;quot;Internal&amp;quot; you will find a field for LDAP User&lt;br /&gt;
Name -- Here (for a particular user) fill in the LDAP use name.&lt;br /&gt;
&lt;br /&gt;
Upon logging in -- the user can enter his/her LDAP user name and password and&lt;br /&gt;
it will associate the correct credentials to the user you have set up in&lt;br /&gt;
Compiere.&lt;br /&gt;
&lt;br /&gt;
==== Add OnHandQty In Product window ====&lt;br /&gt;
Submitted By: stingreye&lt;br /&gt;
&lt;br /&gt;
Summary: Add OnHandQty In Product window&lt;br /&gt;
&lt;br /&gt;
sf.net tracker: [https://sourceforge.net/forum/message.php?msg_id=3984175 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
First the SQL &lt;br /&gt;
1)	You want On Hand Qty -  Product can be stored in multiple locators in M_Storage table. I assume you want total of all locators&lt;br /&gt;
2)	So SQL = SELECT SUM (QTYONHAND) FROM M_STORAGE s&lt;br /&gt;
3)	Now you want to sync with product table,  so  we add WHERE s.M_PRODUCT_ID = M_PRODUCT.M_PRODUCT_ID&lt;br /&gt;
4)	So the final SQL we need is (SELECT SUM(QTYONHAND) FROM M_STORAGE s WHERE s.M_PRODUCT_ID = M_PRODUCT.M_PRODUCT_ID)&lt;br /&gt;
&lt;br /&gt;
Now lets add it to compiere:&lt;br /&gt;
1)	Log in as SuperUser or System&lt;br /&gt;
2)	Role = System Administrator&lt;br /&gt;
3)	Open Table window&lt;br /&gt;
4)	Select Column tab&lt;br /&gt;
5)	Create new record&lt;br /&gt;
6)	Insert a  name for DB Column Name &lt;br /&gt;
7)	Choose a system element in this case most likely Qty_OnHand&lt;br /&gt;
8)	Reference = String&lt;br /&gt;
9)	Length = 20 should be plenty&lt;br /&gt;
10)	Click Save&lt;br /&gt;
11)	Click synchronize column, cross fingers&lt;br /&gt;
12)	Look on bottom left of window for alter table M_PRODUCTADD name of the field you just made&lt;br /&gt;
&lt;br /&gt;
Lets add it to the M_Product window.&lt;br /&gt;
&lt;br /&gt;
1)	Go to Window Tab Field&lt;br /&gt;
2)	Choose Product Table&lt;br /&gt;
3)	Goto Tab &lt;br /&gt;
4)	Choose the â€œtabâ€ we want which is Product (it is for the M_PRODUCT table)&lt;br /&gt;
5)	Choose Field Tab&lt;br /&gt;
6)	New Record&lt;br /&gt;
7)	Name your Field (Qty on Hand)&lt;br /&gt;
8)	Column â€“ Choose the new column you created.&lt;br /&gt;
9)	Save&lt;br /&gt;
&lt;br /&gt;
Now open the Product window and it should work!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to setup Workflow for PO Approval? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4197824 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Workflow Simple approval ====&lt;br /&gt;
* [http://www.adempiere.com/wiki/index.php/How_to_Activate_Document_Approval_Workflow Workflow Simple approval]&lt;br /&gt;
&lt;br /&gt;
==== Workflow Dynamic approval ====&lt;br /&gt;
* [http://www.adempiere.com/wiki/index.php/How_to_Configure_Dynamic_Approval_Workflow Workflow Dynamic Approval]&lt;br /&gt;
&lt;br /&gt;
==== Changelog functionality ====&lt;br /&gt;
changelog functionality consists of two parts: who &amp;amp; what.&lt;br /&gt;
&lt;br /&gt;
* Via tables user can identify &amp;quot;what&amp;quot; wish to log.&lt;br /&gt;
* Via roles &amp;quot;who&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
By this way is possible to finely control the auditing.&lt;br /&gt;
This means more tables to be flagged if user wish to log all tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Securing JBoss JMX Console and Web Console ====&lt;br /&gt;
* [http://wiki.jboss.org/wiki/SecureTheJmxConsole Securing the JMX Console and Web Console]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SECURE SCENARIO to use Adempiere ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4506970 sf.net post] by Carlos&lt;br /&gt;
&lt;br /&gt;
Possible SECURE SCENARIO to use Adempiere (applicable Compiere installations also)&lt;br /&gt;
&lt;br /&gt;
CLIENTS&lt;br /&gt;
* 1 - Don't install clients&lt;br /&gt;
&lt;br /&gt;
* 2 - Install two servers - one for NX (call it NXServer), and the other for oracle and JBoss (call it ADServer)&lt;br /&gt;
&lt;br /&gt;
* 3 - Allow clients just run through NX connection (you'll have total control of the ADempiere.properties in a linux box)&lt;br /&gt;
&lt;br /&gt;
* 4 - Configure the ADServer to only accept connections from NXServer&lt;br /&gt;
&lt;br /&gt;
* 5 - Configure the Oracle in ADServer to only accept connections from the same ADServer and from NXServer&lt;br /&gt;
&lt;br /&gt;
SERVICES ON WEB&lt;br /&gt;
* 1 - Don't expose web services from jboss directly&lt;br /&gt;
&lt;br /&gt;
* 2 - Install an apache server to expose in a controlled way just the needed services and pages from jboss adempiere&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this scenario NX can be replaced with any terminal server software  (Microsoft TS, Citrix, Sun Global Secure Desktop, etc).&lt;br /&gt;
And you must incur in costs of terminal server software licensing - but  security is not free.&lt;br /&gt;
And you must ensure all those servers - ensure NX, ensure oracle, ensure jboss, ensure apache, ensure linux, etc.&lt;br /&gt;
&lt;br /&gt;
==== Product Attribute Instance - Color/Size/Serial number ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4547817 Color/Size in Product Attribute per Instance] Very good explanation from Colin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Material transaction between two organizations ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4548319 sf.net post] another good description from Colin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Maintain multiple environments(Postgre multiple schema managing) ====&lt;br /&gt;
* [http://www.adempiere.com/wiki/index.php/Mantain_multiple_environments wiki page]Good description from Fernando&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL Materialized Views ====&lt;br /&gt;
* [http://jonathangardner.net/tech/w/PostgreSQL/Materialized_Views PostgreSQL Materialized Views]&lt;br /&gt;
&lt;br /&gt;
==== Report sales figures by product ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4602421 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. Create a Report Line Set called All Products.&lt;br /&gt;
2. Create a Report Line under it called Product with a Line Type of Segment Value (leave Posting and Amount Types blank)&lt;br /&gt;
3. Create a Report Source under it with Type=Product and leave the Product field blank&lt;br /&gt;
4. Create a Report Column Set called Current Period and YTD&lt;br /&gt;
5. Create 2 report columns under it, one for Current Period and YTD. The first one should have Posting Type=Actual, Amount Type=Period Balance, Column Type=Relative Period, Relative Period=0. The second one should be the same except Amount Type=Year Balance.&lt;br /&gt;
6. Then create a Financial report using these Report Line and Columns Sets. Make sure to check List Sources when you run to see all the products. Warning, If there are more than 1000 products it won't work (we're obviously aware of this limitation and working on removing it).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can easily produce a similar report for Sales by Business Partner by just substituting Type=Business Parter in Step 3.&lt;br /&gt;
&lt;br /&gt;
==== How to monitor Oracle sessions? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4623204 sf.net post]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT SID, SERIAL#, STATUS, SERVER&lt;br /&gt;
  FROM V$SESSION&lt;br /&gt;
  WHERE USERNAME = 'ADEMPIERE';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to get Oracle Character set? ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 SELECT * FROM nls_database_parameters&lt;br /&gt;
 WHERE parameter = any('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to change document numbers? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4669455 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Go to Performance &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Analysis -&amp;gt; Accounting Rules -&amp;gt; Document Type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here you can see all existing document types like Purchase Order etc. If the 'Document is Number Controlled' checkbox is checked then you will have a Document Sequence field (a drop down). Right click and zoom to the Document Sequence window &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Performance Analysis -&amp;gt; Accounting Rules -&amp;gt; Document Sequence&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here you can change the current next value, the increment and you can add prefix and or suffix for your order/invoice numbers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Where to place JasperReport files? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4726526 sf.net post]&lt;br /&gt;
&lt;br /&gt;
JasperReport can be defined as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://&lt;br /&gt;
https://&lt;br /&gt;
attachment:&lt;br /&gt;
file:/ &lt;br /&gt;
or a direct file_directory path &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An easier way to deploy jasper reports could be putting the .jasper in the customization.jar&lt;br /&gt;
&lt;br /&gt;
For that we could add a new prefix like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
resource:org/adempiere/jasper/MyReport.jasper&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to handle imprests? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4725517 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to process credit card payments from Java GUI? ====&lt;br /&gt;
&lt;br /&gt;
How a user could create a payment in the client (not the webstore) that will get passed to the payment processor?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Window 'Invoice (Customer)'.&lt;br /&gt;
&lt;br /&gt;
 Complete 'Invoice (Customer)'.&lt;br /&gt;
&lt;br /&gt;
 Set Payment Type - Press Button which by default has value 'On Credit'.&lt;br /&gt;
&lt;br /&gt;
 A new window open and user can change payment Type from 'On Credit' to 'Credit Card'.&lt;br /&gt;
&lt;br /&gt;
 Enter Credit Card data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to add comment on printed Invoice? ====&lt;br /&gt;
A line without product, charge and qty = 0 will be printed as a comment on invoice.&lt;br /&gt;
&lt;br /&gt;
==== BOM price explained. ====&lt;br /&gt;
 https://sourceforge.net/forum/message.php?msg_id=4740301&lt;br /&gt;
&lt;br /&gt;
 BOM Product price is depend of the price of the products which built it. &lt;br /&gt;
For example Product A consist of 1 product B and 1 product C. Product B and C are being priced at USD 5 and USD 6 respectively. The price of Product A would be USD 11. You cannot change it. &lt;br /&gt;
 &lt;br /&gt;
Meanwhile we often find a case where the price of Product A IS NOT the price of product B or C combined. It can be higher or lower. I try to add price to product A, which not the combined price but it doesn't work. This is what happen. &lt;br /&gt;
 &lt;br /&gt;
I put price of USD 15 for product A. When I created Sales Order, and I chose product A the price was still USD 15. Everything felt right. And then the disaster came. When I click Complete button suddenly the price change to USD 11! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 If the BOM is not stocked it is considered a 'basket; and will compute the price based on the component prices.&lt;br /&gt;
&lt;br /&gt;
 If you want to assign a price change it to 'stocked'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to enable Multilingual documents? ====&lt;br /&gt;
&lt;br /&gt;
 Client Window -&amp;gt; Multilingual Documents&lt;br /&gt;
&lt;br /&gt;
 Language Window &lt;br /&gt;
 Language Maintenance -&amp;gt; Add missing translations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How Cost centers are implemented in Adempiere? ====&lt;br /&gt;
[https://sourceforge.net/forum/message.php?msg_id=4752097 sf.net post]&lt;br /&gt;
Adempiere support cost center using organization setup( have a look at the organization and organization type setup).&lt;br /&gt;
Also, the transact organization element could be turned on in accounting schema to handle this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to setup Extended Document Number Formatting? ====&lt;br /&gt;
[[Enhance Document No Formatting]]&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4752602 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@AD_Org_ID&amp;lt;Value&amp;gt;@ is replace by 'HQ' ( AD_Org.Value )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Value&amp;gt; can be replaced by any other column from AD_Org table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to list General Ledger Transactions? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4759818 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to setup Manufacturing process ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5141864 sf.net post]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01. Define a Resource as Plant&lt;br /&gt;
02. Create your resource Type this will determinate the capacity for your resource&lt;br /&gt;
03. Create your resource (Production Line , Work Center , Work Station)&lt;br /&gt;
03. Create a Manufacturing workflow (routing) where you define the process to&lt;br /&gt;
manufacturing your product, so you need define each step the process and assign&lt;br /&gt;
the resource where will execute the work.&lt;br /&gt;
04. Create the BOM to manufacturing your product, you need define if will use&lt;br /&gt;
BOM or Formulas.&lt;br /&gt;
05. Create Manufacturing Document .&lt;br /&gt;
06. Use the BOM and workflow to create a new Manufacturing order&lt;br /&gt;
07. Change the Document status from draft to in process&lt;br /&gt;
08. Use Component check&lt;br /&gt;
09. if your component are available then use Print &amp;amp; Release Order&lt;br /&gt;
10. use Order Receipt &amp;amp; issue to report the component and finish good.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to Merge Business Partner entities? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4809251 sf.net post]&lt;br /&gt;
&lt;br /&gt;
If you merge Business Partners you may need to run:&lt;br /&gt;
Partner Relations -&amp;gt; Business Partner Rules -&amp;gt; Validate Business Partner&lt;br /&gt;
 to get the correct open amounts, Life time value, etc...&lt;br /&gt;
&lt;br /&gt;
If you merge Products, first move any inventory out of the product you will be deleting as that is not done in the merge process.&lt;br /&gt;
&lt;br /&gt;
Costing records are not merged!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to display Key and Name? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5167080 af.net post]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to Delete Client/Tenant ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4906319 Client Removal Tool]&lt;br /&gt;
&lt;br /&gt;
Both scripts are in svn:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://adempiere.svn.sourceforge.net/viewvc/adempiere/contributions/stuff/&lt;br /&gt;
&lt;br /&gt;
DeleteAdempiereClient.SQL (for oracle)&lt;br /&gt;
DeleteAdempiereClient_pg.SQL  (for postgresql)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init.d for centOS ====&lt;br /&gt;
* [https://sourceforge.net/tracker/?func=detail&amp;amp;atid=883808&amp;amp;aid=2182743&amp;amp;group_id=176962 sf.net contribution]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sql which set QtyInvoice = QtyOrdered for given Organization. ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update c_orderline ol set ol.QTYINVOICED=ol.QTYORDERED where C_ORDER_ID in (SELECT C_ORDER_ID FROM C_Order o &lt;br /&gt;
				WHERE DocStatus IN('CO','CL') AND IsSOTrx='Y'&lt;br /&gt;
				AND AD_Org_ID=1000001&lt;br /&gt;
			 AND EXISTS (SELECT * FROM C_OrderLine ol &lt;br /&gt;
					WHERE o.C_Order_ID=ol.C_Order_ID AND ol.QtyOrdered&amp;lt;&amp;gt;ol.QtyInvoiced) &lt;br /&gt;
				);&lt;br /&gt;
        commit;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to translate root menu in Ademepire Swing GUI? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5614246 sf.net]&lt;br /&gt;
&lt;br /&gt;
change class: org.compiere.grid.tree.VTreePanel.java&lt;br /&gt;
&lt;br /&gt;
change method: public boolean initTree (int AD_Tree_ID)&lt;br /&gt;
&lt;br /&gt;
add lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
m_root = vTree.getRoot();&lt;br /&gt;
m_root.setName(Msg.getMsg(Env.getCtx(), vTree.getName() ) ); // translate name of menu.&lt;br /&gt;
// m_root.setName(Msg.getMsg(Env.getCtx(), &amp;quot;Menu&amp;quot;) ); // @Trifon; this is the hardcoded way.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to translate root menu in Ademepire Zk Web UI? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5684488 sf.net]&lt;br /&gt;
&lt;br /&gt;
change class: webui.desktop.java&lt;br /&gt;
&lt;br /&gt;
change method: doCreatePart()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
West w = new West();&lt;br /&gt;
layout.appendChild(w);&lt;br /&gt;
w.setWidth(&amp;quot;300px&amp;quot;);&lt;br /&gt;
w.setCollapsible(true);&lt;br /&gt;
w.setSplittable(true);&lt;br /&gt;
w.setTitle(&amp;quot;Menu&amp;quot;);&lt;br /&gt;
w.setTooltiptext(&amp;quot;Application Menu&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to fix issue: Active workflow for this record exists? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5663639 sf.net post]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sometimes Adempiere crashes while processing a document. This usually leaves the document jammed in between two states.&lt;br /&gt;
&lt;br /&gt;
If you try to reverse it and rather unhelpful error message says there is an active workflow which must be completed first.&lt;br /&gt;
&lt;br /&gt;
To complete the work flow go to&lt;br /&gt;
Workflow -&amp;gt; Workflow process&lt;br /&gt;
then in the grid view find the work flow process with who's record_ID is the same as the document in question.&lt;br /&gt;
&lt;br /&gt;
Switch to the tab view and click&lt;br /&gt;
Manage Process -&amp;gt; then check 'Abort' -&amp;gt; click okay.&lt;br /&gt;
&lt;br /&gt;
Go back to the document, requery (blue arrows), and you should now be able to reverse the document.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to setup embedded tab? ====&lt;br /&gt;
Example how to setup UOM Conversion tab as embedded in UOM tab.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
* 1&lt;br /&gt;
Window: &amp;quot;Unit of Measure&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Tab: &amp;quot;Unit of Measure&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field: &amp;quot;C_UOM_ID&amp;quot; make it visible.&lt;br /&gt;
&lt;br /&gt;
Field: &amp;quot;Included Tab&amp;quot; set value to: &amp;quot;Conversion&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* 2&lt;br /&gt;
Tab: &amp;quot;Conversion&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Set &amp;quot;Sql Where&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C_UOM_Conversion.C_UOM_ID=@C_UOM_ID@&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to enter Payment from BP to another BP? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=6437760 sf.net post]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
easiest - reverse correct the payment and re-enter as if coming from the the&lt;br /&gt;
BP with the invoices and enter notes/descriptions to show what happened.&lt;br /&gt;
less easy - create an invoice to the BP who paid and put to a Charge pointing&lt;br /&gt;
to a suspense account.  enter a credit note to the BP with invoices and put&lt;br /&gt;
to same charge then allocate the credit note against the invoices.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Location of Documantation Chapters? ====&lt;br /&gt;
Chapter 3: http://grovers.us/media/Ch_3_BPG_SetUp.pdf&lt;br /&gt;
Chapter 4A: http://grovers.us/media/Ch4Sales&amp;amp;MarketingPrt1.pdf&lt;br /&gt;
Chapter 4B: http://grovers.us/media/Ch4SalesOrderPrt2.pdf&lt;br /&gt;
Chapter 5: http://grovers.us/media/finished.zip&lt;br /&gt;
Chapter 6: http://grovers.us/media/ch6open_items.pdf&lt;br /&gt;
&lt;br /&gt;
==== Description of Dunning in ADempiere ====&lt;br /&gt;
 [http://www.adempiere.com/index.php/ADempiere_Dunning ADempiere Dunning]&lt;br /&gt;
&lt;br /&gt;
=== Developer hints ===&lt;br /&gt;
* class dbPort/org.compiere.process.DocActionTemplate shows a template for DocAction, i think that it must be updated.&lt;br /&gt;
&lt;br /&gt;
* [http://www.youtube.com/watch?v=tRHyFODLlUE Video created by Tim; part 1]&lt;br /&gt;
* [http://www.youtube.com/watch?v=tRHyFODLlUE Video created by Tim; part 2]&lt;br /&gt;
* [http://www.adempiere.com/wiki/index.php/Open_Window_and_Tab Open Window and Tab programmatically], [https://sourceforge.net/forum/message.php?msg_id=4137884 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Hint-1; UPDATE columns which must have default value or have checked constraint ====&lt;br /&gt;
When developer add new column which is NOT NULL or which has checked constraint, please do not forget to execute proper UPDATE TABLE sql statements.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER TABLE EXP_FormatLine&lt;br /&gt;
ADD IsPartUniqueIndex CHAR(1) CHECK(IsPartUniqueIndex IN ('Y', 'N'));&lt;br /&gt;
&lt;br /&gt;
UPDATE EXP_FormatLine&lt;br /&gt;
SET IsPartUniqueIndex = 'N' &lt;br /&gt;
WHERE IsPartUniqueIndex IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hint-2; Be carefull when creating VIEWS ====&lt;br /&gt;
Use LEFT/RIGHT OUTER JOINS, because in many cases fields do not have values and INNER JOIN will not show all records.&lt;br /&gt;
In this example C_Invoice.C_Order_ID is not manadatory so view will not show records which do not have Order associated with Invoice!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FROM C_Invoice i &lt;br /&gt;
    INNER JOIN C_DocType d ON (i.C_DocType_ID=d.C_DocType_ID) &lt;br /&gt;
    LEFT OUTER JOIN C_Order o ON (i.C_Order_ID=o.C_Order_ID) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hint-3; Java on Ubuntu ====&lt;br /&gt;
Ubuntu came with default version of java 1.4.2 and installing 1.5.0 didn't change that. So developer have to change it. Exporting the path to your newer java to the .bashrc config file of your environment is a standadrd decision but is not system wide and in some cases is not enough.&lt;br /&gt;
The decision is. When you type at the prompt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ sudo update-java-alternatives -l&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will see the versions of all javas installed into your system. In order to make the latest one default for the whole system type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ sudo update-java-alternatives -s java-newer-ver &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Hint-4; How to truncate timestamp ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Timestamp today = TimeUtil.trunc(new Timestamp (System.currentTimeMillis() ), TimeUtil.TRUNC_DAY);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Hint-5; How to use MTable.get(..) and MTable.getPO(..) ====&lt;br /&gt;
Class: base/src/org/compiere/model/MProduct.java&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public MAttributeInstance getAttributeInstance(String name, String trxName) &lt;br /&gt;
{&lt;br /&gt;
	MAttributeInstance instance = null;&lt;br /&gt;
	&lt;br /&gt;
	MTable table = MTable.get(Env.getCtx(), MAttribute.Table_ID);&lt;br /&gt;
	MAttribute attribute = (MAttribute)table.getPO(&amp;quot;Name = ?&amp;quot;, new Object[]{name}, trxName);&lt;br /&gt;
	if ( attribute == null ) return null;&lt;br /&gt;
	table = MTable.get(Env.getCtx(), MAttributeInstance.Table_ID);&lt;br /&gt;
	instance = (MAttributeInstance)table.getPO(&lt;br /&gt;
			MAttributeInstance.COLUMNNAME_M_AttributeSetInstance_ID + &amp;quot;=?&amp;quot; &lt;br /&gt;
			+ &amp;quot; and &amp;quot; + MAttributeInstance.COLUMNNAME_M_Attribute_ID + &amp;quot;=?&amp;quot; ,&lt;br /&gt;
			new Object[]{getM_AttributeSetInstance_ID(), attribute.getM_Attribute_ID()},&lt;br /&gt;
			trxName);&lt;br /&gt;
	return instance;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Subversion Access ====&lt;br /&gt;
Subversion Plugin for Eclipse [http://www.polarion.org/index.php?page=download&amp;amp;project=subversive Subversive]&lt;br /&gt;
&lt;br /&gt;
Adempiere project's SourceForge.net Subversion repository can be checked out through SVN with the following instruction set:&lt;br /&gt;
svn co https://adempiere.svn.sourceforge.net/svnroot/adempiere adempiere&lt;br /&gt;
&lt;br /&gt;
* SVN Browse: [http://adempiere.svn.sourceforge.net/viewvc/adempiere/ here]&lt;br /&gt;
&lt;br /&gt;
==== MFG ====&lt;br /&gt;
[http://sourceforge.net/forum/message.php?msg_id=4440920 sf.net forum post]&lt;br /&gt;
&lt;br /&gt;
Important Steps:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. Apply the following patches: &lt;br /&gt;
 &lt;br /&gt;
buildbase.patch.tim &lt;br /&gt;
buildclient.patch.tim &lt;br /&gt;
buildutils_dev.patch.tim &lt;br /&gt;
X_AD_WF_Node.patch &lt;br /&gt;
X_C_DocType.patch &lt;br /&gt;
X_S_Resource.patch &lt;br /&gt;
X_AD_Workflow.patch &lt;br /&gt;
X_M_Cost.patch &lt;br /&gt;
X_M_Transaction.patch &lt;br /&gt;
X_M_Product.patch &lt;br /&gt;
 &lt;br /&gt;
2. I copied adempiere/libero/build.xml.tim to adempiere/libero/build.xml &lt;br /&gt;
 &lt;br /&gt;
Build your Adempiere and run it.  &lt;br /&gt;
&lt;br /&gt;
3. Create a new client and import accounting etc... &lt;br /&gt;
(If you don't do this you won't see all the menus, you can't just login under GardenAdmin/GardenAdmin that is not enough) &lt;br /&gt;
It looks that 2pack file do not contains proper access records.&lt;br /&gt;
Must research!!!&lt;br /&gt;
&lt;br /&gt;
4. Login with your new client Admin login you created in step3 and Libero away!!!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Compiling adempiere + libero from SVN head =====&lt;br /&gt;
Libero Manufacturing functionality is in branch/stable and is not necessary to perform below steps!&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4648987 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. Check out the head version of both libero and adempiere &lt;br /&gt;
2. Build adempiere &lt;br /&gt;
3. Build libero &lt;br /&gt;
4. Rebuild adempiere (to get the libero.jar into the install) &lt;br /&gt;
5. Set up the database. (Create database, run the pljava deployer, drop the&lt;br /&gt;
sqlj schema, import the dump file)&lt;br /&gt;
6. Run the 330-trunk database migrations &lt;br /&gt;
7. Copy EE01.zip into the packages directory &lt;br /&gt;
8. Run silent setup and start the app server.&lt;br /&gt;
9. Launch the Adempiere client&lt;br /&gt;
10. Add the EE01 entity type&lt;br /&gt;
11. Pack in the EE01.zip&lt;br /&gt;
12. Copy libero.jar into the packages/packages/EE01/lib directory.&lt;br /&gt;
13. Re-run silentsetup and start the server.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Template Process and steps to create a process ====&lt;br /&gt;
1)create a java class extends org.compiere.process.SvrProcess&lt;br /&gt;
&lt;br /&gt;
2)Implements two methods&lt;br /&gt;
void doIt()&lt;br /&gt;
String prepare()&lt;br /&gt;
&lt;br /&gt;
In Prepare method you can get different parameters&lt;br /&gt;
ProcessInfoParameter[] para = getParameter();&lt;br /&gt;
for (int i = 0; i &amp;lt; para.length; i++)&lt;br /&gt;
{&lt;br /&gt;
String name = para[i].getParameterName();&lt;br /&gt;
if (para[i].getParameter() == null)&lt;br /&gt;
;&lt;br /&gt;
else&lt;br /&gt;
System.out.println(name);&lt;br /&gt;
}&lt;br /&gt;
and in doIt method you try to insert this parameters into your table&lt;br /&gt;
after you create this class&lt;br /&gt;
Login with system administrator role&lt;br /&gt;
&lt;br /&gt;
3) 'Report and Process' window define your process with parameter&lt;br /&gt;
4) 'Table and Column' window choose your table and create a column with Button Reference&lt;br /&gt;
&lt;br /&gt;
5) Choose your process for this Button&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.adempiere.process;&lt;br /&gt;
&lt;br /&gt;
import java.sql.PreparedStatement;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
import java.util.logging.Level;&lt;br /&gt;
&lt;br /&gt;
import org.compiere.model.MClient;&lt;br /&gt;
import org.compiere.model.MDocType;&lt;br /&gt;
import org.compiere.model.X_C_BPartner_EDI;&lt;br /&gt;
import org.compiere.model.X_C_EDIFormat;&lt;br /&gt;
import org.compiere.model.X_C_EDIProcessor;&lt;br /&gt;
import org.compiere.process.ProcessInfoParameter;&lt;br /&gt;
import org.compiere.process.SvrProcess;&lt;br /&gt;
import org.compiere.util.DB;&lt;br /&gt;
import org.compiere.util.Env;&lt;br /&gt;
import org.compiere.util.Msg;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 *  @author Trifon Trifonov&lt;br /&gt;
 *  @version $Id:$&lt;br /&gt;
 */&lt;br /&gt;
public class ModelImporter extends SvrProcess&lt;br /&gt;
{&lt;br /&gt;
	/** Client Parameter			*/&lt;br /&gt;
	protected int	p_AD_Client_ID = 0;&lt;br /&gt;
	&lt;br /&gt;
	/** Business Partner Parameter */&lt;br /&gt;
	protected int p_C_BPartner_ID = 0;&lt;br /&gt;
	&lt;br /&gt;
	/** Document Type Parameter */&lt;br /&gt;
	protected int p_C_DocType_ID = 0;&lt;br /&gt;
	&lt;br /&gt;
	/** Record ID */&lt;br /&gt;
	protected int p_Record_ID = 0;&lt;br /&gt;
	&lt;br /&gt;
	/** Table ID */&lt;br /&gt;
	int AD_Table_ID = 0;&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * 	Get Parameters&lt;br /&gt;
	 */&lt;br /&gt;
	protected void prepare ()&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		p_Record_ID = getRecord_ID();&lt;br /&gt;
		if (p_AD_Client_ID == 0)&lt;br /&gt;
			p_AD_Client_ID = Env.getAD_Client_ID(getCtx());&lt;br /&gt;
		AD_Table_ID = getTable_ID();&lt;br /&gt;
		&lt;br /&gt;
		StringBuffer sb = new StringBuffer (&amp;quot;AD_Table_ID=&amp;quot;).append(AD_Table_ID);&lt;br /&gt;
		sb.append(&amp;quot;; Record_ID=&amp;quot;).append(getRecord_ID());&lt;br /&gt;
		//	Parameter&lt;br /&gt;
		ProcessInfoParameter[] para = getParameter();&lt;br /&gt;
		for (int i = 0; i &amp;lt; para.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			String name = para[i].getParameterName();&lt;br /&gt;
			if (para[i].getParameter() == null)&lt;br /&gt;
				;&lt;br /&gt;
			else if (name.equals(&amp;quot;C_BPartner_ID&amp;quot;))&lt;br /&gt;
				p_C_BPartner_ID = para[i].getParameterAsInt();&lt;br /&gt;
			else&lt;br /&gt;
				log.log(Level.SEVERE, &amp;quot;Unknown Parameter: &amp;quot; + name);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		log.info(sb.toString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * 	Process &lt;br /&gt;
	 *	@return info&lt;br /&gt;
	 */&lt;br /&gt;
	protected String doIt () throws Exception&lt;br /&gt;
	{&lt;br /&gt;
		StringBuffer result = new StringBuffer(&amp;quot;&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		MClient client = MClient.get (getCtx(), p_AD_Client_ID);&lt;br /&gt;
		log.info(client.toString());&lt;br /&gt;
		// get proper EDI Format from Document Type&lt;br /&gt;
		MDocType docType = MDocType.get(getCtx(), p_C_DocType_ID);&lt;br /&gt;
		&lt;br /&gt;
		int C_EDIFormat_ID = 0;&lt;br /&gt;
		int C_EDIProcessor_ID = 0;&lt;br /&gt;
		String sql1 = &amp;quot;SELECT C_EDIFormat_ID, C_EDIProcessor_ID &amp;quot;&lt;br /&gt;
			   + &amp;quot;FROM &amp;quot; + X_C_BPartner_EDI.Table_Name + &amp;quot; &amp;quot;&lt;br /&gt;
			   + &amp;quot;WHERE AD_Client_ID = ? &amp;quot;&lt;br /&gt;
			   + &amp;quot; AND C_BPartner_ID = ? &amp;quot;&lt;br /&gt;
			   + &amp;quot; AND C_DocType_ID = ? &amp;quot;&lt;br /&gt;
			   + &amp;quot; AND Inbound = 'N' &amp;quot; &lt;br /&gt;
		;&lt;br /&gt;
		ResultSet rs1 = null;&lt;br /&gt;
		PreparedStatement pstmt1 = null;&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			pstmt1 = DB.prepareStatement(sql1, get_TrxName());&lt;br /&gt;
			pstmt1.setInt(1, p_AD_Client_ID);&lt;br /&gt;
			pstmt1.setInt(2, p_C_BPartner_ID);&lt;br /&gt;
			pstmt1.setInt(3, p_C_DocType_ID);&lt;br /&gt;
			rs1 = pstmt1.executeQuery();&lt;br /&gt;
			if (rs1.next())&lt;br /&gt;
			{&lt;br /&gt;
				// Found specific C_EDIFormat for given BPartner and C_DocType_ID&lt;br /&gt;
				C_EDIFormat_ID = rs1.getInt(X_C_EDIFormat.COLUMNNAME_C_EDIFormat_ID);&lt;br /&gt;
				C_EDIProcessor_ID = rs1.getInt(X_C_EDIProcessor.COLUMNNAME_C_EDIProcessor_ID);&lt;br /&gt;
			} else {&lt;br /&gt;
				// Get C_EDIFormat_ID from Document Type&lt;br /&gt;
				C_EDIFormat_ID = docType.getC_EDIFormat_ID();&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		} finally {&lt;br /&gt;
			try {&lt;br /&gt;
				if (rs1 != null) rs1.close();&lt;br /&gt;
				if (pstmt1 != null) pstmt1.close();&lt;br /&gt;
			} catch (SQLException ex) {/*ignored*/}&lt;br /&gt;
			rs1 = null;&lt;br /&gt;
			pstmt1 = null;&lt;br /&gt;
		}&lt;br /&gt;
		if (C_EDIFormat_ID == 0) {&lt;br /&gt;
			throw new Exception(&amp;quot;EDI Format is not set for C_DocType_ID = [&amp;quot; + p_C_DocType_ID + &amp;quot;]&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if (C_EDIProcessor_ID == 0) {&lt;br /&gt;
			throw new Exception(&amp;quot;EDI Processor is not set for C_DocType_ID = [&amp;quot; + p_C_DocType_ID + &amp;quot;]&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		addLog(0, null, null, Msg.getMsg (getCtx(), &amp;quot;EDISubmitProcessResult&amp;quot;) + &amp;quot;\n&amp;quot; + result.toString());&lt;br /&gt;
		return result.toString();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - Oracle - AD_Element ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Element&lt;br /&gt;
(AD_Element_ID, AD_Client_ID, AD_Org_ID, IsActive,&lt;br /&gt;
Created, CreatedBy,&lt;br /&gt;
Cpdated, UpdatedBy,&lt;br /&gt;
ColumnName, EntityType, Name,&lt;br /&gt;
PrintName&lt;br /&gt;
)&lt;br /&gt;
VALUES (500XX, 0, 0, 'Y',&lt;br /&gt;
TO_DATE ('02/26/2007 12:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100,&lt;br /&gt;
TO_DATE ('02/26/2007 12:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100,&lt;br /&gt;
'[ColumnNameHere]', 'D', '[NameHere]',&lt;br /&gt;
'[PrintNameHere]'&lt;br /&gt;
);&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_Sequence&lt;br /&gt;
SET CurrentNextSys = (SELECT MAX (AD_Element_ID) + 1&lt;br /&gt;
FROM AD_Element&lt;br /&gt;
WHERE AD_Element_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE NAME = 'AD_Element';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - Oracle - AD_Table ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Table &lt;br /&gt;
(AD_Table_ID, AD_Client_ID, AD_Org_ID, IsActive,&lt;br /&gt;
Created, CreatedBy,&lt;br /&gt;
Updated, UpdatedBy, &lt;br /&gt;
Name, Description, Help, TableName, &lt;br /&gt;
IsView, AccessLevel, EntityType, AD_Window_ID, &lt;br /&gt;
AD_Val_Rule_ID, LoadSeq, IsSecurityEnabled, IsDeleteable, &lt;br /&gt;
IsHighVolume, ImportTable, IsChangelog, ReplicationType, &lt;br /&gt;
PO_Window_ID, CopyColumnsFromTable&lt;br /&gt;
) &lt;br /&gt;
VALUES &lt;br /&gt;
(53014, 0, 0, 'Y', &lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100, &lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100,&lt;br /&gt;
'[NameHere]', '[DescriptionHere]', '[HelpHere]', '[TableNameHere]', &lt;br /&gt;
'N', '4', 'D', null, &lt;br /&gt;
null, 0, 'N', 'Y', &lt;br /&gt;
'N', 'N', 'N', 'L', &lt;br /&gt;
null, 'N'&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_Sequence&lt;br /&gt;
SET CurrentNextSys = (SELECT MAX (AD_Table_ID) + 1&lt;br /&gt;
FROM AD_Table&lt;br /&gt;
WHERE AD_Table_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE NAME = 'AD_Table';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - Oracle - AD_Column ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Column&lt;br /&gt;
(AD_Column_ID, AD_Client_ID, AD_Org_ID, IsActive,&lt;br /&gt;
Created,&lt;br /&gt;
Updated, CreatedBy,&lt;br /&gt;
UpdatedBy, Name, Description, Version,&lt;br /&gt;
EntityType, ColumnName, AD_Table_ID, AD_Reference_ID, &lt;br /&gt;
FieldLength, IsKey, IsParent, IsMandatory, IsUpdateable,&lt;br /&gt;
IsIdentifier, SeqNo, IsTranslated, IsEncrypted,&lt;br /&gt;
IsSelectionColumn, AD_Element_ID, Callout, IsSyncDatabase,&lt;br /&gt;
IsAlwaysUpdateable&lt;br /&gt;
)&lt;br /&gt;
VALUES (502XX, 0, 0, 'Y',&lt;br /&gt;
TO_DATE ('02/26/2007 12:30:00', 'MM/DD/YYYY HH24:MI:SS'),&lt;br /&gt;
TO_DATE ('02/26/2007 12:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100,&lt;br /&gt;
100, '[NameHere]', '[DescriptionHere]', 1,&lt;br /&gt;
'D', '[ColumnNameHere]', AD_Table_IDHERE, AD_Reference_IDHere,&lt;br /&gt;
1, 'N', 'N', 'Y', 'Y',&lt;br /&gt;
'N', 0, 'N', 'N',&lt;br /&gt;
'N', 50071, '[CalloutHere]', 'N',&lt;br /&gt;
'N'&lt;br /&gt;
);&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_Sequence&lt;br /&gt;
SET CurrentNextSys = (SELECT MAX (AD_Column_ID) + 1&lt;br /&gt;
FROM AD_Column&lt;br /&gt;
WHERE AD_Column_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE NAME = 'AD_Column';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - Oracle - AD_Window ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Window&lt;br /&gt;
(AD_Window_ID,AD_Client_ID, AD_Org_ID, IsActive,&lt;br /&gt;
Created, CreatedBy,&lt;br /&gt;
Updated, UpdatedBy, &lt;br /&gt;
Name, Description, Help, WindowType, &lt;br /&gt;
IsSoTrx, EntityType, Processing, AD_Image_ID, &lt;br /&gt;
AD_Color_ID, IsDefault, WinHeight, WinWidth, &lt;br /&gt;
IsBetaFunctionality&lt;br /&gt;
) &lt;br /&gt;
VALUES (53003, 0, 0, 'Y', &lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100, &lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100, &lt;br /&gt;
'[NameHere]', null, null, 'M', &lt;br /&gt;
'N', 'D', 'N', null, &lt;br /&gt;
null, 'N', 0, 0, &lt;br /&gt;
'N'&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_Sequence&lt;br /&gt;
SET CurrentNextSys = (SELECT MAX (AD_Window_ID) + 1&lt;br /&gt;
  FROM AD_Window&lt;br /&gt;
  WHERE AD_Window_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE Name = 'AD_Window';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - Oracle - AD_Tab ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Tab &lt;br /&gt;
(AD_Tab_ID, AD_Client_ID, AD_Org_ID, IsActive,&lt;br /&gt;
Created, CreatedBy,&lt;br /&gt;
Updated, UpdatedBy,&lt;br /&gt;
Name, Description, Help, AD_Table_ID, &lt;br /&gt;
AD_Window_ID, SeqNo, TabLevel, IsSingleRow, &lt;br /&gt;
IsInfoTab, IsTranslationTab, IsReadOnly, AD_Column_ID, &lt;br /&gt;
HasTree, WhereClause, OrderByClause, CommitWarning, &lt;br /&gt;
AD_Process_ID, Processing, AD_Image_ID, ImportFields, &lt;br /&gt;
AD_ColumnSortOrder_ID, AD_ColumnSortYesNo_ID, IsSortTab, EntityType, &lt;br /&gt;
Included_Tab_ID, ReadOnlyLogic, DisplayLogic, IsInsertRecord, &lt;br /&gt;
IsAdvancedTab&lt;br /&gt;
) &lt;br /&gt;
VALUES (53014, 0, 0, 'Y', &lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100, &lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100, &lt;br /&gt;
'[NameHere]', null, null, [AD_TableIDHERE], &lt;br /&gt;
[AD_Window_IDHERE], [SeqNoHERE], 0, 'N', &lt;br /&gt;
'N', 'N', 'N', null, &lt;br /&gt;
'N', null, null, null, &lt;br /&gt;
null, 'N', null, 'N', &lt;br /&gt;
null, null, 'N', 'D', &lt;br /&gt;
null, null, null, 'Y', &lt;br /&gt;
'N'&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_Sequence&lt;br /&gt;
SET CurrentNextSys = (SELECT MAX (AD_Tab_ID) + 1&lt;br /&gt;
  FROM AD_Tab&lt;br /&gt;
  WHERE AD_Tab_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE Name = 'AD_Tab';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - Oracle - AD_Field ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Field&lt;br /&gt;
(AD_Field_ID, AD_Client_ID, AD_Org_ID, IsActive,&lt;br /&gt;
Created, CreatedBy,&lt;br /&gt;
Updated, UpdatedBy,&lt;br /&gt;
Name, Description, IsCentrallyMaintained, SeqNo, AD_Tab_ID,&lt;br /&gt;
AD_Column_ID, IsDisplayed, DisplayLength, IsReadonly,&lt;br /&gt;
IsSameLine, IsHeading, IsFieldOnly, IsEncrypted, EntityType&lt;br /&gt;
)&lt;br /&gt;
VALUES (50184, 0, 0, 'Y',&lt;br /&gt;
TO_DATE ('02/26/2007 12:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100,&lt;br /&gt;
TO_DATE ('02/26/2007 12:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100,&lt;br /&gt;
'Store Archive On File System', 'Store Archive On File System', 'Y', 250, 145,&lt;br /&gt;
50214, 'Y', 1, 'N',&lt;br /&gt;
'N', 'N', 'N', 'N', 'D'&lt;br /&gt;
);&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_Sequence&lt;br /&gt;
SET CurrentNextSys = (SELECT MAX (AD_Field_ID) + 1&lt;br /&gt;
  FROM AD_Field&lt;br /&gt;
  WHERE AD_Field_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE Name = 'AD_Field';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - Oracle - AD_Menu ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Menu&lt;br /&gt;
(AD_Menu_ID, AD_Client_ID, AD_Org_ID, IsActive,&lt;br /&gt;
Created, CreatedBy,&lt;br /&gt;
Updated, UpdatedBy,&lt;br /&gt;
Name, Description, IsSummary, IsSoTrx, &lt;br /&gt;
IsReadOnly, Action, AD_Window_ID, AD_Workflow_ID, &lt;br /&gt;
AD_Task_ID, AD_Process_ID, AD_Form_ID, AD_Workbench_ID, &lt;br /&gt;
EntityType&lt;br /&gt;
)&lt;br /&gt;
 VALUES( 53012, 0, 0, 'Y',&lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100,&lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100, &lt;br /&gt;
'[NameHERE]', NULL, 'N', 'N', &lt;br /&gt;
'N', 'W', [AD_Window_IDHERE], NULL, &lt;br /&gt;
NULL, NULL, NULL, NULL, &lt;br /&gt;
'D'&lt;br /&gt;
);&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_Sequence&lt;br /&gt;
SET CurrentNextSys = (SELECT MAX (AD_Menu_ID) + 1&lt;br /&gt;
  FROM AD_Menu&lt;br /&gt;
  WHERE AD_Menu_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE Name = 'AD_Menu';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - Oracle - AD_TreeNodeMM ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_TreeNodeMM &lt;br /&gt;
(AD_Tree_ID, Node_ID, AD_Client_ID, AD_Org_ID, IsActive, &lt;br /&gt;
Created, Createdby, &lt;br /&gt;
Updated, UpdatedBy, Parent_ID, SeqNo&lt;br /&gt;
)&lt;br /&gt;
VALUES (10, [Node_IDHERE], 0, 0, 'Y', &lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 0, &lt;br /&gt;
TO_DATE ('10/22/2007 09:30:00', 'MM/DD/YYYY HH24:MI:SS'), 0, [Parent_IDHERE], [SeqNoHERE]&lt;br /&gt;
);&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_Sequence&lt;br /&gt;
SET CurrentNextSys = (SELECT MAX (AD_Menu_ID) + 1&lt;br /&gt;
  FROM AD_Menu&lt;br /&gt;
  WHERE AD_Menu_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE Name = 'AD_Menu';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - AD_Message ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Message&lt;br /&gt;
(AD_Message_ID, AD_Client_ID, AD_Org_ID, IsActive,&lt;br /&gt;
Created, CreatedBy,&lt;br /&gt;
Updated, UpdatedBy,&lt;br /&gt;
Value, MsgText, MsgType&lt;br /&gt;
)&lt;br /&gt;
VALUES (500XX, 0, 0, 'Y',&lt;br /&gt;
TO_DATE ('02/26/2007 12:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100,&lt;br /&gt;
TO_DATE ('02/26/2007 12:30:00', 'MM/DD/YYYY HH24:MI:SS'), 100,&lt;br /&gt;
'[VaueHere]','[MSG Text Here]','I'&lt;br /&gt;
);&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_Sequence&lt;br /&gt;
SET CurrentNextSys = (SELECT MAX (AD_Message_ID) + 1&lt;br /&gt;
FROM AD_Message&lt;br /&gt;
WHERE AD_message_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE NAME = 'AD_Message';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - AD_Process_Para ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Process_Para&lt;br /&gt;
(AD_Process_Para_ID, AD_Client_ID, AD_Org_ID, IsActive, Created,&lt;br /&gt;
CreatedBy, Updated, UpdatedBy, Name,&lt;br /&gt;
Description,&lt;br /&gt;
Help,&lt;br /&gt;
AD_Process_ID, SeqNo, AD_Reference_ID, AD_Reference_Value_ID,&lt;br /&gt;
AD_Val_Rule_ID, ColumnName, IsCentrallyMaintained, FieldLength,&lt;br /&gt;
IsMandatory, IsRange, AD_Element_ID, EntityType&lt;br /&gt;
)&lt;br /&gt;
VALUES (50019, 0, 0, 'Y', TO_DATE ('2007-03-03', 'YYYY-MM-DD'),&lt;br /&gt;
100, TO_DATE ('2007-03-03', 'YYYY-MM-DD'), 100, 'Shipment Date',&lt;br /&gt;
'Date printed on shipment',&lt;br /&gt;
'The Shipment Date indicates the date printed on the shipment.',&lt;br /&gt;
118, 15, 15, NULL,&lt;br /&gt;
NULL, 'MovementDate', 'N', 0,&lt;br /&gt;
'Y', 'N', 1037, 'D'&lt;br /&gt;
);&lt;br /&gt;
COMMIT;&lt;br /&gt;
UPDATE AD_SEQUENCE&lt;br /&gt;
SET currentnextsys = (SELECT MAX (ad_process_para_id) + 1&lt;br /&gt;
FROM AD_Process_Para&lt;br /&gt;
WHERE AD_Process_Para_ID &amp;lt; 1000000)&lt;br /&gt;
WHERE NAME = 'AD_Process_Para';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Migration with SQL statements - AD_Ref_List - Postgre ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO AD_Ref_List (&lt;br /&gt;
Created, CreatedBy, Updated, UpdatedBy, &lt;br /&gt;
AD_Org_ID, AD_Ref_List_ID, AD_Reference_ID, &lt;br /&gt;
Value, Name, IsActive, AD_Client_ID, EntityType&lt;br /&gt;
) VALUES (&lt;br /&gt;
TO_TIMESTAMP('2008-01-19 22:45:00','YYYY-MM-DD HH24:MI:SS'), 0, TO_TIMESTAMP('2008-01-19 22:45:00','YYYY-MM-DD HH24:MI:SS'), 0, &lt;br /&gt;
0, 53287, 329, &lt;br /&gt;
'DOO', 'Distribution Order', 'Y',0,'EE01'&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Session_IsChangeLog, AD_Table.IsChangeLog, AD_Column.IsChangeLog combination ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4561355 sf.net post]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. Session_IsChangeLog=no,  AD_Table.IsChangeLog=no,  AD_Column.IsChangeLog=no&lt;br /&gt;
     =&amp;gt;is column logged: no&lt;br /&gt;
2. Session_IsChangeLog=no,  AD_Table.IsChangeLog=no,  AD_Column.IsChangeLog=yes&lt;br /&gt;
     =&amp;gt;is column logged: no&lt;br /&gt;
3. Session_IsChangeLog=no,  AD_Table.IsChangeLog=yes, AD_Column.IsChangeLog=no&lt;br /&gt;
     =&amp;gt;is column logged: no&lt;br /&gt;
4. Session_IsChangeLog=no,  AD_Table.IsChangeLog=yes, AD_Column.IsChangeLog=yes&lt;br /&gt;
     =&amp;gt;is column logged: yes&lt;br /&gt;
5. Session_IsChangeLog=yes, AD_Table.IsChangeLog=no,  AD_Column.IsChangeLog=no&lt;br /&gt;
     =&amp;gt;is column logged: no&lt;br /&gt;
6. Session_IsChangeLog=yes, AD_Table.IsChangeLog=no,  AD_Column.IsChangeLog=yes&lt;br /&gt;
     =&amp;gt;is column logged: yes&lt;br /&gt;
7. Session_IsChangeLog=yes, AD_Table.IsChangeLog=yes, AD_Column.IsChangeLog=no&lt;br /&gt;
     =&amp;gt;is column logged: no&lt;br /&gt;
8. Session_IsChangeLog=yes, AD_Table.IsChangeLog=yes, AD_Column.IsChangeLog=yes&lt;br /&gt;
     =&amp;gt;is column logged: yes&lt;br /&gt;
&lt;br /&gt;
Note: Session_IsChangeLog means: AD_Role.IsChangeLog or is a webstore session.&lt;br /&gt;
&lt;br /&gt;
Observation1: as you see, AD_Column.IsChangeLog=Y means inherit policy from&lt;br /&gt;
parent (AD_Table) and AD_Column.IsChangeLog=N means never log this record.&lt;br /&gt;
&lt;br /&gt;
PS: in future, i think we can move from IsChangeLog flag to some&lt;br /&gt;
ChangeLogPolicy=(Always, Never, Inherit from parent).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to use Transactions and Save points in Adempiere ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4584671 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
String trxName = Trx.createTrxName(&amp;quot;test&amp;quot;);&lt;br /&gt;
Trx trx = Trx.get(trxName, true);&lt;br /&gt;
Savepoint save1 = trx.setSavepoint(&amp;quot;save1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
location = new MLocation(m_Ctx, 0, trxName);&lt;br /&gt;
&lt;br /&gt;
... &lt;br /&gt;
&lt;br /&gt;
trx.rollback(save1);&lt;br /&gt;
&lt;br /&gt;
trx.commit();&lt;br /&gt;
trx.close();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to build Adempiere customization.jar ====&lt;br /&gt;
Customization.jar is in the lib directory of trunk. (ie /trunk/lib )&lt;br /&gt;
Go to that directory and execute following commands:&lt;br /&gt;
&lt;br /&gt;
jar uvf customization.jar -C ../libero/build/ ./org/compiere/model/&lt;br /&gt;
jar uvf customization.jar -C ../libero/build/ ./org/compiere/acct/&lt;br /&gt;
jar uvf customization.jar -C ../libero/build/ ./org/compiere/process/&lt;br /&gt;
&lt;br /&gt;
Then goto utils_dev directory and ./RUN_build.sh&lt;br /&gt;
&lt;br /&gt;
After the build has completed the new customized.jar will be in $ADEMPIERE_HOME/lib&lt;br /&gt;
Adempiere should now use the customized classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to Open Window from source code? ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MQuery aQuery = new  MQuery (&amp;quot;C_Invoice&amp;quot;);&lt;br /&gt;
aQuery.setRecordCount(1);&lt;br /&gt;
aQuery.addRestriction(&amp;quot;C_Invoice_ID&amp;quot;, &amp;quot;=&amp;quot;, C_Invoice_ID );&lt;br /&gt;
&lt;br /&gt;
AWindow frame = new AWindow();&lt;br /&gt;
frame.initWindow(183, aQuery); // 183=window &amp;quot;Invoice (Vendor)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
frame.validate();&lt;br /&gt;
AEnv.showCenterScreen(frame);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to keep parameter window open after view report? ==== &lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4688709 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to create confirmation for inventory move? ==== &lt;br /&gt;
* [https://sourceforge.net/tracker/?func=detail&amp;amp;atid=879334&amp;amp;aid=1875267&amp;amp;group_id=176962 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to make Adempiere LDAP username registration compatible with OpenLDAP ====&lt;br /&gt;
* [http://adempiere.svn.sourceforge.net/adempiere/?rev=4301&amp;amp;view=rev sf.net link]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- StringBuffer principal = new StringBuffer (userName).append(&amp;quot;@&amp;quot;).append(domain);&lt;br /&gt;
+ // For OpenLDAP uncomment the next line  &lt;br /&gt;
+ // StringBuffer principal = new StringBuffer(&amp;quot;uid=&amp;quot;).append(userName).append(&amp;quot;,&amp;quot;).append(domain);&lt;br /&gt;
+ StringBuffer principal = new StringBuffer(userName).append(&amp;quot;@&amp;quot;).append(domain);&lt;br /&gt;
  env.put(Context.SECURITY_PRINCIPAL, principal.toString());&lt;br /&gt;
  env.put(Context.SECURITY_CREDENTIALS, password);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to use JSR 223: Scripting callouts in Adempiere? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4740486 sf.net forum post]&lt;br /&gt;
* [[Script Callout]]&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7536798 sf.net post]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Integer order_id = (Integer) mTab.getValue(&amp;quot;C_ORDER_ID&amp;quot;);&lt;br /&gt;
MOrder obj = new MOrder(Env.getCtx(),order_id.intValue(),null);&lt;br /&gt;
if (obj.getC_DocType_ID()==1000025 )&lt;br /&gt;
{&lt;br /&gt;
  your code here...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to get Adempiere/Compiere Home from java class? ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
org.compiere.util.Ini.findAdempiereHome()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to set/update column ModelValidationClasses ====&lt;br /&gt;
Nice code from Carlos!&lt;br /&gt;
Have to check if it works for Oracle and Postgre.&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4843708 sf.net post]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UPDATE AD_Client&lt;br /&gt;
SET ModelValidationClasses =&lt;br /&gt;
CASE&lt;br /&gt;
WHEN ModelValidationClasses LIKE '%org.adempiere.model.LCO_Validator%'&lt;br /&gt;
  THEN ModelValidationClasses&lt;br /&gt;
WHEN LENGTH (TRIM (ModelValidationClasses)) = 0 OR ModelValidationClasses IS NULL&lt;br /&gt;
  THEN TO_NCHAR ('org.adempiere.model.LCO_Validator')&lt;br /&gt;
ELSE &lt;br /&gt;
   ModelValidationClasses || ';org.adempiere.model.LCO_Validator'&lt;br /&gt;
END&lt;br /&gt;
WHERE AD_Client_ID != 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to use Adempiere sequence from java code? ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	MSequence sequence = new MSequence(getCtx(), sequenceId, get_TrxName());&lt;br /&gt;
	int nextId = sequence.getNextID();&lt;br /&gt;
	sequence.save();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to setup Adempiere ZK Development Environment ====&lt;br /&gt;
* [http://adempiere.com/wiki/index.php/Creating_WebUI_Workspace Creating WebUI Workspace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to add new tab to Info Window ====&lt;br /&gt;
* [http://adempiere.svn.sourceforge.net/adempiere/?rev=5973&amp;amp;view=rev Adding Available to Promise Tab]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to copy print format and how to invoke print preview from java? ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Language language = Language.getLoginLanguage(); // Base Language&lt;br /&gt;
		MPrintFormat pf = null;&lt;br /&gt;
		int pfid = 0;&lt;br /&gt;
		&lt;br /&gt;
		// get print format for client, else copy system to client  &lt;br /&gt;
		RowSet pfrs = MPrintFormat.getAccessiblePrintFormats(X_RV_PP_Product_BOMLine.Table_ID, -1, null);&lt;br /&gt;
		pfrs.next();&lt;br /&gt;
		pfid = pfrs.getInt(&amp;quot;AD_PrintFormat_ID&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		if(pfrs.getInt(&amp;quot;AD_Client_ID&amp;quot;) != 0) pf = MPrintFormat.get(getCtx(), pfid, false);&lt;br /&gt;
		else pf = MPrintFormat.copyToClient(getCtx(), pfid, getAD_Client_ID());&lt;br /&gt;
		pfrs.close();		&lt;br /&gt;
&lt;br /&gt;
		if (pf == null) raiseError(&amp;quot;Error: &amp;quot;,&amp;quot;No Print Format&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		pf.setLanguage(language);&lt;br /&gt;
		pf.setTranslationLanguage(language);&lt;br /&gt;
		// query&lt;br /&gt;
		MQuery query = MQuery.get(getCtx(), AD_PInstance_ID, X_RV_PP_Product_BOMLine.Table_Name);&lt;br /&gt;
		query.addRestriction(&amp;quot;AD_PInstance_ID&amp;quot;, MQuery.EQUAL, AD_PInstance_ID);&lt;br /&gt;
&lt;br /&gt;
		PrintInfo info = new PrintInfo(X_RV_PP_Product_BOMLine.Table_Name, &lt;br /&gt;
				X_RV_PP_Product_BOMLine.Table_ID, getRecord_ID());&lt;br /&gt;
		ReportEngine re = new ReportEngine(getCtx(), pf, query, info);&lt;br /&gt;
&lt;br /&gt;
		ReportCtl.preview(re);&lt;br /&gt;
		// wait for report window to be closed as t_bomline   &lt;br /&gt;
		// records are deleted when process ends &lt;br /&gt;
		while (re.getView().isDisplayable()) &lt;br /&gt;
		{&lt;br /&gt;
			Env.sleep(1);&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Some views ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE VIEW RV_OpenItemAcct AS&lt;br /&gt;
SELECT &lt;br /&gt;
  item.AD_Client_ID&lt;br /&gt;
, item.AD_Org_ID&lt;br /&gt;
, item.DocumentNo&lt;br /&gt;
, item.C_Invoice_ID&lt;br /&gt;
, item.C_Order_ID&lt;br /&gt;
, item.C_BPartner_ID&lt;br /&gt;
, item.IsSOTrx&lt;br /&gt;
, item.DateInvoiced&lt;br /&gt;
, item.DateAcct&lt;br /&gt;
, item.NetDays&lt;br /&gt;
, item.DueDate&lt;br /&gt;
, item.DaysDue&lt;br /&gt;
, item.DiscountDate&lt;br /&gt;
, item.DiscountAmt&lt;br /&gt;
, item.GrandTotal&lt;br /&gt;
, item.PaidAmt&lt;br /&gt;
, item.OpenAmt&lt;br /&gt;
, item.C_Currency_ID&lt;br /&gt;
, item.C_ConversionType_ID&lt;br /&gt;
, item.C_PaymentTerm_ID&lt;br /&gt;
, item.IsPayScheduleValid&lt;br /&gt;
, item.C_InvoicePaySchedule_ID&lt;br /&gt;
, item.InvoiceCollectionType&lt;br /&gt;
, item.C_Campaign_ID&lt;br /&gt;
, item.C_Project_ID&lt;br /&gt;
, item.C_Activity_ID&lt;br /&gt;
, combCust.Combination AS custCombComination&lt;br /&gt;
, combCust.Description AS custCombDescription&lt;br /&gt;
, combVend.Combination AS custVendComination&lt;br /&gt;
, combVend.Description AS custVendDescription&lt;br /&gt;
FROM RV_OpenItem item&lt;br /&gt;
LEFT OUTER JOIN C_BP_Customer_Acct custAcct ON (item.IsSoTrx= 'Y' AND item.C_BPartner_ID = custAcct.C_BPartner_ID AND custAcct.C_AcctSchema_ID=101)&lt;br /&gt;
LEFT OUTER JOIN C_ValidCombination combCust ON (custAcct.C_Receivable_Acct = combCust.C_ValidCombination_ID)&lt;br /&gt;
LEFT OUTER JOIN C_BP_Vendor_Acct vendAcct ON (item.IsSoTrx= 'N' AND item.C_BPartner_ID = vendAcct.C_BPartner_ID AND vendAcct.C_AcctSchema_ID=101)&lt;br /&gt;
LEFT OUTER JOIN C_ValidCombination combVend ON (vendAcct.V_Liability_Acct = combVend.C_ValidCombination_ID)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to call stored procedure from java? ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CallableStatement cs = null;&lt;br /&gt;
  cs = DB.prepareCall(&amp;quot;{call AD_Sequence_Next(?,?,?)}&amp;quot;);&lt;br /&gt;
  cs.setString(1, &amp;quot;A_Asset_Change&amp;quot;);&lt;br /&gt;
  cs.setInt(2,imp.getAD_Client_ID());&lt;br /&gt;
  cs.registerOutParameter(3, java.sql.Types.INTEGER);&lt;br /&gt;
  cs.execute();&lt;br /&gt;
  &lt;br /&gt;
  int value = cs.getInt(3);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to add Value column to Existing Adempiere table? ====&lt;br /&gt;
* Parameters:&lt;br /&gt;
** TableName    = 'M_Attribute'&lt;br /&gt;
** AD_Client_ID = 11&lt;br /&gt;
&lt;br /&gt;
* Add Value column&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER TABLE M_Attribute&lt;br /&gt;
ADD Value NVARCHAR2(40)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Make values unique&lt;br /&gt;
** Make values unique - version 1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UPDATE M_Attribute&lt;br /&gt;
 Set Value = nextidfunc( (SELECT AD_Sequence_ID FROM AD_Sequence WHERE AD_Client_ID = 0 AND Name = 'M_Attribute')::integer, 'N'::varchar)&lt;br /&gt;
WHERE M_Attribute.Value IS NULL&lt;br /&gt;
 AND M_Attribute.AD_Client_ID = 11&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** Make values unique - version 2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UPDATE M_Attribute&lt;br /&gt;
 Set Value = nextidfunc(691, 'N'::varchar)&lt;br /&gt;
WHERE M_Attribute.Value IS NULL&lt;br /&gt;
 AND M_Attribute.AD_Client_ID = 11&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Unique contraint&lt;br /&gt;
** Add Unique contraint - version 1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER TABLE M_Attribute&lt;br /&gt;
 ADD Constraint M_Attribute_Value UNIQUE(AD_Client_ID, Value)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** Add Unique contraint - version 2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE UNIQUE INDEX M_Attribute_Value ON M_Attribute(AD_Client_ID, Value)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to speedup Record Change Log? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5438336 sf.net post]&lt;br /&gt;
** Oracle&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
create index ad_changelog_speed on ad_changelog (ad_table_id, record_id);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** Postgre&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
create index ad_changelog_speed on ad_changelog (ad_table_id, record_id);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Log management in Adempiere? ====&lt;br /&gt;
Adempiere uses Java logging capabilities.&lt;br /&gt;
Responsible classes are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
base/src/org.compiere.util.CLogMgt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuration files:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
base/src/org/compiere/util/logClient.properties&lt;br /&gt;
base/src/org/compiere/util/logServer.properties&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Adempiere initiative: Remove SQL code and Replace with Query class! ====&lt;br /&gt;
* [https://sourceforge.net/tracker/?func=detail&amp;amp;atid=879335&amp;amp;aid=2214883&amp;amp;group_id=176962 sf.net tracker]&lt;br /&gt;
&lt;br /&gt;
* Description to use in svn commits:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
One class per day initiative.&lt;br /&gt;
FR: [ 2214883 ] Remove SQL code and Replace for Query&lt;br /&gt;
https://sourceforge.net/tracker/?func=detail&amp;amp;atid=879335&amp;amp;aid=2214883&amp;amp;group_id=176962&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to use Adempiere Query class? ====&lt;br /&gt;
&lt;br /&gt;
* [http://www.adempiere.com/wiki/index.php/ADempiere_Best_Practices]&lt;br /&gt;
&lt;br /&gt;
===== How to return only ONE object? =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
StringBuffer whereClause = null;&lt;br /&gt;
whereClause = new StringBuffer(&amp;quot;AD_Client_ID=?&amp;quot;			// #1&lt;br /&gt;
							 + &amp;quot; AND AD_Org_ID=?&amp;quot;		// #2&lt;br /&gt;
							 + &amp;quot; AND C_AcctSchema_ID=?&amp;quot;	// #3&lt;br /&gt;
							 + &amp;quot; AND Account_ID=?&amp;quot;);	// #4&lt;br /&gt;
&lt;br /&gt;
ArrayList&amp;lt;Object&amp;gt; params = new ArrayList&amp;lt;Object&amp;gt;();&lt;br /&gt;
params.add(AD_Client_ID);&lt;br /&gt;
params.add(AD_Org_ID);&lt;br /&gt;
params.add(C_AcctSchema_ID);&lt;br /&gt;
params.add(Account_ID);&lt;br /&gt;
&lt;br /&gt;
Account existingAccount = new Query(ctx, MAccount.Table_Name, whereClause.toString(), null)&lt;br /&gt;
		.setParameters( params )&lt;br /&gt;
		.first();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== How to return ARRAY of objects? =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static MAchievement[] getOfMeasure (Properties ctx, int PA_Measure_ID)&lt;br /&gt;
{&lt;br /&gt;
	String whereClause = &amp;quot;PA_Measure_ID=? AND IsAchieved='Y'&amp;quot;; &lt;br /&gt;
	List&amp;lt;MAchievement&amp;gt; list = new Query(ctx, MAchievement.Table_Name, whereClause, null)&lt;br /&gt;
		.setParameters(new Object[]{PA_Measure_ID})&lt;br /&gt;
		.setOrderBy(&amp;quot;SeqNo, DateDoc&amp;quot;)&lt;br /&gt;
		.list()&lt;br /&gt;
	;&lt;br /&gt;
			&lt;br /&gt;
	MAchievement[] retValue = new MAchievement[ list.size() ];&lt;br /&gt;
	retValue = list.toArray (retValue);&lt;br /&gt;
	return retValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== How to return ARRAY of objects and process elements? =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public static MAchievement[] getOfMeasure (Properties ctx, int PA_Measure_ID)&lt;br /&gt;
{&lt;br /&gt;
	String whereClause = &amp;quot;PA_Measure_ID=? AND IsAchieved='Y'&amp;quot;; &lt;br /&gt;
	List&amp;lt;MAchievement&amp;gt; list = new Query(ctx, MAchievement.Table_Name, whereClause, null)&lt;br /&gt;
		.setParameters(new Object[]{PA_Measure_ID})&lt;br /&gt;
		.setOrderBy(&amp;quot;SeqNo, DateDoc&amp;quot;)&lt;br /&gt;
		.list()&lt;br /&gt;
	;&lt;br /&gt;
	for(MAchievement achievement : list)&lt;br /&gt;
	{&lt;br /&gt;
	  s_log.fine(&amp;quot; - &amp;quot; + achievement);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	MAchievement[] retValue = new MAchievement[ list.size() ];&lt;br /&gt;
	retValue = list.toArray (retValue);&lt;br /&gt;
	return retValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== How to pass Timestamp parameter? =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Timestamp dateAcct = ...;&lt;br /&gt;
String trxName = ...;&lt;br /&gt;
&lt;br /&gt;
String whereClause = &amp;quot;c.C_CashBook_ID=?&amp;quot;		//	#1&lt;br /&gt;
		+ &amp;quot; AND TRUNC(c.StatementDate)=?&amp;quot;	//	#2&lt;br /&gt;
		+ &amp;quot; AND c.Processed='N'&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
MCash retValue = new Query(ctx, MCash.Table_Name, whereClause, trxName)&lt;br /&gt;
	.setParameters(new Object[]{C_CashBook_ID, TimeUtil.getDay(dateAcct)})&lt;br /&gt;
	.first()&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== How to use Query class with complex where clause: EXISTS? =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
String whereClause = &amp;quot;C_Cash.AD_Org_ID=?&amp;quot;		//	#1&lt;br /&gt;
+ &amp;quot; AND TRUNC(C_Cash.StatementDate)=?&amp;quot;			//	#2&lt;br /&gt;
+ &amp;quot; AND C_Cash.Processed='N'&amp;quot;&lt;br /&gt;
+ &amp;quot; AND EXISTS (SELECT * FROM C_CashBook cb &amp;quot;&lt;br /&gt;
	+ &amp;quot;WHERE C_Cash.C_CashBook_ID=cb.C_CashBook_ID AND cb.AD_Org_ID=C_Cash.AD_Org_ID&amp;quot;&lt;br /&gt;
	+ &amp;quot; AND cb.C_Currency_ID=?)&amp;quot;			//	#3&lt;br /&gt;
;&lt;br /&gt;
MCash retValue = new Query(ctx, MCash.Table_Name, whereClause, trxName)&lt;br /&gt;
	.setParameters(new Object[]{AD_Org_ID,TimeUtil.getDay(dateAcct),C_Currency_ID})&lt;br /&gt;
	.first()&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to use Adempiere MQuery class? ====&lt;br /&gt;
* example 1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MQuery aQuery = new MQuery(X_C_Invoice.Table_Name);&lt;br /&gt;
aQuery.setRecordCount( 1 );&lt;br /&gt;
aQuery.addRestriction(&amp;quot;C_Invoice_ID&amp;quot;, &amp;quot;=&amp;quot;, C_Invoice_ID );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Example 2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MQuery query = MQuery.get(getCtx(), AD_PInstance_ID, X_RV_PP_Product_BOMLine.Table_Name);&lt;br /&gt;
query.addRestriction(&amp;quot;AD_PInstance_ID&amp;quot;, MQuery.EQUAL, AD_PInstance_ID);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Adempiere utility classes? ====&lt;br /&gt;
* base/org.compiere.util.TimeUtil&lt;br /&gt;
&lt;br /&gt;
==== Base Language functionality ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Revision: 6839&lt;br /&gt;
         http://adempiere.svn.sourceforge.net/adempiere/?rev=6839&amp;amp;view=rev&lt;br /&gt;
&lt;br /&gt;
Revision: 6810&lt;br /&gt;
         http://adempiere.svn.sourceforge.net/adempiere/?rev=6810&amp;amp;view=rev&lt;br /&gt;
   contributions/Localizations/Germany/src/migration/postgresql/baselanguage/baselanguage.sql&lt;br /&gt;
   contributions/Localizations/Germany/src/migration/postgresql/baselanguage/baselanguage_views.sql&lt;br /&gt;
Revision: 6809&lt;br /&gt;
         http://adempiere.svn.sourceforge.net/adempiere/?rev=6809&amp;amp;view=rev&lt;br /&gt;
   contributions/Localizations/Germany/src/java/org/compiere/apps/ALogin.java&lt;br /&gt;
   contributions/Localizations/Germany/src/java/org/compiere/cm/utils/CMEnv.java&lt;br /&gt;
   contributions/Localizations/Germany/src/java/org/compiere/util/Language.java&lt;br /&gt;
   contributions/Localizations/Germany/src/java/org/compiere/wstore/PriceListTag.java&lt;br /&gt;
   contributions/Localizations/Germany/src/java/org/posterita/core/businesslogic/ElementManager.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Differences in source code between Adempiere 3.5.0 and Compiere 3.0.0 ====&lt;br /&gt;
===== Context =====&lt;br /&gt;
* Adempiere&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Compiere&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Build, Imports =====&lt;br /&gt;
* Compiere&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.compiere.util.Ctx;&lt;br /&gt;
import org.compiere.framework.PO;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add projects 'ad' and 'common' to build path.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Keeping sources compatible with Adempiere 3.5.0 and Compiere 3.0.0 ====&lt;br /&gt;
---- Context&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---- Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to Validate conditional mandatory field? ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Timestamp start = getTimeSlotStart();&lt;br /&gt;
if (start == null)&lt;br /&gt;
	throw new FillMandatoryException(COLUMNNAME_TimeSlotStart);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to enable Query TimeOut in Adempiere? ====&lt;br /&gt;
* [https://sourceforge.net/tracker/?func=detail&amp;amp;atid=879332&amp;amp;aid=2794224&amp;amp;group_id=176962 sf.net]&lt;br /&gt;
Specify JVM parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Dorg.adempiere.po.useTimeoutForUpdate=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to decrease number of log files created by Java WebStart? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7427169 sf.net port]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Problem is missing ADEMPIERE_HOME on the machine.&lt;br /&gt;
Webstart works fine without environment variable set, only resulting in many many logfiles.&lt;br /&gt;
After setting the variable to c:\adempiere it created the log folder and used just one file per session as expected.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to post accounting transactions without Application Server? ====&lt;br /&gt;
* [http://sourceforge.net/tracker/?func=detail&amp;amp;atid=879335&amp;amp;aid=2799327&amp;amp;group_id=176962 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* [http://www.adempiere.com/index.php/Post_accounting_without_a_server_running Wiki page]&lt;br /&gt;
&lt;br /&gt;
Add new jvm system property:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
org.adempiere.server.embedded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== License to use for new classes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**********************************************************************&lt;br /&gt;
* This file is part of ADempiere Business Suite                       *&lt;br /&gt;
* http://www.adempiere.org                                            *&lt;br /&gt;
*                                                                     *&lt;br /&gt;
* Copyright (C) Trifon Trifonov.                                      *&lt;br /&gt;
* Copyright (C) Contributors                                          *&lt;br /&gt;
*                                                                     *&lt;br /&gt;
* This program is free software; you can redistribute it and/or       *&lt;br /&gt;
* modify it under the terms of the GNU General Public License         *&lt;br /&gt;
* as published by the Free Software Foundation; either version 2      *&lt;br /&gt;
* of the License, or (at your option) any later version.              *&lt;br /&gt;
*                                                                     *&lt;br /&gt;
* This program is distributed in the hope that it will be useful,     *&lt;br /&gt;
* but WITHOUT ANY WARRANTY; without even the implied warranty of      *&lt;br /&gt;
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the        *&lt;br /&gt;
* GNU General Public License for more details.                        *&lt;br /&gt;
*                                                                     *&lt;br /&gt;
* You should have received a copy of the GNU General Public License   *&lt;br /&gt;
* along with this program; if not, write to the Free Software         *&lt;br /&gt;
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,          *&lt;br /&gt;
* MA 02110-1301, USA.                                                 *&lt;br /&gt;
*                                                                     *&lt;br /&gt;
* Contributors:                                                       *&lt;br /&gt;
* - Trifon Trifonov (trifonnt@users.sourceforge.net)                  *&lt;br /&gt;
*                                                                     *&lt;br /&gt;
* Sponsors:                                                           *&lt;br /&gt;
* - Company (http://www.site.com)                                     *&lt;br /&gt;
***********************************************************************/&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
/**&lt;br /&gt;
 *	@author Trifon Trifonov&lt;br /&gt;
 *	@version $Id$&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to add new Actions to Document Engine ===&lt;br /&gt;
Edit class &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
base/src/org/compiere/process/DocumentEngine.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add new if statements:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+               /********************&lt;br /&gt;
+                *  Manufacturing Order&lt;br /&gt;
+                */&lt;br /&gt;
+               else if (AD_Table_ID == MPPOrder.Table_ID)&lt;br /&gt;
+               {&lt;br /&gt;
+                       if (docStatus.equals(DocumentEngine.STATUS_Drafted)&lt;br /&gt;
+                                       || docStatus.equals(DocumentEngine.STATUS_InProgress)&lt;br /&gt;
+                                       || docStatus.equals(DocumentEngine.STATUS_Invalid))&lt;br /&gt;
+                               {&lt;br /&gt;
+                                       options[index++] = DocumentEngine.ACTION_Prepare;&lt;br /&gt;
+                                       options[index++] = DocumentEngine.ACTION_Close;&lt;br /&gt;
+                               }&lt;br /&gt;
+                               //      Complete ... CO&lt;br /&gt;
+                               else if (docStatus.equals(DocumentEngine.STATUS_Completed))&lt;br /&gt;
+                               {&lt;br /&gt;
+                                       options[index++] = DocumentEngine.ACTION_Void;&lt;br /&gt;
+                                       options[index++] = DocumentEngine.ACTION_ReActivate;&lt;br /&gt;
+                               }&lt;br /&gt;
+               }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adempiere Export/Import Tools ===&lt;br /&gt;
* ADCK can be used in two modes.&lt;br /&gt;
** As Development tool. To model DB design and create/modify tables.&lt;br /&gt;
As Development tool ADCK uses Druid which allows developer to generate CREATE TABLE and ALTER table SQL statement for various DBs: Oracle, Postgres, MySQL, ...&lt;br /&gt;
As Development tool ADCK can generate xml files for various tools and frameworks like: [http://www.hibernate.org/ hibernate], [http://db.apache.org/torque/ torque].&lt;br /&gt;
&lt;br /&gt;
** As transfer tool for only migrating AD changes from Adempiere instance to instance or from version to version.&lt;br /&gt;
As transfer tool ADCK require initial just setting of proper settings in properties files.&lt;br /&gt;
&lt;br /&gt;
==== 2Pack vs. ADCK comparison table. ====&lt;br /&gt;
&lt;br /&gt;
This table is made with the sole purpose to help me to organize information regarding import/export tools in Adempiere. &lt;br /&gt;
I do not have any idea to push any of the tools mentiod here. &lt;br /&gt;
It is user's choice to use or not to use any of them and also users choice to have headache after thier usage.&lt;br /&gt;
&lt;br /&gt;
WARNING: !!!MAKE A BACKUP BEFORE ANY USAGE OF ANY OF THE TOOLS!!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;2Pack&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ADCK&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;menu&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK menu|menu]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;window&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK window|window]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;tab&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK tab|tab]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;field&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK field|field]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;process&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK process|process]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;processpara&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK processpara|processpara]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;table&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK table|table]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;column&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK column|column]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;impformat&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_ImpFormat|AD_ImpFormat]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;impformatrow&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_ImpFormat|AD_ImpFormat_Row]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;printformat&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_PrintFormat|AD_PrintFormat]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;printformatitem&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_PrintFormat|AD_PrintFormatItem]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;reference&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;referencelist&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;referencetable&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;reportview&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;reportviewcol&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;form&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;workbench&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;preference&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;role&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Role|AD_Role]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_User|AD_User]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;userrole&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_User_Roles|AD_User_Roles]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;orgrole&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Role_OrgAccess|AD_Role_OrgAccess]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;windowaccess&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Window_Access|AD_Window_Access]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;processaccess&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Process_Access|AD_Process_Access]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;formaccess&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Form_Access|AD_Form_Access]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;workflowaccess&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Workflow_Access|AD_Workflow_Access]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;taskaccess&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |ADCK ]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Column_Access|AD_Column_Access]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Language|AD_Language]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Message|AD_Message]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_PrintTableFormat|AD_PrintTableFormat]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Scheduler|AD_Scheduler]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK C_BP_Group|C_BP_Group]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK M_Product_Category|M_Product_Category]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK PA_ReportColumnSet|PA_ReportColumnSet]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK PA_ReportColumnSet|PA_ReportColumn]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK PA_Report|PA_Report]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK PA_ReportLineSet|PA_ReportLineSet]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK PA_ReportLineSet|PA_ReportLine]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK PA_ReportLineSet|PA_ReportSource]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK AD_Client|AD_Client]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[2Pack Any Table| 2Pack Any Table]]&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK Any Table|ADCK Any Table]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;???&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[ADCK |TEMPLATE]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Weak sides of 2pack according me ====&lt;br /&gt;
* Require integration at source code level with Adempiere, which means that if i need to customize any import functionality i must rebuild whole application or patch it.&lt;br /&gt;
** Carlos pointed that 2Pack can import records into any table, even customized. &lt;br /&gt;
** My comment is regarding main xml elements like: menu, window, tab, field, process, ... First time when i understood that i need to modify main xml elements was for JasperReports integration when i had to add new column into AD_Process table. &lt;br /&gt;
** I think that GenericPO which is responsible to import records into Any Table had one issue (I have to remember the exact reason. It was regarding Sequences or something related. ).&lt;br /&gt;
** Format of general imports is complicated.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Main class(org.adempiere.pipo.PackInHandler) which handle import is very big(3800 lines) and complex, which require lot of time for developer to study it and makes modifications hard task.&lt;br /&gt;
** Since version 3.3.0 Low Heng Sin refactored org.adempiere.pipo.PackInHandler and now it is split into multiple classes.&lt;br /&gt;
&lt;br /&gt;
* 2Pack uses SAX Parser which makes developer job harder as developer can't look forward or backward in XML tree.&lt;br /&gt;
&lt;br /&gt;
==== Weak sides of ADCK according me ====&lt;br /&gt;
* It is external program, so user do not have such detailed control over security.&lt;br /&gt;
* It is harder for developer to work with it as do not have automatic changes extraction like 2Pack.&lt;br /&gt;
&lt;br /&gt;
=== Ideas for extensions  ===&lt;br /&gt;
&lt;br /&gt;
==== SOUNDX support ====&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Soundex Soundex]&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4997427 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Computerized Maintenance Management System ====&lt;br /&gt;
[https://sourceforge.net/forum/message.php?msg_id=4465723 sf.net post]&lt;br /&gt;
CMMS is Computerized Maintenance Management System that designed specially for preventive maintenance for assets such as light vehicle, heavy equipment etc. so that company can create budgeting for repair and maintenance for their assets. Technicaly the module give alert to user when an asset have to get action such as replace fuel filter, oil filter or other item spareparts. Therefore these module related with inventory (internal use). Inventory will decrease its stock when user CMMS request for repair and maintenance their an asset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Additional fields in I_Xxx tables ====&lt;br /&gt;
[https://sourceforge.net/forum/message.php?msg_id=4441215 sf.net forum post]&lt;br /&gt;
&lt;br /&gt;
By: Carlos (globalqss)&lt;br /&gt;
&lt;br /&gt;
Hi, every time I customize tables for a customer (almost all projects) I need&lt;br /&gt;
to change the importers and/or make some tricks with not used fields on import.&lt;br /&gt;
[Struggling today with this case]&lt;br /&gt;
&lt;br /&gt;
Idea!&lt;br /&gt;
&lt;br /&gt;
Not tested, but I think I could make a ModelValidator on udpate of I_ table&lt;br /&gt;
(i.e. I_BPartner) and process the corresponding fields.&lt;br /&gt;
&lt;br /&gt;
The other thing we could do is to add some free fields to every I_ table as&lt;br /&gt;
wildcards to save customized or non considered fields and process them properly&lt;br /&gt;
with the ModelValidator.&lt;br /&gt;
Maybe just adding i.e. 10 fields FreeField01 through FreeField10 on the tables&lt;br /&gt;
can make the trick.&lt;br /&gt;
&lt;br /&gt;
=== Recent Adempiere changes ===&lt;br /&gt;
==== Avoid usage of clearing accounts ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4647051 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Tracker also contains a .doc file which show the effect of the change and he scripts to test it with GardenWorld.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Add more query method to MTable ====&lt;br /&gt;
* [https://sourceforge.net/tracker/?func=detail&amp;amp;atid=879335&amp;amp;aid=1777787&amp;amp;group_id=176962 Feature Requests-1777787 Add more query method to MTable]&lt;br /&gt;
&lt;br /&gt;
Date: 2007-08-21&lt;br /&gt;
&lt;br /&gt;
MTable has new method: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public Query createQuery(String whereClause, String trxName) &lt;br /&gt;
	{&lt;br /&gt;
		return new Query(this, whereClause, trxName);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Jar file in 2pack/lib will be packed into Adempiere.jar  ====&lt;br /&gt;
Starting from revision 3261 of trunk, any jar file that is pack of the lib folder of a 2pack package will be packed into the Adempiere.jar by the run_setup process. What this mean is, you just need to compile all libero specific code, pack it in a jar file and place it under the lib folder of the libero 2pack archive. Please look at the latest FAPack006.zip in the svn packages folder for an example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reorganization of Adempiere menu ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4555658 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;menu name=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
  &amp;lt;menu name=&amp;quot;Export Format&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;window name=&amp;quot;Export Format&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/menu&amp;gt;&lt;br /&gt;
&amp;lt;/menu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Suggested menu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;menu name=&amp;quot;Quote-to-Invoice&amp;quot; &amp;gt;&lt;br /&gt;
  &amp;lt;menu name=&amp;quot;Sales Orders&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;menu name=&amp;quot;Rules&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;window name=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;menu name=&amp;quot;Transact&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;window name=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;menu name=&amp;quot;Report and Inquire&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;window name=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;menu name=&amp;quot;Processes&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;window name=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/menu&amp;gt;&lt;br /&gt;
  &amp;lt;/menu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;menu name=&amp;quot;Shipments&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;menu name=&amp;quot;Rules&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;window name=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;menu name=&amp;quot;Transact&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;window name=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;menu name=&amp;quot;Report and Inquire&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;window name=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;menu name=&amp;quot;Processes&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;window name=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/menu&amp;gt;&lt;br /&gt;
  &amp;lt;/menu&amp;gt;&lt;br /&gt;
&amp;lt;/menu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How to add chache suport for persistent class? ===&lt;br /&gt;
Add class variable to hold reference to Cache.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class MActivity extends X_C_Activity&lt;br /&gt;
{&lt;br /&gt;
      /** Static Cache */&lt;br /&gt;
      private static CCache&amp;lt;Integer, MActivity&amp;gt; s_cache = new CCache&amp;lt;Integer, MActivity&amp;gt;(Table_Name, 30);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change getXxxx method&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      public static MActivity get(Properties ctx, int C_Activity_ID)&lt;br /&gt;
      {&lt;br /&gt;
              if (C_Activity_ID &amp;lt;= 0)&lt;br /&gt;
             {&lt;br /&gt;
                      return null;&lt;br /&gt;
              }&lt;br /&gt;
              // Try cache&lt;br /&gt;
              MActivity activity = s_cache.get(C_Activity_ID);&lt;br /&gt;
              if (activity != null)&lt;br /&gt;
              {&lt;br /&gt;
                      return activity;&lt;br /&gt;
              }&lt;br /&gt;
              // Load from DB&lt;br /&gt;
              activity = new MActivity(ctx, C_Activity_ID, null);&lt;br /&gt;
              if (activity.get_ID() == C_Activity_ID)&lt;br /&gt;
              {&lt;br /&gt;
                      s_cache.put(C_Activity_ID, activity);&lt;br /&gt;
              }&lt;br /&gt;
              else&lt;br /&gt;
              {&lt;br /&gt;
                      activity = null;&lt;br /&gt;
              }&lt;br /&gt;
              return activity;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OpenXava Q &amp;amp; A ==&lt;br /&gt;
Created an entity ticketClass with a method GenerateTickets. Implemented the calculator using an IModelCalculator class. &lt;br /&gt;
 &lt;br /&gt;
Want to create a button/link when ticketClass is displayed so that user click on it the method gets executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.1 How do I set this up? ===&lt;br /&gt;
* A1. Have to create an action and include it in the controller of your module.&lt;br /&gt;
In this action, you can obtain the object and call to you method, something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public void execute() throws Exception {&lt;br /&gt;
  ...&lt;br /&gt;
  TicketClass ticketClass = (TicketClass) MapFacade.findEntity(getModelName(), getView().getKeyValues());&lt;br /&gt;
  ticketClass.generateTickets();&lt;br /&gt;
  getView().findObject(); // This refresh the view (Q2)&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.2 How can I get the view of the entity refreshed after the method is executed. ===&lt;br /&gt;
* A2. See the above code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.3 How can i reload other modules to reflect the changes made by an action that was performed in one module? ===&lt;br /&gt;
An action in one module (module A) that changes the value of the data&lt;br /&gt;
contained in another module (module B), when i execute an action button (in&lt;br /&gt;
module A), it executes successfully and updates the data in the other entity&lt;br /&gt;
(entity B) in the database, but when i view module B, the module list view (of&lt;br /&gt;
module B) is still showing the old data!&lt;br /&gt;
&lt;br /&gt;
* A3. In a Liferay 2.1.3 with OX2.2 it works fine, that is, I modify data in a portlet, I move to another and the data&lt;br /&gt;
is refreshed without touch filter nor any other action.&lt;br /&gt;
Look at your web/WEB-INF/portlet.xml, have you &amp;lt;expiration-cache&amp;gt;0&amp;lt;/expiration-cache&amp;gt; for your portlets?&lt;br /&gt;
Since OX2.1 expiration-cache is 0 in the portlet.xml generated by OpenXava.&lt;br /&gt;
Hence, if you are using OX2.1 or better you only need to execute the ant target 'redeployPortlets' in order to fix your portlet.xml file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.4 How to avoid warnings that messages are not translated ===&lt;br /&gt;
* A4. &lt;br /&gt;
This messages warn you about the labels that you need to put in your i18n/YourProyectName-labels_en.properties.&lt;br /&gt;
Developer can avoid this messages putting the next line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i18nWarnings=false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in the file properties/xava.properties of your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.5 Example TestCase ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class ExampleTest extends ModuleTestBase { &lt;br /&gt;
 &lt;br /&gt;
  public DepartmentsTest(String testName) { &lt;br /&gt;
  &lt;br /&gt;
  super(testName,&amp;quot;ExampleManager&amp;quot;, &amp;quot;ExampleModlue&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  public void testCreateReadUpdateDelete() throws Exception { &lt;br /&gt;
  &lt;br /&gt;
    //Test Create&lt;br /&gt;
    execute(&amp;quot;CRUD.new&amp;quot;);&lt;br /&gt;
    setValue(&amp;quot;id&amp;quot;, &amp;quot;ENG&amp;quot;);&lt;br /&gt;
    setValue(&amp;quot;name&amp;quot;, &amp;quot;Example Name&amp;quot;);&lt;br /&gt;
    setValue(&amp;quot;description&amp;quot;, &amp;quot;Example description&amp;quot;);&lt;br /&gt;
    assertNoErrors();&lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.6 How to provide a web API for accessing the OpenXava application? ===&lt;br /&gt;
Just use Web Services.&lt;br /&gt;
The OpenXava applications are standard Java Web applications, therefore you can use any Java API from your OpenXava application.&lt;br /&gt;
&lt;br /&gt;
In this case you can create a simple Java class, with the services of you application that you want to expose. &lt;br /&gt;
And use from it MapFacade or the model objects generated by OpenXava, or whatever code of your application you want. &lt;br /&gt;
Something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class MyService {&lt;br /&gt;
&lt;br /&gt;
  public Address getCustomerAddress(String customerId) throws Exception {&lt;br /&gt;
    // Here you use the POJOs generated by OpenXava&lt;br /&gt;
    Customer customer = (Customer) Customer.findById(customerId);&lt;br /&gt;
    return customer.getAddress();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can create a Web Service from MyService class using AXIS, or the wizard included in Eclipse WTP.&lt;br /&gt;
But, remember, all this is a Java issue, not an OpenXava one.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.7 Magic numbers ===&lt;br /&gt;
It is possible to define some magic numbers in OX? &lt;br /&gt;
The Environment Variables are not enough. I want to use the magic numbers in components.&lt;br /&gt;
* A7. Use standard techniques for Java and XML.&lt;br /&gt;
In Java you can use &amp;quot;public final static&amp;quot; variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class MyMagicNumbers {&lt;br /&gt;
  public final static int MY_MAGIC = 24324;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In XML you can use XML ENTITIES:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!ENTITY mymagic &amp;quot;24324&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then use &amp;amp;mymagic; instead of 34324.&lt;br /&gt;
&lt;br /&gt;
These techniques are not from OpenXava but from Java and XML.&lt;br /&gt;
&lt;br /&gt;
In XML you can use @mymagic@, and the filter of OpenXava ant build &lt;br /&gt;
changes it from a value of your properties file. This allows you&lt;br /&gt;
to have a different value of @mymagic@ for each customer or configuration.&lt;br /&gt;
This is a technique from OpenXava.&lt;br /&gt;
&lt;br /&gt;
=== Hint for Defining Oracle View ===&lt;br /&gt;
 * [sf.net post http://adempiere.svn.sourceforge.net/adempiere/?rev=11270&amp;amp;view=rev]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-'CO',  --mrp.docstatus,&lt;br /&gt;
+CAST('CO' AS nvarchar2(2)),  --mrp.docstatus,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q.8 How to access EJB from OpenXava ===&lt;br /&gt;
* Reference Guide section 3.14. &lt;br /&gt;
&lt;br /&gt;
* There is a example of using a EJB inside validator.&lt;br /&gt;
&lt;br /&gt;
* Developer can access EJB code in any part of OpenXava applications, for example: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Delivery delivery = DeliveryUtil.getHome().findByNumber(33);&lt;br /&gt;
delivery.generateInvoice();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.9 Access rights depending on the user profile ===&lt;br /&gt;
* [http://sourceforge.net/forum/message.php?msg_id=3973596 sf.net thread]&lt;br /&gt;
* User should only see fields or to execute actions depending on his user profile (or role).&lt;br /&gt;
* Certain users to be able to update certain fields while others may only read them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 1. Option - provided by the container portal ====&lt;br /&gt;
*Create two groups of users: &lt;br /&gt;
** First with create-delete-edit rights.&lt;br /&gt;
** Second only with read rights.&lt;br /&gt;
&lt;br /&gt;
* Define two modules(portlets):&lt;br /&gt;
** First  with CRUD controller.&lt;br /&gt;
** Second with Print controller.&lt;br /&gt;
The admin may assign First or Second module (portlet) for each group of users with the portal administrative tools.&lt;br /&gt;
&lt;br /&gt;
==== 2. Option ====&lt;br /&gt;
Not completly implemented in OpenXava, but there are some useful tools in OX that can help: &lt;br /&gt;
* Users.getCurrent() return the current user if application is started in portal. This value may be used in any point of the code. &lt;br /&gt;
 &lt;br /&gt;
* Filters: filters the data displayed in the mode list according to the current user. &lt;br /&gt;
 &lt;br /&gt;
A full management of users in OX project implies creation of several modules for storing the info about users, interfaces for change rights and create new users, roles and rights, overwrite standard controllers, to write new actions (typically &amp;quot;save&amp;quot; action, frequently &amp;quot;new&amp;quot; action too), to write specific validator, to write filters for tabs in list mode, and more...  &lt;br /&gt;
 &lt;br /&gt;
Javier's opinion: I think that part of this stuff can be moved to a new project, instead of be included in OX core. This new project would manage access rights and user profiles, and will be reusable for other projects.&lt;br /&gt;
&lt;br /&gt;
==== Links ====&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Acegi_Security_for_Liferay Acegi Security for Liferay]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Custom_redirect_after_login Custom redirect after login]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.10 Property displayed as Radio button ===&lt;br /&gt;
* Existing test case: CustomerWithRadioButtons&lt;br /&gt;
* Section 4.7 of reference guide shows how editors are full configurable in OpenXava.&lt;br /&gt;
* /components/SomeComponent.xml file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;entity&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;gender&amp;quot; &amp;gt;&lt;br /&gt;
	&amp;lt;valid-values&amp;gt;&lt;br /&gt;
		&amp;lt;valid-value value=&amp;quot;Male&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;valid-value value=&amp;quot;Female&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/valid-values&amp;gt;&lt;br /&gt;
  &amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/entity&amp;gt;&lt;br /&gt;
&amp;lt;view&amp;gt;&lt;br /&gt;
  &amp;lt;property-view property=&amp;quot;gender&amp;quot; editor=&amp;quot;ValidValuesRadioButton&amp;quot;&amp;gt;&amp;lt;/property-view&amp;gt;&lt;br /&gt;
  &amp;lt;members &amp;gt;&lt;br /&gt;
    name;&lt;br /&gt;
    gender;&lt;br /&gt;
  &amp;lt;/members &amp;gt;&lt;br /&gt;
&amp;lt;view&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* OpenXava/xava/default-editors.xml contains definition of: &lt;br /&gt;
** ValidValuesRadioButton&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor name=&amp;quot;ValidValuesRadioButton&amp;quot; url=&amp;quot;radioButtonEditor.jsp&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;property name=&amp;quot;horizontal&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/editor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** ValidValuesVerticalRadioButton&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor name=&amp;quot;ValidValuesVerticalRadioButton&amp;quot;&lt;br /&gt;
	url=&amp;quot;radioButtonEditor.jsp&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;property name=&amp;quot;horizontal&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/editor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** ValidValuesHorizontalRadioButton&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor name=&amp;quot;ValidValuesHorizontalRadioButton&amp;quot;&lt;br /&gt;
	url=&amp;quot;radioButtonEditor.jsp&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;property name=&amp;quot;horizontal&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/editor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It looks both last have the same value for horizontal request parameter &amp;lt;property name=&amp;quot;horizontal&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;.&lt;br /&gt;
Probably this is a mistake.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.11 OpenXava design ===&lt;br /&gt;
* All model classes implement org.openxava.model.IModel interface:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Interface to be implemented by all model classes. &amp;lt;p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * The model classes may be EntityBeans EJB 2 or POJOs (for JDO, EJB3 or Hibernate).&lt;br /&gt;
 * &lt;br /&gt;
 * @author Javier Paniza&lt;br /&gt;
 */&lt;br /&gt;
public interface IModel {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns metadata about object. &amp;lt;p&amp;gt;&lt;br /&gt;
	 * &lt;br /&gt;
	 * @return  Not null.&lt;br /&gt;
	 * @exception XavaException  Any problem related to OpenXava.&lt;br /&gt;
	 * @exception RemoteException  System problem.&lt;br /&gt;
	 */&lt;br /&gt;
	MetaModel getMetaModel() throws XavaException, RemoteException;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.12 How to get logger ===&lt;br /&gt;
OpenXava uses [http://commons.apache.org/logging/ Apache Commons Loggin]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
private static Log log = LogFactory.getLog(Users.class);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.13 Using the &amp;lt;transient&amp;gt; tag ===&lt;br /&gt;
Section 4.10 of Reference guide says:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;put &amp;lt;transient/&amp;gt; at the end of the component definition (1), just in the part for the mappings&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Make sure you write the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE component SYSTEM &amp;quot;dtds/component.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;YourComponent&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;entity&amp;gt;&lt;br /&gt;
         ...&lt;br /&gt;
     &amp;lt;/entity&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
     &amp;lt;transient/&amp;gt;   &amp;lt;!--If you put it anywhere else you will see error in the&lt;br /&gt;
document--&amp;gt;&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.14 Search criteria customization in List mode ===&lt;br /&gt;
Requirement: The user writes his search criteria (Type employee salary for example) and then presses the search button.&lt;br /&gt;
&lt;br /&gt;
Create a module that start in detail mode.&lt;br /&gt;
Use a view that show just the data for filtering.&lt;br /&gt;
&lt;br /&gt;
Define a controller with your &amp;quot;Search&amp;quot; actions, and in this action change to list mode.&lt;br /&gt;
&lt;br /&gt;
In this way you can achieve your goal.&lt;br /&gt;
&lt;br /&gt;
Read the chapters 7 and 8 of Reference Guide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.15 How to change Action view from link to button? ===&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1807009&amp;amp;forum_id=419690 link to sf.net post] sf.net thread contains explanation and initial modifications.&lt;br /&gt;
&lt;br /&gt;
1. Create a new property called 'buttonsForNoImageActions' (or so), for use in xava.properties.&lt;br /&gt;
&lt;br /&gt;
2. Add the property in the class [http://www.gestion400.com/OpenXavaDoc/apidocs/org/openxava/util/XavaPreferences.html XavaPreferences].&lt;br /&gt;
&lt;br /&gt;
3. Modify the class [http://www.gestion400.com/OpenXavaDoc/apidocs/org/openxava/web/taglib/ActionTag.html ActionTag].&lt;br /&gt;
&lt;br /&gt;
By default, buttonsForNoImageActions must be 'false', in order to not change the current OX behavior (by default).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Temporary solution.&lt;br /&gt;
Change actionEditor.jsp&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- &amp;lt;xava:link action=&amp;quot;&amp;lt;%=p.getAction()%&amp;gt;&amp;quot;/&amp;gt; &lt;br /&gt;
+ &amp;lt;xava:button action=&amp;quot;&amp;lt;%=p.getAction()%&amp;gt;&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.16 How to open/goto custom jsp? ===&lt;br /&gt;
DECLARATIVE jsp navigation, as following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;action name=&amp;quot;goToMyJSP&amp;quot; class=&amp;quot;org.openxava.actions.NavigationAction&amp;quot;&amp;gt;				&lt;br /&gt;
  &amp;lt;set property=&amp;quot;customView&amp;quot; value=&amp;quot;mypage.jsp&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;set property=&amp;quot;nextController&amp;quot; value=&amp;quot;MyController&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/action&amp;gt;				&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In general, action classes can be made reusable, and can be configured in controllers.xml. In this way  can do more configuration and less programming.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.17 How to make a property as a NOT persistent or view only field in the entity element? ===&lt;br /&gt;
Yes, it's possible.&lt;br /&gt;
&lt;br /&gt;
Two options:&lt;br /&gt;
&lt;br /&gt;
==== Option 1. Calculated properties (section 3.8.4 of reference guide) ====&lt;br /&gt;
It is possible to use qualified properties!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Engagement&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;property name=&amp;quot;cmpContactName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;60&amp;quot; &amp;gt;&lt;br /&gt;
	&amp;lt;calculator class=&amp;quot;org.openxava.calculators.StringCalculator&amp;quot; &amp;gt; &lt;br /&gt;
		&amp;lt;set property=&amp;quot;string&amp;quot; from=&amp;quot;cmpContact.compName.custCompName&amp;quot;/&amp;gt; &lt;br /&gt;
	&amp;lt;/calculator&amp;gt;&lt;br /&gt;
&amp;lt;/property&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No need to create special Calculator!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Engagement&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;property name=&amp;quot;cmpContactName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;60&amp;quot; &amp;gt;&lt;br /&gt;
	&amp;lt;calculator class=&amp;quot;bg.d3soft.openxava.calculators.CompanyContactNameCalculator&amp;quot; &amp;gt;&lt;br /&gt;
	&amp;lt;/calculator&amp;gt;&lt;br /&gt;
&amp;lt;/property--&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Option 2. View properties (section 4.5 of reference guide) ====&lt;br /&gt;
View properties are used for the case that you want to have something editable in the view, but you do not want to save it in DB.&lt;br /&gt;
View properties do not have same functionality as properties. That's why this behavior is normal.&lt;br /&gt;
For some reason view property do not show the same result:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;view&amp;gt;&lt;br /&gt;
	&amp;lt;property name=&amp;quot;cmpContactName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;60&amp;quot; &amp;gt;&lt;br /&gt;
		&amp;lt;calculator class=&amp;quot;org.openxava.calculators.StringCalculator&amp;quot; &amp;gt; &lt;br /&gt;
			&amp;lt;set property=&amp;quot;string&amp;quot; from=&amp;quot;cmpContact.compName.custCompName&amp;quot;/&amp;gt; &lt;br /&gt;
		&amp;lt;/calculator&amp;gt;&lt;br /&gt;
	&amp;lt;/property&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/view&amp;gt;&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.18 How to implement Wizard form ===&lt;br /&gt;
First consider seriously to use a single view with several sections. This is more flexible in most cases and easy to implement with OpenXava.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
Your action for navigate must implements IChangeControllersAction, this allows you to change the actions to show in each page, and using&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getView().setViewName( ... );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
inside execute() of your action,  you can change the view in each step.&lt;br /&gt;
&lt;br /&gt;
Look at the Reference Guide and OpenXavaTest for IChangeControllersAction, and also for INavigationAction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.19 How to forward to a JSP ===&lt;br /&gt;
Action obtains two values which are important for the JSP.&lt;br /&gt;
&lt;br /&gt;
Create a IForwardAction with a code like: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
public String getForwardURI() { &lt;br /&gt;
    return &amp;quot;/mypage.jsp?a=&amp;quot; + getA() + &amp;quot;&amp;amp;b=&amp;quot; + getB(); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And put mypage.jsp in the 'web' folder of your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.20 How to change order of error messages? ===&lt;br /&gt;
&lt;br /&gt;
Method 'validate' of MapFacadeBean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
private void validate(Messages errors, MetaModel metaModel, Map values, Map&lt;br /&gt;
keyValues, Object containerKey, boolean creating)&lt;br /&gt;
		throws XavaException, RemoteException {		&lt;br /&gt;
		Iterator it = values.entrySet().iterator();		&lt;br /&gt;
		while (it.hasNext()) {&lt;br /&gt;
			Map.Entry en = (Map.Entry) it.next();&lt;br /&gt;
			String name = (String) en.getKey();&lt;br /&gt;
			Object value = en.getValue();&lt;br /&gt;
			validate(errors, metaModel, name, value, creating);&lt;br /&gt;
		}&lt;br /&gt;
		if (metaModel.containsValidadors()) {&lt;br /&gt;
			validateWithModelValidator(errors, metaModel, values, keyValues,&lt;br /&gt;
 containerKey,&lt;br /&gt;
creating);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the loop is over entrySet of a Map, hence the order is unknown. You can modify this method in order to work by the correct order, some method of MetaModel returns the member names&lt;br /&gt;
in order of declaration.&lt;br /&gt;
&lt;br /&gt;
=== Q.21 How to disable the icon in the corner most column in column arrangement view? ===&lt;br /&gt;
&lt;br /&gt;
Modify list.jsp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.22 How to open custom JSP view in a pop up window? ===&lt;br /&gt;
Is it possible to open custom JSP view in a pop up window?&lt;br /&gt;
&lt;br /&gt;
No. The custom JSP must be inside the module.&lt;br /&gt;
Use IForwardAction that has a method (inNewWindow()) for create a pop up windows.&lt;br /&gt;
You can put your JSP in a public folder, and send the parameters for this jsp using OX session objects.&lt;br /&gt;
&lt;br /&gt;
=== Q.23 How to hide/show view section depending on user rights? ===&lt;br /&gt;
Some users must be able to see given section from the view while other users must NOT be able to see this section.&lt;br /&gt;
&lt;br /&gt;
At the moment developer can hide (using View.setHidden) members and groups, but not sections. &lt;br /&gt;
 &lt;br /&gt;
There are 4 (at least) options: &lt;br /&gt;
* Use OpenXava/src/org.openxava.view.View.setSectionEditable.&lt;br /&gt;
* Put your sensible data in a group, and hide/show it.&lt;br /&gt;
* Create 2 views (one with the critical section, another without it).&lt;br /&gt;
* Modify OpenXava to allow to hide programatically sections.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Which class should change view or hide section?&lt;br /&gt;
&lt;br /&gt;
** SEARCH_ACTION and 'new' Action are good places.&lt;br /&gt;
** Other options as in an on-each-request action, or an on-init action.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* Guide how to develop option 4?&lt;br /&gt;
** Look at OpenXava/src/org.openxava.view.View.setHidden method.&lt;br /&gt;
&lt;br /&gt;
=== Q.24 How to display only label in view? ===&lt;br /&gt;
Use a property of the view with stereotype LABEL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;view&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;selectLabel&amp;quot; stereotype=&amp;quot;LABEL&amp;quot; type=&amp;quot;String&amp;quot; &amp;gt;&lt;br /&gt;
  &amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;members&amp;gt;&lt;br /&gt;
     selectLabel;&lt;br /&gt;
     a;&lt;br /&gt;
     b;&lt;br /&gt;
  &amp;lt;/members&amp;gt;&lt;br /&gt;
&amp;lt;/view&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File Application_en.properties must contain translation of property:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
selectLabel=Select at least one:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another option may be to have a property with no content and 'Select at least one:' as label.&lt;br /&gt;
&lt;br /&gt;
File: xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version = &amp;quot;1.0&amp;quot; encoding = &amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE editors SYSTEM &amp;quot;dtds/editors.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;editors&amp;gt;&lt;br /&gt;
	&amp;lt;editor url=&amp;quot;void.jsp&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;for-stereotype stereotype=&amp;quot;VOID&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/editor&amp;gt;&lt;br /&gt;
&amp;lt;/editors&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create empty file: web/xava/editors/void.jsp&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Difference is only in stereotype:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;view&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;selectLabel&amp;quot; stereotype=&amp;quot;VOID&amp;quot; type=&amp;quot;String&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;members&amp;gt;&lt;br /&gt;
     selectLabel;&lt;br /&gt;
     a;&lt;br /&gt;
     b;&lt;br /&gt;
  &amp;lt;/members&amp;gt;&lt;br /&gt;
&amp;lt;/view&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.25 How to make property required from Action? ===&lt;br /&gt;
Make a property 'X' required depending on the value of other property 'A'.&lt;br /&gt;
If property 'A' has value 111 than property 'X' must became required. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;property-view property=&amp;quot;A&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;on-change class=&amp;quot;bg.d3soft.openxava.actions.OnChangeA&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/property-view&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use a validator for property X (reference guide 3.8.6), and inject in the validator the property A (using &amp;lt;set /&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* Use a model level validator (section 3.16). &lt;br /&gt;
 &lt;br /&gt;
You cannot change the state of a property from 'required' to 'not required' at runtime (well, you can, but you shouldn't), because required is a feature of the model, not of a view. &lt;br /&gt;
You can access to the MetaModel at runtime and change the value of required, but if you do it in this way the value will be change for all modules, and all users at the same time, because you are modifying the meta data of the model.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.26 How to display property of a reference? ===&lt;br /&gt;
View properties are used for the case that you want to have something editable in the view, but you do not want to save it in DB.&lt;br /&gt;
&lt;br /&gt;
* If property must be read only than use a calculated property.&lt;br /&gt;
&lt;br /&gt;
* If property must be editable than:&lt;br /&gt;
Use a property of the view, populate it in the code in SEARCH_ACTION, and save its content in your own Save action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.27 How to add EMAIL stereotype and validation class ===&lt;br /&gt;
Will be part of OpenXava 2.2.3! [https://sourceforge.net/forum/message.php?msg_id=4506845 sf.net post]&lt;br /&gt;
&lt;br /&gt;
1) Add to Application/xava/default-size.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for-stereotype name=&amp;quot;EMAIL&amp;quot; size=&amp;quot;50&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Add to Application/xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor url=&amp;quot;textEditor.jsp&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;for-stereotype stereotype=&amp;quot;EMAIL&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/editor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Add to Application/xava/stereotype-type-default.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for stereotype=&amp;quot;EMAIL&amp;quot; type=&amp;quot;String&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Add to Application/i18n/messages_en.properties file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
email_validation_error={0} must be a valid email address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Validation class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.openxava.validators;&lt;br /&gt;
&lt;br /&gt;
import org.openxava.util.*;&lt;br /&gt;
import org.openxava.validators.IPropertyValidator;&lt;br /&gt;
import java.util.regex.Pattern;&lt;br /&gt;
import java.util.regex.Matcher;&lt;br /&gt;
&lt;br /&gt;
public class EmailValidator implements IPropertyValidator {&lt;br /&gt;
&lt;br /&gt;
    Pattern pat=Pattern.compile(&amp;quot;.+@.+\\.[a-z]+&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    public void validate(Messages errors, Object value, String propertyName,&lt;br /&gt;
String modelName) throws Exception {&lt;br /&gt;
&lt;br /&gt;
        if (value == null || value.toString().length() ==0 ) return;&lt;br /&gt;
        Matcher matcher = pat.matcher(value.toString());&lt;br /&gt;
        if (! matcher.find()) {&lt;br /&gt;
           errors.add(&amp;quot;email_validation_error&amp;quot;, propertyName);&lt;br /&gt;
           return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5.1) Second version of Validator class using Apache Commons validator&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.apache.commons.validator.GenericValidator;&lt;br /&gt;
import org.openxava.util.Messages;&lt;br /&gt;
import org.openxava.validators.IPropertyValidator;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
public class EmailValidator implements IPropertyValidator {&lt;br /&gt;
&lt;br /&gt;
    public void validate(Messages errors, Object value, String propertyName, String modelName) throws Exception {&lt;br /&gt;
&lt;br /&gt;
        if (value == null || value.toString().length() == 0) &lt;br /&gt;
          return;&lt;br /&gt;
&lt;br /&gt;
        if (! GenericValidator.isEmail(value.toString())) {&lt;br /&gt;
            errors.add(&amp;quot;email_validation_error&amp;quot;, propertyName);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.28 How to translate OpenXava ===&lt;br /&gt;
For example to Bulgarian (bg).&lt;br /&gt;
&lt;br /&gt;
* Copy OpenXava/i18n/Labels_en.properties to OpenXava/i18n/Labels_bg.properties.&lt;br /&gt;
* Copy OpenXava/i18n/Messages_en.properties to OpenXava/i18n/Messages_bg.properties.&lt;br /&gt;
&lt;br /&gt;
Translate Labels_bg.properties and Messages_bg.properties!&lt;br /&gt;
&lt;br /&gt;
Thread which can be useful:&lt;br /&gt;
[http://sourceforge.net/forum/forum.php?thread_id=1804922&amp;amp;forum_id=419690 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.29 How to translate application based on OpenXava ===&lt;br /&gt;
For example to Bulgarian (bg).&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;ApplictionName&amp;gt;/i18n/Labels_en.properties to &amp;lt;ApplictionName&amp;gt;/i18n/Labels_bg.properties.&lt;br /&gt;
* Copy &amp;lt;ApplictionName&amp;gt;/i18n/Messages_en.properties to &amp;lt;ApplictionName&amp;gt;/i18n/Messages_bg.properties.&lt;br /&gt;
&lt;br /&gt;
Translate Labels_bg.properties and Messages_bg.properties!&lt;br /&gt;
&lt;br /&gt;
Thread which can be useful:&lt;br /&gt;
[http://sourceforge.net/forum/forum.php?thread_id=1804922&amp;amp;forum_id=419690 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.30 How to add PASSWORD stereotype ===&lt;br /&gt;
1) Create new file in Application/web/xava/editors/passwordEditor.jsp&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ page import=&amp;quot;org.openxava.model.meta.MetaProperty&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%@ page import=&amp;quot;org.openxava.util.Strings&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%@ page import=&amp;quot;org.openxava.util.Align&amp;quot; %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;jsp:useBean id=&amp;quot;style&amp;quot; class=&amp;quot;org.openxava.web.style.Style&amp;quot; scope=&amp;quot;request&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
String propertyKey = request.getParameter(&amp;quot;propertyKey&amp;quot;);&lt;br /&gt;
MetaProperty p = (MetaProperty) request.getAttribute(propertyKey);&lt;br /&gt;
String fvalue = (String) request.getAttribute(propertyKey + &amp;quot;.fvalue&amp;quot;);&lt;br /&gt;
String align = p.isNumber()?&amp;quot;style='text-align:right'&amp;quot;:&amp;quot;&amp;quot;;&lt;br /&gt;
boolean editable=&amp;quot;true&amp;quot;.equals(request.getParameter(&amp;quot;editable&amp;quot;));&lt;br /&gt;
String disabled=editable?&amp;quot;&amp;quot;:&amp;quot;disabled&amp;quot;;&lt;br /&gt;
String script = request.getParameter(&amp;quot;script&amp;quot;);&lt;br /&gt;
boolean label = org.openxava.util.XavaPreferences.getInstance().isReadOnlyAsLabel();&lt;br /&gt;
String smaxSize = request.getParameter(&amp;quot;maxSize&amp;quot;);&lt;br /&gt;
int maxSize = 0;&lt;br /&gt;
if (!org.openxava.util.Is.emptyString(smaxSize)) {&lt;br /&gt;
	maxSize = Integer.parseInt(smaxSize);&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
	maxSize = org.openxava.util.XavaPreferences.getInstance().getMaxSizeForTextEditor();&lt;br /&gt;
}&lt;br /&gt;
int size = p.getSize() &amp;gt; maxSize ? maxSize : p.getSize(); &lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
boolean fillWithZeros = &amp;quot;true&amp;quot;.equals(request.getParameter(&amp;quot;fillWithZeros&amp;quot;));&lt;br /&gt;
if (fillWithZeros &amp;amp;&amp;amp; fvalue.length() &amp;gt; 0) {	&lt;br /&gt;
	fvalue = Strings.fix(fvalue, size, Align.RIGHT, '0');&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
if (editable || !label) {&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;input name=&amp;quot;&amp;lt;%=propertyKey%&amp;gt;&amp;quot; class=&amp;lt;%=style.getEditor()%&amp;gt;&lt;br /&gt;
	type=&amp;quot;password&amp;quot; &lt;br /&gt;
	title=&amp;quot;&amp;lt;%=p.getDescription(request)%&amp;gt;&amp;quot;&lt;br /&gt;
	&amp;lt;%=align%&amp;gt;&lt;br /&gt;
	maxlength=&amp;quot;&amp;lt;%=p.getSize()%&amp;gt;&amp;quot; &lt;br /&gt;
	size=&amp;quot;&amp;lt;%=size%&amp;gt;&amp;quot; &lt;br /&gt;
	value=&amp;quot;&amp;lt;%=Strings.change(fvalue, &amp;quot;\&amp;quot;&amp;quot;, &amp;quot;&amp;amp;quot;&amp;quot;)%&amp;gt;&amp;quot;&lt;br /&gt;
	&amp;lt;%=disabled%&amp;gt;&lt;br /&gt;
	&amp;lt;%=script%&amp;gt;&lt;br /&gt;
	/&amp;gt;&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
} else {&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;%=fvalue%&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
}&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;% if (!editable) { %&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;&amp;lt;%=propertyKey%&amp;gt;&amp;quot; value=&amp;quot;&amp;lt;%=fvalue%&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;% } %&amp;gt;			&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Add to Application/xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor url=&amp;quot;passwordEditor.jsp&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;for-stereotype stereotype=&amp;quot;PASSWORD&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/editor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Add to Application/xava/Stereotype-type-default.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for stereotype=&amp;quot;PASSWORD&amp;quot; type=&amp;quot;String&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Example usage Application/components/Employee.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Employee&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;entity&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;property name=&amp;quot;empPassword&amp;quot; stereotype=&amp;quot;PASSWORD&amp;quot; size=&amp;quot;20&amp;quot; required=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.31 How to develop import functionality ===&lt;br /&gt;
1) Create new file in Application/web/xava/editors/loadCSVFile.jsp&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%@ include file=&amp;quot;../imports.jsp&amp;quot;%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;jsp:useBean id=&amp;quot;style&amp;quot; class=&amp;quot;org.openxava.web.style.Style&amp;quot; scope=&amp;quot;request&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th align='left' class=&amp;quot;&amp;lt;%=style.getLabel()%&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xava:message key=&amp;quot;enter_new_csv_file&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input name = &amp;quot;newCsvFile&amp;quot; class=&amp;lt;%=style.getEditor()%&amp;gt; type=&amp;quot;file&amp;quot; size='60'/&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Add new class to Application/src/bg/d3soft/openxava/actions/LoadCSVFileAction.java&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package bg.d3soft.openxava.actions;&lt;br /&gt;
&lt;br /&gt;
import org.openxava.actions.BaseAction;&lt;br /&gt;
import org.openxava.actions.ILoadFileAction;&lt;br /&gt;
&lt;br /&gt;
public class LoadCSVFileAction extends BaseAction implements ILoadFileAction {&lt;br /&gt;
	&lt;br /&gt;
	private String newCsvFileProperty;	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	public void execute() throws Exception {&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public String[] getNextControllers() {&lt;br /&gt;
		return new String [] { &amp;quot;ImportCSVFile&amp;quot; };&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public String getCustomView() {&lt;br /&gt;
		return &amp;quot;xava/editors/loadCSVFile&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public boolean isLoadFile() {&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public String getNewCsvFileProperty() {&lt;br /&gt;
		return newCsvFileProperty;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setewCsvFileProperty(String string) {&lt;br /&gt;
		newCsvFileProperty = string;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Add new class to Application/src/bg/d3soft/openxava/actions/ImportCsvFileAction.java&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package bg.d3soft.openxava.actions;&lt;br /&gt;
&lt;br /&gt;
public class ImportCsvFileAction extends BaseAction implements INavigationAction, IProcessLoadedFileAction {&lt;br /&gt;
	&lt;br /&gt;
	private static Log log = LogFactory.getLog(ImportCsvFileAction.class);&lt;br /&gt;
	&lt;br /&gt;
	private List fileItems;&lt;br /&gt;
	&lt;br /&gt;
	private View view;&lt;br /&gt;
	&lt;br /&gt;
	private String newCsvFileProperty;&lt;br /&gt;
	&lt;br /&gt;
	public void execute() throws Exception {		&lt;br /&gt;
		Iterator i = getFileItems().iterator();&lt;br /&gt;
		while (i.hasNext()) {&lt;br /&gt;
			FileItem fi = (FileItem)i.next();&lt;br /&gt;
			String fileName = fi.getName();&lt;br /&gt;
			log.info(&amp;quot;fileName = [&amp;quot; + fileName + &amp;quot;]&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			if (!Is.emptyString(fileName)) {&lt;br /&gt;
				//getView().setValue(getNewCsvFileProperty(), fi.get());&lt;br /&gt;
				log.info(&amp;quot;getNewCsvFileProperty = [&amp;quot; + getNewCsvFileProperty() + &amp;quot;]&amp;quot;);&lt;br /&gt;
				log.info(&amp;quot;fi.getSize() = [&amp;quot; + fi.getSize() + &amp;quot;]&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
				ImportUtil impUtil = new ImportUtil();&lt;br /&gt;
				impUtil.importCustomerCompanyFromCSV(fi);&lt;br /&gt;
			}			&lt;br /&gt;
		}		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public String[] getNextControllers() {		&lt;br /&gt;
		return DEFAULT_CONTROLLERS;&lt;br /&gt;
	}&lt;br /&gt;
	public String getCustomView() {		&lt;br /&gt;
		return DEFAULT_VIEW;&lt;br /&gt;
	}&lt;br /&gt;
	public View getView() {&lt;br /&gt;
		return view;&lt;br /&gt;
	}&lt;br /&gt;
	public void setView(View view) {&lt;br /&gt;
		this.view = view;&lt;br /&gt;
	}&lt;br /&gt;
	public String getNewCsvFileProperty() {&lt;br /&gt;
		return newCsvFileProperty;&lt;br /&gt;
	}&lt;br /&gt;
	public void setNewCsvFileProperty(String string) {&lt;br /&gt;
		newCsvFileProperty = string;	&lt;br /&gt;
	}&lt;br /&gt;
	public List getFileItems() {&lt;br /&gt;
		return fileItems;&lt;br /&gt;
	}&lt;br /&gt;
	public void setFileItems(List fileItems) {&lt;br /&gt;
		this.fileItems = fileItems;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Add to Application/i18n/Application-labels_en.properties&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadCSVFile=Import CSV File&lt;br /&gt;
importCSVFile=Import CSV File&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Add to Application/i18n/Application-messages_en.properties&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enter_new_csv_file=Enter CSV File&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6) Add new class to Application/src/bg/d3soft/openxava/actions/LoadCSVFileAction.java&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7) Add to Application/xava/controllers.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version = &amp;quot;1.0&amp;quot; encoding = &amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE controllers SYSTEM &amp;quot;dtds/controllers.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controllers&amp;gt; &lt;br /&gt;
...	&lt;br /&gt;
	&amp;lt;object name=&amp;quot;xava_newCsvFileProperty&amp;quot; class=&amp;quot;java.lang.String&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
	&amp;lt;controller name=&amp;quot;LoadCSVFile&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;action name=&amp;quot;loadCSVFile&amp;quot;&lt;br /&gt;
			class=&amp;quot;bg.d3soft.openxava.actions.LoadCSVFileAction&amp;quot;&lt;br /&gt;
			hidden=&amp;quot;false&amp;quot;&lt;br /&gt;
			mode=&amp;quot;detail&amp;quot;&lt;br /&gt;
			image=&amp;quot;images/db_update.png&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
			&amp;lt;!-- set value=&amp;quot;&amp;quot; property=&amp;quot;&amp;quot;/--&amp;gt;&lt;br /&gt;
			&amp;lt;!-- use-object name=&amp;quot;xava_newCsvFileProperty&amp;quot;/--&amp;gt;&lt;br /&gt;
		&amp;lt;/action&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
	&amp;lt;/controller&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;controller name=&amp;quot;ImportCSVFile&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;action name=&amp;quot;importCSVFile&amp;quot;&lt;br /&gt;
			class=&amp;quot;bg.d3soft.openxava.actions.ImportCsvFileAction&amp;quot;&lt;br /&gt;
			hidden=&amp;quot;false&amp;quot;&lt;br /&gt;
			mode=&amp;quot;detail&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
			&amp;lt;use-object name=&amp;quot;xava_view&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;use-object name=&amp;quot;xava_newCsvFileProperty&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/action&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;action name=&amp;quot;cancel&amp;quot;&lt;br /&gt;
			class=&amp;quot;org.openxava.actions.CancelAction&amp;quot;&amp;gt;			&lt;br /&gt;
		&amp;lt;/action&amp;gt;&lt;br /&gt;
	&amp;lt;/controller&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/controllers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8) Add to Application/web/xava/images/db_update.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9) Example usage Application/xava/application.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
	&amp;lt;module name=&amp;quot;CustomerCompanies&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;model name=&amp;quot;CustomerCompany&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;controller name=&amp;quot;TypicalNotResetOnSave&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;controller name=&amp;quot;LoadCSVFile&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/module&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10) Example csv file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Date Created&amp;quot;,&amp;quot;Name&amp;quot;,&amp;quot;Web Address&amp;quot;,&amp;quot;Corp Location&amp;quot;&lt;br /&gt;
&amp;quot;ERROR&amp;quot;,&amp;quot;CustCompName-5&amp;quot;,&amp;quot;www.web005.com&amp;quot;,&amp;quot;Corp. location-5&amp;quot;&lt;br /&gt;
&amp;quot;ERROR&amp;quot;,&amp;quot;CustCompName-6&amp;quot;,&amp;quot;www.web006.com&amp;quot;,&amp;quot;Corp. location-6&amp;quot;&lt;br /&gt;
&amp;quot;ERROR&amp;quot;,&amp;quot;CustCompName-7&amp;quot;,&amp;quot;www.web007.com&amp;quot;,&amp;quot;Corp. Location-7&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.32 How to create formatter for java.util.Date ===&lt;br /&gt;
==== Option A - Create your own formatter (IFormatter) =====&lt;br /&gt;
Create your own formatter (IFormatter) and assign it to the java.util.Date type in editors.xml of your project.&lt;br /&gt;
&lt;br /&gt;
OpenXava version 2.2.2&lt;br /&gt;
OpenXavaTest/xava/editors&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor name=&amp;quot;DateCalendar&amp;quot; url=&amp;quot;dateCalendarEditor.jsp&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;formatter class=&amp;quot;org.openxava.formatters.DateFormatter&amp;quot; /&amp;gt; &lt;br /&gt;
  &amp;lt;for-type type=&amp;quot;java.util.Date&amp;quot; /&amp;gt; &lt;br /&gt;
&amp;lt;/editor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Option B - Modify DateFormatter (and DateTimeFormatter) of OpenXava ====&lt;br /&gt;
Look at DateFormatter (and DateTimeFormatter) of OpenXava.&lt;br /&gt;
They are tuned for work better for Spanish and Polish.&lt;br /&gt;
&lt;br /&gt;
Changes in the DateFormatter and in the DateTimeFormatter.&lt;br /&gt;
&lt;br /&gt;
In DateFormater added:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
private static DateFormat germanDateFormat = new SimpleDateFormat(&amp;quot;dd.MM.yyyy&amp;quot;); // modified&lt;br /&gt;
private static DateFormat spanishDateFormat = new SimpleDateFormat(&amp;quot;dd/MM/yyyy&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
private static DateFormat [] spanishDateFormats = {&lt;br /&gt;
	spanishDateFormat,&lt;br /&gt;
	germanDateFormat, // modified&lt;br /&gt;
	new SimpleDateFormat(&amp;quot;ddMMyyyy&amp;quot;),&lt;br /&gt;
	new SimpleDateFormat(&amp;quot;dd.MM.yyyy&amp;quot;),		&lt;br /&gt;
};	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In method getDateFormat(HttpServletRequest request)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (&amp;quot;de&amp;quot;.equals(request.getLocale().getLanguage())) return germanDateFormat; // modified&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In DateTimeFormatter added:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
private static DateFormat germanDateFormat = new  SimpleDateFormat(&amp;quot;dd.MM.yyyy&amp;quot;); //modified&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the method getDateFormat(HttpServletRequest request)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (&amp;quot;de&amp;quot;.equals(request.getLocale().getLanguage())) return germanDateFormat; // modified&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
full source code of Formatter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.text.*;&lt;br /&gt;
&lt;br /&gt;
import javax.servlet.http.*;&lt;br /&gt;
&lt;br /&gt;
import org.openxava.util.*;&lt;br /&gt;
import org.openxava.formatters.*;&lt;br /&gt;
&lt;br /&gt;
public class GermanDateFormatter implements IFormatter {&lt;br /&gt;
	&lt;br /&gt;
	private static DateFormat germanDateFormat = new SimpleDateFormat(&amp;quot;dd.MM.yyyy&amp;quot;);&lt;br /&gt;
	private static DateFormat spanishDateFormat = new SimpleDateFormat(&amp;quot;dd/MM/yyyy&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	private static DateFormat [] spanishDateFormats = {&lt;br /&gt;
		spanishDateFormat,&lt;br /&gt;
		germanDateFormat,   &lt;br /&gt;
		new SimpleDateFormat(&amp;quot;ddMMyyyy&amp;quot;),&lt;br /&gt;
		new SimpleDateFormat(&amp;quot;dd.MM.yyyy&amp;quot;),		&lt;br /&gt;
	};	&lt;br /&gt;
	&lt;br /&gt;
	public String format(HttpServletRequest request, Object date) {&lt;br /&gt;
		if (date == null) return &amp;quot;&amp;quot;;&lt;br /&gt;
		if (Dates.getYear((java.util.Date)date) &amp;lt; 2) return &amp;quot;&amp;quot;;&lt;br /&gt;
		return getDateFormat(request).format(date);&lt;br /&gt;
	}&lt;br /&gt;
		&lt;br /&gt;
	public Object parse(HttpServletRequest request, String string) throws ParseException&lt;br /&gt;
{&lt;br /&gt;
		if (Is.emptyString(string)) return null;&lt;br /&gt;
		if (string.indexOf('-') &amp;gt;= 0) { // SimpleDateFormat does not work well with -&lt;br /&gt;
			string = Strings.change(string, &amp;quot;-&amp;quot;, &amp;quot;/&amp;quot;);&lt;br /&gt;
		}		&lt;br /&gt;
		DateFormat [] dateFormats = getDateFormats(request); &lt;br /&gt;
		for (int i=0; i&amp;lt;dateFormats.length; i++) {&lt;br /&gt;
			try {&lt;br /&gt;
				return dateFormats[i].parseObject(string);&lt;br /&gt;
			}&lt;br /&gt;
			catch (ParseException ex) {&lt;br /&gt;
			}						&lt;br /&gt;
		}&lt;br /&gt;
		throw new ParseException(XavaResources.getString(&amp;quot;bad_date_format&amp;quot;,string),-1);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private DateFormat getDateFormat(HttpServletRequest request) {&lt;br /&gt;
		if (&amp;quot;de&amp;quot;.equals(request.getLocale().getLanguage())) &lt;br /&gt;
                  return germanDateFormat;&lt;br /&gt;
		if (&amp;quot;es&amp;quot;.equals(request.getLocale().getLanguage()) ||&lt;br /&gt;
		    &amp;quot;pl&amp;quot;.equals(request.getLocale().getLanguage())&lt;br /&gt;
                ) &lt;br /&gt;
                  return spanishDateFormat;&lt;br /&gt;
		return DateFormat.getDateInstance(DateFormat.SHORT, request.getLocale());		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private DateFormat[] getDateFormats(HttpServletRequest request) {&lt;br /&gt;
		if (&amp;quot;es&amp;quot;.equals(request.getLocale().getLanguage()) ||&lt;br /&gt;
                    &amp;quot;de&amp;quot;.equals(request.getLocale().getLanguage()) ||&lt;br /&gt;
		    &amp;quot;pl&amp;quot;.equals(request.getLocale().getLanguage())&lt;br /&gt;
                ) &lt;br /&gt;
                  return spanishDateFormats;&lt;br /&gt;
		return new DateFormat [] { getDateFormat(request) };&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.33 Possible properties in Application/properties/xava.properties ===&lt;br /&gt;
Java class responsible for loading xava.properties: org.openxava.util.XavaPreferences&lt;br /&gt;
&lt;br /&gt;
Since version &amp;gt; 2.2.2.&lt;br /&gt;
&lt;br /&gt;
User can hide/show the filter part on init in list and collections.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
showFilterByDefaultInList=true&lt;br /&gt;
showFilterByDefaultInCollections=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since version 2.2.1.&lt;br /&gt;
&lt;br /&gt;
Users.getCurrent() returns the user email instead of the user id inside a portal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
emailAsUserNameInPortal=true|false(false)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
readOnlyAsLabel=true|false(false)&lt;br /&gt;
tabAsEJB=true|false(false)&lt;br /&gt;
showCountInList=true|false(true)  - avoid the initial select count(*) in the model list. It takes time when number of rows is big.&lt;br /&gt;
formLineSpacing=integer(1)&lt;br /&gt;
csvSeparator=character(;)&lt;br /&gt;
persistenceProviderClass=String(org.openxava.model.impl.HibernatePersistenceProvider)org.openxava.model.impl.EJBPersistenceProvider&lt;br /&gt;
mapFacadeAsEJB=true|false(false)&lt;br /&gt;
detailOnBottomInCollections=true|false(false)&lt;br /&gt;
jpaCodeInPOJOs=&lt;br /&gt;
i18nWarnings=true|false(true)&lt;br /&gt;
duplicateComponentWarnings=true|false(true)&lt;br /&gt;
failOnAnnotationMisuse=true|false(true)&lt;br /&gt;
maxSizeForTextEditorinteger(100)&lt;br /&gt;
javaLoggingLevel=String(INFO);FINEST|INFO&lt;br /&gt;
hibernateJavaLoggingLevel=String(INFO);FINEST|INFO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How to access Xava Properties from jsp file? ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
boolean label = org.openxava.util.XavaPreferences.getInstance().isReadOnlyAsLabel();&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.34 How to add WEBURL stereotype and validation class ===&lt;br /&gt;
Will be part of OpenXava 2.2.3! [https://sourceforge.net/forum/message.php?msg_id=4506845 sf.net post]&lt;br /&gt;
&lt;br /&gt;
1) Add to Application/xava/default-size.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for-stereotype name=&amp;quot;WEBURL&amp;quot; size=&amp;quot;50&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add to Application/xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor url=&amp;quot;textEditor.jsp&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;for-stereotype stereotype=&amp;quot;WEBURL&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/editor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Add to Application/xava/stereotype-type-default.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for stereotype=&amp;quot;WEBURL&amp;quot; type=&amp;quot;String&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Add to Application/i18n/messages_en.properties file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
url_validation_error={0} must be a valid url&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Validation class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.openxava.util.*;&lt;br /&gt;
import org.openxava.validators.IPropertyValidator;&lt;br /&gt;
import org.apache.commons.validator.UrlValidator;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
public class URLValidator implements IPropertyValidator {&lt;br /&gt;
&lt;br /&gt;
    UrlValidator urlValidator = new UrlValidator();&lt;br /&gt;
&lt;br /&gt;
    public void validate(Messages errors, Object value, String propertyName, String modelName) throws Exception {&lt;br /&gt;
&lt;br /&gt;
        if (value == null || value.toString().length() == 0 ) &lt;br /&gt;
          return;&lt;br /&gt;
&lt;br /&gt;
        if ( !urlValidator.isValid(value.toString()) ) {&lt;br /&gt;
          errors.add(&amp;quot;url_validation_error&amp;quot;, propertyName);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add following jar files&lt;br /&gt;
&lt;br /&gt;
A) jakarta-oro-2.0.8.jar &lt;br /&gt;
http://jakarta.apache.org/site/downloads/downloads_oro.cgi?Preferred=http%3A%2F%2Fgovernment-grants.org%2Fmirrors%2Fapache.org&lt;br /&gt;
&lt;br /&gt;
B) commons-validator-1.3.1.jar&lt;br /&gt;
http://commons.apache.org/downloads/download_validator.cgi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.35 How to add TELEPHONE stereotype and validation class ===&lt;br /&gt;
Will be part of OpenXava 2.2.3! [https://sourceforge.net/forum/message.php?msg_id=4506845 sf.net post]&lt;br /&gt;
&lt;br /&gt;
1) Add to Application/xava/default-size.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for-stereotype name=&amp;quot;TELEPHONE&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add to Application/xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor url=&amp;quot;textEditor.jsp&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;for-stereotype stereotype=&amp;quot;TELEPHONE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/editor&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Add to Application/xava/stereotype-type-default.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for stereotype=&amp;quot;TELEPHONE&amp;quot; type=&amp;quot;String&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Add to Application/i18n/messages_en.properties file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
phone_valid_number_error= {0} must be a valid number&lt;br /&gt;
phone_minimum_size_error= {0} must be at least  {2} {1} long&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Validation class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.openxava.validators;&lt;br /&gt;
&lt;br /&gt;
import org.openxava.util.*;&lt;br /&gt;
import org.openxava.validators.IPropertyValidator;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
public class PhoneNumberValidator implements IPropertyValidator {&lt;br /&gt;
    private long minSize = 8;&lt;br /&gt;
    private Long phoneNumber;&lt;br /&gt;
&lt;br /&gt;
    public void validate(Messages errors, Object value, String propertyName, String modelName) throws Exception {&lt;br /&gt;
&lt;br /&gt;
        if (value == null || value.toString().length() ==0 ) &lt;br /&gt;
          return;&lt;br /&gt;
&lt;br /&gt;
        //Check if input is a number&lt;br /&gt;
        try {&lt;br /&gt;
          phoneNumber = new  Long(value.toString());&lt;br /&gt;
        } catch(NumberFormatException ex){&lt;br /&gt;
           errors.add(&amp;quot;phone_valid_number_error&amp;quot;, propertyName);&lt;br /&gt;
           return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //Check if input length is at least greater than specified minimum length&lt;br /&gt;
        if ( phoneNumber.toString().length() &amp;lt; minSize) {&lt;br /&gt;
            errors.add(&amp;quot;phone_minimum_size_error&amp;quot;, propertyName, &amp;quot;digits&amp;quot;, new Long(minSize));&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public long getMinSize() {&lt;br /&gt;
        return minSize;&lt;br /&gt;
    }&lt;br /&gt;
    public void setMinSize(long minSize) {&lt;br /&gt;
        this.minSize= minSize;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.36 How to hide field/property ===&lt;br /&gt;
Section 3.8 of Reference Guide: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A hidden property has a meaning for the developer but not for the user.&lt;br /&gt;
The hidden properties are excluded when the automatic user interface is generated. &lt;br /&gt;
However at Java code level they are present and fully functional. &lt;br /&gt;
Even if you put it explicitly into a view the property will be shown in the user interface.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Hidden property is used mainly for hidden keys, but if you put the property in the view, the property will be show.&lt;br /&gt;
&lt;br /&gt;
Example code:&lt;br /&gt;
&lt;br /&gt;
When the user click 'Others' from languages combo box, the Others text field should be displayed.&lt;br /&gt;
Entity part:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!-- The Combo box --&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;languages&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;valid-values&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;valid-value value=&amp;quot;English&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;valid-value value=&amp;quot;Others&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/valid-values&amp;gt; &lt;br /&gt;
&amp;lt;/property&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Others property:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;otherLanguages&amp;quot; hidden=&amp;quot;true&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
View part:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;property-view property=&amp;quot;languages&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;on-change class=&amp;quot;com.sami.actions.OnLanguagesChange&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/property-view&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'OnLanguagesChange' action:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
getView().setHidden(&amp;quot;otherLanguages&amp;quot;, false);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The action is perfect, when user choose the Others from the combo box, the Others text field displayed, but the problem is, that Others text field displayed when user request the form always (On the initial view).&lt;br /&gt;
 &lt;br /&gt;
Can not hide properties in the initial view, when user click any action the hidden properties disappear?!&lt;br /&gt;
&lt;br /&gt;
The solution in this case is to refine the 'new' action and the 'search' action to hide the 'otherLanguage' property.&lt;br /&gt;
But, before, try to define your module in this way: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;module name=&amp;quot;YourModule&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;env-var name=&amp;quot;XAVA_SEARCH_ACTION&amp;quot; value=&amp;quot;CRUD.searchExecutingOnChange&amp;quot;/&amp;gt; &lt;br /&gt;
... &lt;br /&gt;
&amp;lt;/module&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Look at section 7.6 of reference guide !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.37 How to set rows count in tab ===&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1640350&amp;amp;forum_id=419690 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.38 How to separate translations for each portlet ===&lt;br /&gt;
* [https://sourceforge.net/forum/forum.php?thread_id=1609526&amp;amp;forum_id=419690 sf.net post]&lt;br /&gt;
Source file which handle this: org.openxava.util.Labels&lt;br /&gt;
&lt;br /&gt;
For properties in tabs, in i18n file (assuming there are ComponentFoo and ComponentBar, both with references to Example Component) &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ComponentFoo.tab.properties.example.description=Example foo &lt;br /&gt;
ComponentBar.tab.properties.example.description=Example bar &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For properties in detail mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ComnponentFoo.view.level=Level Foo &lt;br /&gt;
ComnponentBar.view.level=Level Bar &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For properties which are part of view:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# CustomerContact tab inside Engagement&lt;br /&gt;
CustomerContact.views.CustomerContact.custName=Customer Name&lt;br /&gt;
CustomerContact.views.CustomerContact.custName[description]=Customer Name&lt;br /&gt;
CustomerContact.views.&amp;lt;View Name Here&amp;gt;.custName[description]=Customer Name&lt;br /&gt;
&lt;br /&gt;
CustomerContact.tab.properties.custName=Customer Name&lt;br /&gt;
CustomerContact.tab.properties.custName[description]=Customer Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.39 How to create custom JasperReport which uses JDBC connection to DB ===&lt;br /&gt;
* [http://sourceforge.net/forum/message.php?msg_id=3715755 sf.net forum post]&lt;br /&gt;
&lt;br /&gt;
Need returning null in the method getDataSource() of your JasperReport action (derived from JasperReportBaseAction).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class EngagementReportAction extends JasperReportBaseAction {&lt;br /&gt;
...&lt;br /&gt;
protected JRDataSource getDataSource() throws Exception {&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.40 Since version 2.2.1 Calendar overlaps with Main Horizontal line of Portal ===&lt;br /&gt;
* [https://sourceforge.net/forum/forum.php?thread_id=1832154&amp;amp;forum_id=419690 sf.net post]&lt;br /&gt;
&lt;br /&gt;
In order to change this behavior modify file OpenXava/web/script.jsp&lt;br /&gt;
Old line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
97:   _dynarch_popupCalendar.showAtElement(el.nextSibling, &amp;quot;Br&amp;quot;);        // show the calendar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
New line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
97:   _dynarch_popupCalendar.showAtElement(el.nextSibling, &amp;quot;tr&amp;quot;);        // show the calendar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;tr&amp;quot; is need for IE6, for working fine when date fields are at the bottom of the page.&lt;br /&gt;
Will be available in OX2.2.3&lt;br /&gt;
Correct one is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;% &lt;br /&gt;
  // Date fields at end of the windows is not shown correctly in IE6,&lt;br /&gt;
  // hence, we align at top in IE6, and at botton in other browsers.&lt;br /&gt;
  String browser = request.getHeader(&amp;quot;user-agent&amp;quot;);&lt;br /&gt;
  String calendarAlign = browser != null &amp;amp;&amp;amp; browser.indexOf(&amp;quot;MSIE 6&amp;quot;) &amp;gt;= 0 ? &amp;quot;tr&amp;quot; : &amp;quot;Br&amp;quot;;  &lt;br /&gt;
  %&amp;gt;&lt;br /&gt;
  _dynarch_popupCalendar.showAtElement(el.nextSibling, &amp;quot;&amp;lt;%=calendarAlign%&amp;gt;&amp;quot;); // show the calendar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.41 How to filter by property of Reference? ===&lt;br /&gt;
All fields by which developer wants to make filtering MUST be described in 'properties' tag!&lt;br /&gt;
&lt;br /&gt;
Example code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;tab&amp;gt;&lt;br /&gt;
	&amp;lt;filter class=&amp;quot;bg.d3soft.openxava.filters.UserFilter&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;properties&amp;gt;custCrtdBy, engDealMkr.empLogonID, rptProMng.empLogonID&amp;lt;/properties&amp;gt;&lt;br /&gt;
	&amp;lt;base-condition&amp;gt;${custCrtdBy} = ? or ${engDealMkr.empLogonID} = ? or ${rptProMng.empLogonID} = ?&amp;lt;/base-condition&amp;gt;&lt;br /&gt;
	...&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.42 How to display confirmation message? ===&lt;br /&gt;
Confirmation message can be shown using the 'confirm' attribute of &amp;lt;action /&amp;gt; element in controllers.xml. &lt;br /&gt;
Section 7.3 of reference guide.&lt;br /&gt;
&lt;br /&gt;
This is a generic feature that can be applied to any action that show a JavaScript dialog to confirm the action. &lt;br /&gt;
Given that it's generic (not only for list mode), it cannot revise if some item is selected (or any other condition). &lt;br /&gt;
It simply ask before action to be execute.&lt;br /&gt;
&lt;br /&gt;
A solution can be to define your list action using confirm=false, and then create your logic that move to other controller for confirmation before execute your definitive action, in this way you can control exactly your logic, but you will lost the agility of using a JavaScript dialog.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.43 Openxava and Cross Site Scripting (XSS)? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4583744]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.44 How to use Identity Column? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4584145 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Identity must be declared in DB as an auto increment column.&lt;br /&gt;
&lt;br /&gt;
Hibernate will create proper DB script.&lt;br /&gt;
When updateSchema Ant target is executed( on OpenXava project which uses hibernate), it will generates the correct SQL script. For example, if you are using AS/400 dialect, hibernate &lt;br /&gt;
will generate a line like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If in your OX componentes you write:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;number&amp;quot; type=&amp;quot;Integer&amp;quot; key=&amp;quot;true&amp;quot; size=&amp;quot;5&amp;quot; required=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.IdentityCalculator&amp;quot;&lt;br /&gt;
on-create=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenXava generates a .hbm.xml with the next content:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;id name=&amp;quot;number&amp;quot; column=&amp;quot;NUMBER&amp;quot; access=&amp;quot;field&amp;quot; type='java.lang.Integer'&lt;br /&gt;
 length='5'&amp;gt;&lt;br /&gt;
	&amp;lt;generator class='identity'/&amp;gt;&lt;br /&gt;
&amp;lt;/id&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.45 How to add IP stereotype and validation class ===&lt;br /&gt;
Will be part of OpenXava 2.2.4!&lt;br /&gt;
&lt;br /&gt;
[https://sourceforge.net/forum/message.php?msg_id=4506845 sf.net post]&lt;br /&gt;
&lt;br /&gt;
1) Add to Application/xava/default-size.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for-stereotype name=&amp;quot;IP&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add to Application/xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor url=&amp;quot;textEditor.jsp&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;for-stereotype stereotype=&amp;quot;IP&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/editor&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Add to Application/xava/stereotype-type-default.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for stereotype=&amp;quot;IP&amp;quot; type=&amp;quot;String&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Add to Application/i18n/messages_en.properties file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip_validation_error={0} must be a valid IP address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Validation class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.openxava.validators;&lt;br /&gt;
&lt;br /&gt;
import org.openxava.validators.IPropertyValidator;&lt;br /&gt;
import org.openxava.util.Messages;&lt;br /&gt;
import org.apache.commons.validator.GenericValidator;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
public class IPValidator implements IPropertyValidator {&lt;br /&gt;
&lt;br /&gt;
    public void validate(Messages errors, Object value, String propertyName,&lt;br /&gt;
String modelName) throws Exception &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
        String numberRegExp = &amp;quot;(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)&amp;quot;;&lt;br /&gt;
        String ipRegExp = &amp;quot;\\b&amp;quot; + numberRegExp + &amp;quot;\\.&amp;quot; + numberRegExp + &amp;quot;\\.&amp;quot; +  numberRegExp +&amp;quot;\\.&amp;quot; + numberRegExp + &amp;quot;\\b&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        if (value == null || value.toString().length() == 0) return;&lt;br /&gt;
&lt;br /&gt;
        if (! GenericValidator.matchRegexp(value.toString(), ipRegExp)) {&lt;br /&gt;
            errors.add(&amp;quot;invalid_ip_error&amp;quot;, propertyName);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.46 How to add Reachable IP stereotype and validation class ===&lt;br /&gt;
Will be part of OpenXava 2.2.4 and 3.0beta5!&lt;br /&gt;
&lt;br /&gt;
[https://sourceforge.net/forum/message.php?msg_id=4506845 sf.net post]&lt;br /&gt;
&lt;br /&gt;
1) Add to Application/xava/default-size.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for-stereotype name=&amp;quot;IP&amp;quot; size=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add to Application/xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor url=&amp;quot;textEditor.jsp&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;for-stereotype stereotype=&amp;quot;IP&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/editor&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Add to Application/xava/stereotype-type-default.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for stereotype=&amp;quot;IP&amp;quot; type=&amp;quot;String&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Add to Application/i18n/messages_en.properties file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip_not_reachable={0} is Not Reachable&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Validation class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.openxava.validators;&lt;br /&gt;
&lt;br /&gt;
import org.openxava.validators.IPropertyValidator;&lt;br /&gt;
import org.openxava.util.Messages;&lt;br /&gt;
import org.apache.commons.validator.GenericValidator;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
public class IPValidator implements IPropertyValidator {&lt;br /&gt;
&lt;br /&gt;
    public void validate(Messages errors, Object value, String propertyName,&lt;br /&gt;
String modelName) throws Exception &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
        if (value == null || value.toString().length() == 0) return;&lt;br /&gt;
&lt;br /&gt;
        /*String address = &amp;quot;192.168.0.60&amp;quot;;&lt;br /&gt;
        InetAddress addr = InetAddress.getByName( value );&lt;br /&gt;
        boolean isValidAddress = addr.isReachable(myTimeout);&lt;br /&gt;
        System.out.println(&amp;quot; Reachable &amp;quot; + isValidAddress);*/&lt;br /&gt;
        if (! GenericValidator.matchRegexp(value.toString(), ipRegExp)) {&lt;br /&gt;
            errors.add(&amp;quot;ip_not_reachable&amp;quot;, propertyName);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q.47 How to avoid Warnings during Generate Portlet ant task? ===&lt;br /&gt;
Will be included in OX2.2.4!&lt;br /&gt;
&lt;br /&gt;
Go to OpenXava/build.xml, and examine the target &amp;quot;generatePortletXml&amp;quot; ant task.&lt;br /&gt;
It looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;classpath&amp;gt; &lt;br /&gt;
	&amp;lt;pathelement path=&amp;quot;../OpenXava/bin&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;fileset dir=&amp;quot;../OpenXava/web/WEB-INF/lib&amp;quot;&amp;gt; &lt;br /&gt;
		&amp;lt;include name=&amp;quot;**/*.jar&amp;quot;/&amp;gt; &lt;br /&gt;
	&amp;lt;/fileset&amp;gt; &lt;br /&gt;
	&amp;lt;fileset dir=&amp;quot;web/WEB-INF/lib&amp;quot;&amp;gt; &lt;br /&gt;
		&amp;lt;include name=&amp;quot;**/*.jar&amp;quot;/&amp;gt;		&lt;br /&gt;
	&amp;lt;/fileset&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/classpath&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because we include ../OpenXava/bin and web/WEB-INF/lib that contains openxava.jar, the default-controllers.xml is duplicated in the path, then you get the warning.&lt;br /&gt;
&lt;br /&gt;
Solution is just to exclude the openxava.jar from the classpath.&lt;br /&gt;
Modify the build.xml of your OpenXava project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;classpath&amp;gt; &lt;br /&gt;
	&amp;lt;pathelement path=&amp;quot;../OpenXava/bin&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;fileset dir=&amp;quot;../OpenXava/web/WEB-INF/lib&amp;quot;&amp;gt; &lt;br /&gt;
		&amp;lt;include name=&amp;quot;**/*.jar&amp;quot;/&amp;gt; &lt;br /&gt;
	&amp;lt;/fileset&amp;gt; &lt;br /&gt;
	&amp;lt;fileset dir=&amp;quot;web/WEB-INF/lib&amp;quot;&amp;gt; &lt;br /&gt;
		&amp;lt;include name=&amp;quot;**/*.jar&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;exclude name=&amp;quot;openxava.jar&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/fileset&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/classpath&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.48 How to add ISBN stereotype and validation class ===&lt;br /&gt;
Will be part of OpenXava 2.2.4 and 3.0beta5!&lt;br /&gt;
&lt;br /&gt;
[https://sourceforge.net/forum/message.php?msg_id=4633525 sf.net post]&lt;br /&gt;
&lt;br /&gt;
1) Add to Application/xava/default-size.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for-stereotype name=&amp;quot;ISBN&amp;quot; size=&amp;quot;13&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add to Application/xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor url=&amp;quot;textEditor.jsp&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;for-stereotype stereotype=&amp;quot;ISBN&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/editor&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Add to Application/xava/stereotype-type-default.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for stereotype=&amp;quot;ISBN&amp;quot; type=&amp;quot;String&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Add to Application/i18n/messages_en.properties file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
isbn_validation_error={0} must be a valid ISBN address&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Validation class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.openxava.validators; &lt;br /&gt;
 &lt;br /&gt;
import org.openxava.validators.IPropertyValidator;&lt;br /&gt;
import org.openxava.util.Messages;&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
public class ISBNValidator implements IPropertyValidator {&lt;br /&gt;
&lt;br /&gt;
    private  org.apache.commons.validator.ISBNValidator validator = new org.apache.commons.validator.ISBNValidator();&lt;br /&gt;
&lt;br /&gt;
    public void validate(Messages errors, Object value, String propertyName, String modelName) throws Exception {&lt;br /&gt;
&lt;br /&gt;
        if (value == null || value.toString().length() ==0 ) return;&lt;br /&gt;
&lt;br /&gt;
        if (! validator.isValid(value.toString())) {&lt;br /&gt;
           errors.add(&amp;quot;isbn_validation_error&amp;quot;, propertyName);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q.49 How to add Credit Card stereotype and validation class ===&lt;br /&gt;
Will be part of OpenXava 2.2.4 and 3.0beta5!&lt;br /&gt;
&lt;br /&gt;
[https://sourceforge.net/forum/message.php?msg_id=4644874 sf.net post]&lt;br /&gt;
&lt;br /&gt;
1) Add to Application/xava/default-size.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for-stereotype name=&amp;quot;CREDIT_CARD&amp;quot; size=&amp;quot;19&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add to Application/xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor url=&amp;quot;textEditor.jsp&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;for-stereotype stereotype=&amp;quot;CREDIT_CARD&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/editor&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Add to Application/xava/stereotype-type-default.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for stereotype=&amp;quot;CREDIT_CARD&amp;quot; type=&amp;quot;String&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Add to Application/i18n/messages_en.properties file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
creditcard_validation_error={0} must be a valid Credit card number&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Validation class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.openxava.validators;&lt;br /&gt;
&lt;br /&gt;
import org.openxava.validators.IPropertyValidator;&lt;br /&gt;
import org.openxava.util.Messages;&lt;br /&gt;
import org.apache.commons.validator.GenericValidator;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
public class CreditCardValidator implements IPropertyValidator {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public void validate(Messages errors, Object value, String propertyName, String modelName) throws Exception {&lt;br /&gt;
&lt;br /&gt;
        if (value == null || value.toString().length() == 0) return;&lt;br /&gt;
&lt;br /&gt;
        if (! GenericValidator.isCreditCard(value.toString())) {&lt;br /&gt;
            errors.add(&amp;quot;creditcard_validation_error&amp;quot;, propertyName);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q.50 How to add EMAIL_LIST stereotype and validation class? ===&lt;br /&gt;
Will be part of OpenXava 2.2.4 and 3.0beta5!&lt;br /&gt;
&lt;br /&gt;
[https://sourceforge.net/forum/message.php?msg_id=4661604 sf.net post]&lt;br /&gt;
&lt;br /&gt;
1) Add to Application/xava/default-size.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for-stereotype name=&amp;quot;EMAIL_LIST&amp;quot; size=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add to Application/xava/editors.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editor url=&amp;quot;textEditor.jsp&amp;quot;&amp;gt; &lt;br /&gt;
  &amp;lt;for-stereotype stereotype=&amp;quot;EMAIL_LIST&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/editor&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Add to Application/xava/stereotype-type-default.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;for stereotype=&amp;quot;EMAIL_LIST&amp;quot; type=&amp;quot;String&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Add to Application/i18n/messages_en.properties file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
email_list_validation_error=Email list should contain valid emails separated by commas&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Validation class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.openxava.validators;&lt;br /&gt;
&lt;br /&gt;
import org.openxava.validators.IPropertyValidator;&lt;br /&gt;
import org.openxava.util.Messages;&lt;br /&gt;
&lt;br /&gt;
import org.apache.commons.validator.GenericValidator;&lt;br /&gt;
import java.util.StringTokenizer;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
public class EmailListValidator implements IPropertyValidator {&lt;br /&gt;
&lt;br /&gt;
    public void validate(Messages errors, Object value, String propertyName, String modelName) throws Exception {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        if (value == null || value.toString().length() == 0) &lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        StringTokenizer emailAddresses = new StringTokenizer(value.toString(), &amp;quot;,&amp;quot;);&lt;br /&gt;
        while(emailAddresses.hasMoreTokens()) {&lt;br /&gt;
            if (! GenericValidator.isEmail(emailAddresses.nextToken())) {&lt;br /&gt;
                errors.add(&amp;quot;email_list_validation_error&amp;quot;, propertyName);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q.51 How to save model details when a action is called? ===&lt;br /&gt;
* [http://sourceforge.net/forum/message.php?msg_id=4673734 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Is it possible to save model details when a action is called?&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
An option is to make your action a child of SaveAction, and put the property resetAfter to false. Then you only need to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public void execute() throws Exception {&lt;br /&gt;
  super.execute();&lt;br /&gt;
  // Here the code of you action.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or you can save the data from the view directly using MapFacade.&lt;br /&gt;
&lt;br /&gt;
Look at the code of SaveAction in order to learn how to use MapFacade.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.52 Converter for TIME stereotype. ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4691679 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Will be part of OpenXava 2.2.5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* By default, when you use &amp;quot;TIME&amp;quot; stereotype you want to work with String for manage time data, both at Java level and DB level. This case is: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;mytime&amp;quot; stereotype=&amp;quot;TIME&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If you want to work with java.sql.Time usually you use the Java type directly, and you don't use TIME stereotype. In this way you use java.sql.Time for Java and DB. Code is: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;property name=mytime&amp;quot; type=&amp;quot;java.sql.Time&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* New converter is only for the case that you want to work with String at Java level and with java.sql.Time at DB level:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;mytime&amp;quot; stereotype=&amp;quot;TIME&amp;quot;/&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;property-mapping ... &amp;gt;&lt;br /&gt;
    &amp;lt;converter class=&amp;quot;org.openxava.converters.StringTimeConverter&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/property-mapping&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* New converter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.openxava.converters;&lt;br /&gt;
&lt;br /&gt;
import org.openxava.converters.IConverter;&lt;br /&gt;
import org.openxava.converters.ConversionException;&lt;br /&gt;
&lt;br /&gt;
import java.sql.Time;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * In java a &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt; and in database a&lt;br /&gt;
 * &amp;lt;tt&amp;gt;java.sql.Time&amp;lt;/tt&amp;gt;. &amp;lt;p&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
public class StringTimeConverter implements IConverter {&lt;br /&gt;
&lt;br /&gt;
    private Time time;&lt;br /&gt;
    private String timeStamp;&lt;br /&gt;
&lt;br /&gt;
    public Object toDB(Object o) throws ConversionException {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        if (o == null) return null;&lt;br /&gt;
        if (!(o instanceof String)) {&lt;br /&gt;
            throw new ConversionException(&amp;quot;conversion_db_string_expected&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        timeStamp = o.toString() + &amp;quot;:00&amp;quot;;&lt;br /&gt;
        time = Time.valueOf(timeStamp);&lt;br /&gt;
        return time;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public Object toJava(Object o) throws ConversionException {&lt;br /&gt;
        if (o == null) return null;&lt;br /&gt;
        if (!(o instanceof java.sql.Time)) {&lt;br /&gt;
            throw new ConversionException(&amp;quot;conversion_java_sqltime_expected&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        time = (Time) o;&lt;br /&gt;
        timeStamp = time.toString();&lt;br /&gt;
        timeStamp = timeStamp.substring(0, 5);&lt;br /&gt;
&lt;br /&gt;
        return timeStamp;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.53 How to add a string to description list? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4696866 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Section 4.3.6 of Reference guide.&lt;br /&gt;
&lt;br /&gt;
Is it possible to add text to a description list?&lt;br /&gt;
&lt;br /&gt;
Need to display book title along with Author and separate the variable with  a string (e.g &amp;quot;:&amp;quot; or &amp;quot;by&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;reference-view reference=&amp;quot;book&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;descriptions-list description-properties=&amp;quot;title, author.firstName, author.secondName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/reference-view&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;reference-view reference=&amp;quot;subfamily&amp;quot; create=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- In this case description-property can be omited --&amp;gt;&lt;br /&gt;
	&amp;lt;descriptions-list  &lt;br /&gt;
		description-property=&amp;quot;description&amp;quot; &lt;br /&gt;
		depends=&amp;quot;family&amp;quot;&lt;br /&gt;
		condition=&amp;quot;${family.number} = ?&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/reference-view&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== First suggestion: Use Calculated property ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Book&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;entity&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;property name=&amp;quot;authorFullName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;25&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;calculator class=&amp;quot;org.openxava.calculators.ConcatCalculator&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;set property=&amp;quot;string1&amp;quot; from=&amp;quot;author.firstName&amp;quot;/&amp;gt;				&lt;br /&gt;
		&amp;lt;set property=&amp;quot;separator&amp;quot; value=&amp;quot; &amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;set property=&amp;quot;string2&amp;quot; from=&amp;quot;author.secondName&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/calculator&amp;gt;&lt;br /&gt;
    &amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;property name=&amp;quot;fullTitle&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;60&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;calculator class=&amp;quot;org.openxava.calculators.ConcatCalculator&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;set property=&amp;quot;string1&amp;quot; from=&amp;quot;title&amp;quot;/&amp;gt;				&lt;br /&gt;
		&amp;lt;set property=&amp;quot;separator&amp;quot; value=&amp;quot; by &amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;set property=&amp;quot;string2&amp;quot; from=&amp;quot;authorFullName&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/calculator&amp;gt;&lt;br /&gt;
    &amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/entity&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;component ... &amp;gt;&lt;br /&gt;
  &amp;lt;view&amp;gt;&lt;br /&gt;
    &amp;lt;reference-view reference=&amp;quot;book&amp;quot;&amp;gt; &lt;br /&gt;
      &amp;lt;descriptions-list description-properties=&amp;quot;fullTitle&amp;quot;/&amp;gt; &lt;br /&gt;
    &amp;lt;/reference-view&amp;gt; &lt;br /&gt;
  &amp;lt;/view&amp;gt;&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Second suggestion: Develop new functionality ====&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Way to distinguish properties from strings.&lt;br /&gt;
&lt;br /&gt;
Your way is good, and I think that natural for an OX developer.&lt;br /&gt;
Use other attribute, 'description-message-id'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Guide how to develop new functionality?&lt;br /&gt;
&lt;br /&gt;
The code for concatenating the description of description list is in the class.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
org.openxava.calculators.DescriptionsCalculator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this works, we can consider using 'description-message-id', this will involve to modify the dtd and parser.&lt;br /&gt;
&lt;br /&gt;
==== Third suggestion: New functionality with i18n ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;descriptions-list description-properties=&amp;quot;title, author.firstName, author.secondName&amp;quot; pattern-id=&amp;quot;descriptions_list_book_title&amp;quot;&lt;br /&gt;
/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
And in YourApplication-messages_en.properties you have:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
descriptions_list_book_title={0} by {1} {2} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q.54 How to remove image? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4700916 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Edit imageEditor.jsp, and add a new action to reset the image, inside the below block.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;% if (editable) { %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the action in ImageEditor controller of default-controllers.xml.&lt;br /&gt;
&lt;br /&gt;
Have a look to the code of LoadImageAction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.55 How to modify OpenXava DTD? ===&lt;br /&gt;
&lt;br /&gt;
Add new XML element or xml attribute to below class.&lt;br /&gt;
Java class which holds all dtd element and attribute names is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OpenXava/src/org/openxava/util/xmlparse/XmlElementsNames.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.56 How to add new property to xava.properties file? ===&lt;br /&gt;
&lt;br /&gt;
Edit file: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OpenXava/src/org/openxava/util/XavaPreferences.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Added new method which returns value of new property:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public boolean isMapFacadeAutoCommit() &lt;br /&gt;
{&lt;br /&gt;
    return &amp;quot;true&amp;quot;.equalsIgnoreCase(getProperties().getProperty(&amp;quot;mapFacadeAutoCommit&amp;quot;, &amp;quot;false&amp;quot;).trim());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.57 How to sort reference list with condition? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4722363 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Error is thrown if column in condition is not included in the FROM part.&lt;br /&gt;
&lt;br /&gt;
Because OX uses description-properties to determine which tables must be included in FROM part. &lt;br /&gt;
 &lt;br /&gt;
A simple workaround is to add your property to description properties, in this way: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;reference-view reference=&amp;quot;releasebyQA&amp;quot; frame=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;descriptions-list description-property=&amp;quot;name, designation.department.id&amp;quot; &lt;br /&gt;
                     condition=&amp;quot;${designation.department.id} ='QA'&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/reference-view&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.58 How to create Date Validation class? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4726771 sf.net post]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package org.openxava.validators;&lt;br /&gt;
&lt;br /&gt;
import org.apache.commons.validator.routines.DateValidator;&lt;br /&gt;
import org.openxava.util.Messages;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @author Janesh Kodikara&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
public class XavaDateValidator {&lt;br /&gt;
&lt;br /&gt;
    DateValidator validator;&lt;br /&gt;
&lt;br /&gt;
    public XavaDateValidator() {&lt;br /&gt;
        validator = new DateValidator();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public boolean isSameDate(Date startDate, Date endDate) {&lt;br /&gt;
        boolean isSame = false;&lt;br /&gt;
&lt;br /&gt;
        if (validator.compareDates(startDate, endDate, null) == 0) {&lt;br /&gt;
            isSame = true;&lt;br /&gt;
        }&lt;br /&gt;
        return isSame;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void isSameDate(Messages errors, String startFieldName, Date startDate, String endFieldName, Date endDate) {&lt;br /&gt;
&lt;br /&gt;
        if (startDate == null || endDate == null) return;&lt;br /&gt;
&lt;br /&gt;
        if (validator.compareDates(startDate, endDate, null) == 0) {&lt;br /&gt;
            errors.add(&amp;quot;same_dates_error&amp;quot;, endFieldName, startFieldName);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public boolean isFutureDate(Date value) {&lt;br /&gt;
        boolean isSame = false;&lt;br /&gt;
        Date today = new Date();&lt;br /&gt;
        if (validator.compareDates(value, today, null) &amp;gt; 0) {&lt;br /&gt;
            isSame = true;&lt;br /&gt;
        }&lt;br /&gt;
        return isSame;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void isFutureDate(Messages errors, String fieldName, Date value) {&lt;br /&gt;
        Date today = new Date();&lt;br /&gt;
&lt;br /&gt;
        if (value == null) return;&lt;br /&gt;
&lt;br /&gt;
        if (validator.compareDates(value, today, null) &amp;gt; 0) {&lt;br /&gt;
            errors.add(&amp;quot;date_in_future_error&amp;quot;, fieldName);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public boolean isPastDate(Date value) {&lt;br /&gt;
        boolean isSame = false;&lt;br /&gt;
        Date today = new Date();&lt;br /&gt;
        if (validator.compareDates(value, today, null) &amp;lt; 0) {&lt;br /&gt;
            isSame = true;&lt;br /&gt;
        }&lt;br /&gt;
        return isSame;&lt;br /&gt;
    }&lt;br /&gt;
    public void isPastDate(Messages errors, String fieldName, Date value) {&lt;br /&gt;
        Date today = new Date();&lt;br /&gt;
&lt;br /&gt;
        if (value == null) return;&lt;br /&gt;
&lt;br /&gt;
        if (validator.compareDates(value, today, null) &amp;gt; 0) {&lt;br /&gt;
            errors.add(&amp;quot;past_date_error&amp;quot;, fieldName);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public void isStartDateAfter(Messages errors, String startFieldName, Date startDate, String endFieldName, Date endDate) {&lt;br /&gt;
        if (startDate == null || endDate == null) return;&lt;br /&gt;
&lt;br /&gt;
        if (validator.compareDates(startDate, endDate, null) &amp;gt; 0) {&lt;br /&gt;
            errors.add(&amp;quot;start_date_greater_error&amp;quot;, endFieldName, startFieldName);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.58 How to use OX and bind to a web service layer rather than to a database? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4925407 sf.net post]&lt;br /&gt;
&lt;br /&gt;
OpenXava has a pluggable persistence provider. &lt;br /&gt;
Package org.openxava.model.impl has implementation of EJB CMP2, Hibernate and JPA persistece provider.&lt;br /&gt;
Own persistence provider can be created to save and store the data by custom way.&lt;br /&gt;
&lt;br /&gt;
The only problem is that Tabbular data retrieval is done via JDBC.&lt;br /&gt;
That's why additionally own TabProvider have to be written. For example look at: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
org.openxava.model.tab.impl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.59 How to customize Looks and Feel of OpenXava? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5923652 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Option to create your own way for groups and sections, for entire application or for a concrete entity/view.&lt;br /&gt;
This will be included in some future version (OX3.1.x).&lt;br /&gt;
&lt;br /&gt;
Developer can create his own style (in org.openxava.web.style) and overwrite bellow methods:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getSection(), getSectionTableAttributes(),&lt;br /&gt;
getSectionBarStartDecoration(), getActiveSectionTabStartDecoration(),&lt;br /&gt;
getActiveSectionTabEndDecoration(), getSectionTabStartDecoration(),&lt;br /&gt;
getSectionTabEndDecoration(), getSectionBarEndDecoration(), &lt;br /&gt;
getSectionActive()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Though this is limited, applied to all entities of all applications, and you will lose the portal look &amp;amp; feel adaptation of OX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.60 How to get autogenerated ID after save? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5998728 sf.net post]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public void execute() throws Exception {&lt;br /&gt;
  setResetAfter(false); // In this way the key will be refreshed from saved Entity to View&lt;br /&gt;
  super.execute(); // Save, and after it you have the oid in View&lt;br /&gt;
  id = (String)getView().getKeyValues().get(&amp;quot;id&amp;quot;);  // Now, id has value&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q.60 How to show a web site? How to make editor for a web url? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=6591361 sf.net post]&lt;br /&gt;
Editor for a web url that allows a link to be clicked to show the text's site:&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;myproject&amp;gt;/xava/editors.xml I have added this at the beginning of the file to associate the stereotype “WEBURL” with this specific editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;editors&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;editor name=&amp;quot;WebURL&amp;quot; url=&amp;quot;webUrlEditor.jsp&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;for-stereotype stereotype=&amp;quot;WEBURL&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/editor&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/editors&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Q.61 How to filter record by current user? ===&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7039312 sf.net post]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;controller name=&amp;quot;PreUser&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;action name=&amp;quot;filterByCurrentUserid&amp;quot; hidden=&amp;quot;true&amp;quot; on-init=&amp;quot;true&amp;quot; on-each-request=&amp;quot;true&amp;quot; class=&amp;quot;com.myschool.actions.filterByCurrentUserid&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;use-object name=&amp;quot;xava_mainTab&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;use-object name=&amp;quot;xava_tab&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/action&amp;gt;&lt;br /&gt;
&amp;lt;/controller&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Liferay Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Multiple Instances of Portlet ====&lt;br /&gt;
* [http://liferaylearnings.blogspot.com link]&lt;br /&gt;
&lt;br /&gt;
Portlets which allowed multiple instances to be instantieted in portal.&lt;br /&gt;
Add this tag to the portlet configuration in liferay-portlet-ext.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;instanceable&amp;gt;true&amp;lt;/instanceable&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 How to add new layout ====&lt;br /&gt;
* [http://wiki.liferay.com/index.php?title=Themes_and_Layouts&amp;amp;redirect=no Liferay Themes and Layouts]&lt;br /&gt;
&lt;br /&gt;
Edit file: portal\webapps\ROOT\WEB-INF\liferay-layout-templates-ext.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE layout-templates PUBLIC &amp;quot;-//Liferay//DTD Layout Templates 4.0.0//EN&amp;quot; &amp;quot;http://www.liferay.com/dtd/liferay-layout-templates_4_0_0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;layout-templates&amp;gt;&lt;br /&gt;
	&amp;lt;custom&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;layout-template id=&amp;quot;2_columns_iv&amp;quot; name=&amp;quot;2 Columns (20/80)&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;template-path&amp;gt;/html/layouttpl/custom/2_columns_iv.tpl&amp;lt;/template-path&amp;gt;&lt;br /&gt;
		&amp;lt;/layout-template&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
	&amp;lt;/custom&amp;gt;&lt;br /&gt;
&amp;lt;/layout-templates&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add new file: portal\webapps\ROOT\html\layouttpl\custom\2_columns_iv.tpl&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;layout-content-outer-decoration&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;layout-content-inner-decoration&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;layout-content-container&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;19%&amp;quot;&amp;gt;&lt;br /&gt;
					$processor.processColumn(&amp;quot;column-1&amp;quot;)&lt;br /&gt;
				&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td class=&amp;quot;layout-column-spacer&amp;quot; width=&amp;quot;1%&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;80%&amp;quot;&amp;gt;&lt;br /&gt;
					$processor.processColumn(&amp;quot;column-2&amp;quot;)&lt;br /&gt;
				&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
			&amp;lt;/table&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy new layout!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Hint.3 How to setup Eclipse IDE and Liferay ====&lt;br /&gt;
* [http://www.objectpartners.com/2009/12/18/developing-and-debugging-liferay-plugin-portlets-in-eclipse-%E2%80%93-quickly-even/ Developing and Debugging Liferay Plugin Portlets in Eclipse – Quickly Even!]&lt;br /&gt;
* [http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Fast+Development+of+Liferay+Plugins+with+Tomcat Fast Development of Liferay Plugins with Tomcat]&lt;/div&gt;</description>
			<pubDate>Sun, 31 Jul 2011 08:51:35 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt/Howtos_Hints</comments>		</item>
		<item>
			<title>Testing Servers</title>
			<link>http://www.adempiere.com/Testing_Servers</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Available Testing Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Available Testing Servers==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; margin-right: 10px; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;font-size: 0.86em; line-height: 0.9em;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | URL&lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Database &lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | currently maintainde by&lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Note&lt;br /&gt;
|-&lt;br /&gt;
|'''FUNCTIONAL''' http://asds2.adempiere.de:8080/webui/&lt;br /&gt;
|PostgreSQL-9.0.4&lt;br /&gt;
|[[User:Tobi|Tobi]]&lt;br /&gt;
|rowspan=3|&lt;br /&gt;
*Sponsored by [[ADeV]]&lt;br /&gt;
*Latest integration build of http://adempiere.hg.sourceforge.net:8000/hgroot/adempiere/adempiere&lt;br /&gt;
|-&lt;br /&gt;
|'''FUNCTIONAL''' http://asds3.adempiere.de:8080/webui/&lt;br /&gt;
|Oracle 11gR2 XE beta&lt;br /&gt;
|Dirk Niemeyer&lt;br /&gt;
|-&lt;br /&gt;
|'''PLANNED''' http://asds4.adempiere.de:8080/webui/&lt;br /&gt;
|MySQL-5.1.49&lt;br /&gt;
|[[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Guildlines for setting up and maintaining an ADeV ADempiere testing instance (DRAFT)==&lt;br /&gt;
&lt;br /&gt;
===Reasons for this guidelines===&lt;br /&gt;
&lt;br /&gt;
Testing servers should be set up in a similar way in order to &lt;br /&gt;
*minimize maintenance cost&lt;br /&gt;
*allow different TT members to maintain a particular server, without first having to become an expert for it first&lt;br /&gt;
*allow the rollout from jenkins in a similar manner for all different testing servers&lt;br /&gt;
===General Software===&lt;br /&gt;
&lt;br /&gt;
*The ADeV-Instances run with '''Debian-Squeeze'''.&lt;br /&gt;
*Apart from ADempiere inteself, all packages are installed using Debian's package manager (apt)&lt;br /&gt;
&lt;br /&gt;
===ADempiere===&lt;br /&gt;
&lt;br /&gt;
*There is a dedicated user &amp;quot;adempiere&amp;quot; with /home/adempiere as home directory&lt;br /&gt;
*The ADempiere-Server runs with the privileges of the user adempiere&lt;br /&gt;
*The ADempiere-Server is located in /home/adempiere/server, i.e. ADEMPIERE_HOME=/home/adempiere/server/Adempiere&lt;br /&gt;
*To start and stop the ADempiere-server, the init-script ADEMPIERE_HOME/utils/unix/adempiere_Debian.sh is adapted and installed to /etc/init.d/adempiere&lt;br /&gt;
&lt;br /&gt;
===Rollout and dump scripts===&lt;br /&gt;
&lt;br /&gt;
*To perform the db-reset, rollout, application of migration scripts, and creation of dump, the scripts located at http://adempiere.hg.sourceforge.net/hgweb/adempiere/contribution_adev_ci_rollout/ are used&lt;br /&gt;
*The repository is cloned to /home/adempiere and a softlink points from /home/adempiere/scripts to /home/adempiere/contribution_adev_ci_rollout&lt;br /&gt;
*The scripts are divided into general parts and host specific parts. The host specific parts are located in script files (libraries) named tools.sh in a subdirectory named after the host (e.g. asds2/tools.sh)&lt;br /&gt;
*ADeV provides those scripts, with empty function bodies (unless an implementation already exists). The maintainer of a testing instance is responsible for the actual implementation&lt;br /&gt;
*The AdempiereEnv.properties file to be used for a specific instance needs to be added to the hostname directory (e.g. asds2/AdempiereEnv.properties). It is copied to ADEMPIERE_HOME by the rollout script (general part) during the rollout&lt;br /&gt;
&lt;br /&gt;
===ssh and sudo===&lt;br /&gt;
&lt;br /&gt;
*In order to allow the adempiere user to start and stop adempiere for rollout, the instance must have sudo installed. The instance's sudoers file needs to have these entries&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adempiere ALL=(root)NOPASSWD: /etc/init.d/adempiere start&lt;br /&gt;
adempiere ALL=(root)NOPASSWD: /etc/init.d/adempiere stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*The following public key needs to be placed in the adempiere user's authorized_keys file to allow the jenkins user to log in as adempiere&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNvN11ztbigqSBTftkOvCKDyuoPG9EUVi72j4UZhU0hXcl2Kyve84bwhen1EkZ2u/HbAXwVXcFZ5kL6raH5yC+hxwAjJgs2Xh+LotgpaUMJxwtVHSdgXlSI9tAlr8W+rRrNnehpNdQp88XgY6M52xV8jUJg+i3nsetpFbywFWZFaliBKHNH3t1D/tabyWPQsLVlRLMhCcJYDSrGpjGmT7SZkFybyiXE4+Z/zhlgLabBn/1TAaDvktrpr4OakMee94wTp6ONbgBDuXxb9t0N0eYNL3FjT1ZRga2dft38it5KpYyR5nZbJmMvLyCXImuXtIR1c6XU8ul5GTcfI37p69b jenkins@asds1.adempiere.de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Mon, 06 Jun 2011 17:20:22 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Testing_Servers</comments>		</item>
		<item>
			<title>Testing Servers</title>
			<link>http://www.adempiere.com/Testing_Servers</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Available Testing Servers==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; margin-right: 10px; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;font-size: 0.86em; line-height: 0.9em;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | URL&lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Database &lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | currently maintainde by&lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Note&lt;br /&gt;
|-&lt;br /&gt;
|http://asds2.adempiere.de:8080/webui/&lt;br /&gt;
|PostgreSQL-9.0.4&lt;br /&gt;
|[[User:Tobi|Tobi]]&lt;br /&gt;
|rowspan=3|&lt;br /&gt;
*Sponsored by [[ADeV]]&lt;br /&gt;
*Latest integration build of http://adempiere.hg.sourceforge.net:8000/hgroot/adempiere/adempiere&lt;br /&gt;
|-&lt;br /&gt;
|http://asds3.adempiere.de:8080/webui/&lt;br /&gt;
|Oracle 11gR2 XE beta&lt;br /&gt;
|Dirk Niemeyer&lt;br /&gt;
|-&lt;br /&gt;
|http://asds4.adempiere.de:8080/webui/&lt;br /&gt;
|MySQL-xxx&lt;br /&gt;
|[[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Guildlines for setting up and maintaining an ADeV ADempiere testing instance (DRAFT)==&lt;br /&gt;
&lt;br /&gt;
===Reasons for this guidelines===&lt;br /&gt;
&lt;br /&gt;
Testing servers should be set up in a similar way in order to &lt;br /&gt;
*minimize maintenance cost&lt;br /&gt;
*allow different TT members to maintain a particular server, without first having to become an expert for it first&lt;br /&gt;
*allow the rollout from jenkins in a similar manner for all different testing servers&lt;br /&gt;
===General Software===&lt;br /&gt;
&lt;br /&gt;
*The ADeV-Instances run with '''Debian-Squeeze'''.&lt;br /&gt;
*Apart from ADempiere inteself, all packages are installed using Debian's package manager (apt)&lt;br /&gt;
&lt;br /&gt;
===ADempiere===&lt;br /&gt;
&lt;br /&gt;
*There is a dedicated user &amp;quot;adempiere&amp;quot; with /home/adempiere as home directory&lt;br /&gt;
*The ADempiere-Server runs with the privileges of the user adempiere&lt;br /&gt;
*The ADempiere-Server is located in /home/adempiere/server, i.e. ADEMPIERE_HOME=/home/adempiere/server/Adempiere&lt;br /&gt;
*To start and stop the ADempiere-server, the init-script ADEMPIERE_HOME/utils/unix/adempiere_Debian.sh is adapted and installed to /etc/init.d/adempiere&lt;br /&gt;
&lt;br /&gt;
===Rollout and dump scripts===&lt;br /&gt;
&lt;br /&gt;
*To perform the db-reset, rollout, application of migration scripts, and creation of dump, the scripts located at http://adempiere.hg.sourceforge.net/hgweb/adempiere/contribution_adev_ci_rollout/ are used&lt;br /&gt;
*The repository is cloned to /home/adempiere and a softlink points from /home/adempiere/scripts to /home/adempiere/contribution_adev_ci_rollout&lt;br /&gt;
*The scripts are divided into general parts and host specific parts. The host specific parts are located in script files (libraries) named tools.sh in a subdirectory named after the host (e.g. asds2/tools.sh)&lt;br /&gt;
*ADeV provides those scripts, with empty function bodies (unless an implementation already exists). The maintainer of a testing instance is responsible for the actual implementation&lt;br /&gt;
*The AdempiereEnv.properties file to be used for a specific instance needs to be added to the hostname directory (e.g. asds2/AdempiereEnv.properties). It is copied to ADEMPIERE_HOME by the rollout script (general part) during the rollout&lt;br /&gt;
&lt;br /&gt;
===ssh and sudo===&lt;br /&gt;
&lt;br /&gt;
*In order to allow the adempiere user to start and stop adempiere for rollout, the instance must have sudo installed. The instance's sudoers file needs to have these entries&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adempiere ALL=(root)NOPASSWD: /etc/init.d/adempiere start&lt;br /&gt;
adempiere ALL=(root)NOPASSWD: /etc/init.d/adempiere stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*The following public key needs to be placed in the adempiere user's authorized_keys file to allow the jenkins user to log in as adempiere&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNvN11ztbigqSBTftkOvCKDyuoPG9EUVi72j4UZhU0hXcl2Kyve84bwhen1EkZ2u/HbAXwVXcFZ5kL6raH5yC+hxwAjJgs2Xh+LotgpaUMJxwtVHSdgXlSI9tAlr8W+rRrNnehpNdQp88XgY6M52xV8jUJg+i3nsetpFbywFWZFaliBKHNH3t1D/tabyWPQsLVlRLMhCcJYDSrGpjGmT7SZkFybyiXE4+Z/zhlgLabBn/1TAaDvktrpr4OakMee94wTp6ONbgBDuXxb9t0N0eYNL3FjT1ZRga2dft38it5KpYyR5nZbJmMvLyCXImuXtIR1c6XU8ul5GTcfI37p69b jenkins@asds1.adempiere.de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 02 Jun 2011 05:19:59 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Testing_Servers</comments>		</item>
		<item>
			<title>Testing Servers</title>
			<link>http://www.adempiere.com/Testing_Servers</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Available Testing Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Available Testing Servers==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; margin-right: 10px; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;font-size: 0.86em; line-height: 0.9em;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | URL&lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Database &lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | currently maintainde by&lt;br /&gt;
! style=&amp;quot;color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Note&lt;br /&gt;
|-&lt;br /&gt;
|http://asds2.adempiere.de:8080/webui/&lt;br /&gt;
|PostgreSQL-9.0.4&lt;br /&gt;
|[[User:Tobi|Tobi]]&lt;br /&gt;
|rowspan=3|&lt;br /&gt;
*Sponsored by [[ADeV]]&lt;br /&gt;
*Latest integration build of http://adempiere.hg.sourceforge.net:8000/hgroot/adempiere/adempiere&lt;br /&gt;
|-&lt;br /&gt;
|http://asds3.adempiere.de:8080/webui/&lt;br /&gt;
|Oracle 11gR2 XE beta&lt;br /&gt;
|Dirk Niemeyer&lt;br /&gt;
|-&lt;br /&gt;
|http://asds4.adempiere.de:8080/webui/&lt;br /&gt;
|MySQL-xxx&lt;br /&gt;
|[[User:Trifonnt|Trifon]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Guildlines for setting up and maintaining an ADeV ADempiere testing instance (DRAFT)==&lt;br /&gt;
&lt;br /&gt;
===Reasons for this guidelines===&lt;br /&gt;
&lt;br /&gt;
Testing servers should be set up in a similar way in order to &lt;br /&gt;
*minimize maintenance cost&lt;br /&gt;
*allow different TT members to maintain a particular server, without first having to become an expert for it first&lt;br /&gt;
*allow the rollout from jenkins in a similar manner for all different testing servers&lt;br /&gt;
===General Software===&lt;br /&gt;
&lt;br /&gt;
*The ADeV-Instances run with '''Debian-Squeeze'''.&lt;br /&gt;
*Apart from ADempiere inteself, all packages are installed using Debian's package manager (apt)&lt;br /&gt;
&lt;br /&gt;
===ADempiere===&lt;br /&gt;
&lt;br /&gt;
*There is a dedicated user &amp;quot;adempiere&amp;quot; with /home/adempiere as home directory&lt;br /&gt;
*The ADempiere-Server runs with the privileges of the user adempiere&lt;br /&gt;
*The ADempiere-Server is located in /home/adempiere/server, i.e. ADEMPIERE_HOME=/home/adempiere/server/Adempiere&lt;br /&gt;
*To start and stop the ADempiere-server, the init-script ADEMPIERE_HOME/utils/unix/adempiere_Debian.sh is adapted and installed to /etc/init.d/adempiere&lt;br /&gt;
&lt;br /&gt;
===Rollout and dump scripts===&lt;br /&gt;
&lt;br /&gt;
*To perform the db-reset, rollout, application of migration scripts, and creation of dump, the scripts located at http://adempiere.hg.sourceforge.net/hgweb/adempiere/contribution_adev_ci_rollout/ are used&lt;br /&gt;
*The repository is cloned to /home/adempiere and a softlink points from /home/adempiere/scripts to /home/adempiere/contribution_adev_ci_rollout&lt;br /&gt;
*The scripts are divided into general parts and host specific parts. The host specific parts are located in script files (libraries) named tools.sh in a subdirectory named after the host (e.g. asds2/tools.sh)&lt;br /&gt;
*ADeV provides those scripts, with empty function bodies (unless an implementation already exists). The maintainer of a testing instance is responsible for the actual implementation&lt;br /&gt;
*The AdempiereEnv.properties file to be used for a specific instance needs to be added to the hostname directory (e.g. asds2/AdempiereEnv.properties). It is copied to ADEMPIERE_HOME by the rollout script (general part) during the rollout&lt;br /&gt;
&lt;br /&gt;
===ssh and sudo===&lt;br /&gt;
&lt;br /&gt;
*In order to allow the adempiere user to start and stop adempiere for rollout, the instance must have sudo installed. The instance's sudoers file needs to have these entries&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adempiere ALL=(root)NOPASSWD: /etc/init.d/adempiere start&lt;br /&gt;
adempiere ALL=(root)NOPASSWD: /etc/init.d/adempiere stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*The following public key needs to be placed in the adempiere user's authorized_keys file to allow the jenkins user to log in as adempiere&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNvN11ztbigqSBTftkOvCKDyuoPG9EUVi72j4UZhU0hXcl2Kyve84bwhen1EkZ2u/HbAXwVXcFZ5kL6raH5yC+hxwAjJgs2Xh+LotgpaUMJxwtVHSdgXlSI9tAlr8W+rRrNnehpNdQp88XgY6M52xV8jUJg+i3nsetpFbywFWZFaliBKHNH3t1D/tabyWPQsLVlRLMhCcJYDSrGpjGmT7SZkFybyiXE4+Z/zhlgLabBn/1TAaDvktrpr4OakMee94wTp6ONbgBDuXxb9t0N0eYNL3FjT1ZRga2dft38it5KpYyR5nZbJmMvLyCXImuXtIR1c6XU8ul5GTcfI37p69b jenkins@asds1.adempiere.de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 02 Jun 2011 05:18:46 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Testing_Servers</comments>		</item>
		<item>
			<title>ADempiere World Conference 2011</title>
			<link>http://www.adempiere.com/ADempiere_World_Conference_2011</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Beuth berlin.jpg|thumb]]&lt;br /&gt;
After organizing [[2nd European ADempiere Conference]] in 2009 which followed the [[European ADempiere Conference]] in 2007, [[ADeV|ADempiere e.V. (ADeV)]] invites the community to the next Conference which takes places 2011 in Berlin!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ADempiere World Conference 2011'''&lt;br /&gt;
* 02nd - 04th of September 2011 (Friday - Sunday) &lt;br /&gt;
* University of Beuth in Berlin, Germany (http://www.beuth-hochschule.de/)&lt;br /&gt;
* Agenda (Draft)&lt;br /&gt;
** Community Gathering&lt;br /&gt;
** Workshops / Knowledgetransfer&lt;br /&gt;
** ADeV member meeting (private) ADeV is voting a new board&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Stay tuned for more details!'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Participants==&lt;br /&gt;
Put your name here if you want to come.&lt;br /&gt;
&lt;br /&gt;
#[[User:Mark_o|Mark Ostermann]] ([[metas]])&lt;br /&gt;
#Kai Schaeffer (Schaeffer AG)&lt;br /&gt;
#[[User:Kthiemann|Karsten Thiemann]] (Schaeffer AG)&lt;br /&gt;
#Dirk Niemeyer&lt;br /&gt;
#[[User:nwessel|Norbert Wessel]] ([[metas]])&lt;br /&gt;
#[[User:Teo_sarca|Teo Sarca]] ([[metas]])&lt;br /&gt;
#[[User:tobi | Tobias Schöneberg]] ([[metas]])&lt;br /&gt;
#[[User:MJMcKay|Mike Mckay]]&lt;br /&gt;
#[[User:Kittiu|Kitti U.]]&lt;br /&gt;
#[[User:Wipawiij|Wipawii J.]]&lt;br /&gt;
#Dominik Zajak&lt;br /&gt;
#[[User:Trifonnt|Trifon Trifonov]] (D3 Soft Ltd.)&lt;br /&gt;
#[[User:redchris|Cristina Ghita]] ([[metas]])&lt;br /&gt;
#Mario Calderon (westfalia)&lt;br /&gt;
#Susanne Calderon (westfalia)&lt;br /&gt;
#[[User:MetuX|Marco Koster]] (Metux)&lt;br /&gt;
#[[User:Juddm|Michael Judd]] (Akuna)&lt;br /&gt;
#William Wolfe&lt;br /&gt;
#[[User:MetuX|Peter Sommer]] (Metux)&lt;br /&gt;
&lt;br /&gt;
==Workshops: Call for paper==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Space: Call for ideas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Conference]]&lt;br /&gt;
[[Category:ADempiere World Conference 2011]]&lt;/div&gt;</description>
			<pubDate>Fri, 27 May 2011 13:41:12 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:ADempiere_World_Conference_2011</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* About Me */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me (Yes, i'm one of the founders of ADempiere... so crazy indeed )=&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
* [https://trifonnt.wordpress.com My blog in wordpress.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month.&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Fri, 20 May 2011 14:39:14 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>TT meeting minutes May 19th 2011</title>
			<link>http://www.adempiere.com/TT_meeting_minutes_May_19th_2011</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;Created page with '#General  #*Moderator: None #*Participants: Teo, Tobias, Trifon #Next Meeting #*June, 2nd - 17:00 GMT #*Moderator: Trifon'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#General&lt;br /&gt;
&lt;br /&gt;
#*Moderator: None&lt;br /&gt;
#*Participants: Teo, Tobias, Trifon&lt;br /&gt;
#Next Meeting&lt;br /&gt;
#*June, 2nd - 17:00 GMT&lt;br /&gt;
#*Moderator: Trifon&lt;/div&gt;</description>
			<pubDate>Thu, 19 May 2011 15:39:21 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:TT_meeting_minutes_May_19th_2011</comments>		</item>
		<item>
			<title>Technical Team</title>
			<link>http://www.adempiere.com/Technical_Team</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* 20110324 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Initial Staff ====&lt;br /&gt;
* Teo Sarca&lt;br /&gt;
* Karsten Thiemann&lt;br /&gt;
* Tobias Schöneberg&lt;br /&gt;
* Victor Perez (Maintaining Libero MFG and HR only)&lt;br /&gt;
* [[User:Trifonnt| Trifon Trifonov]]&lt;br /&gt;
* &amp;lt;please add your name when you want to join the team (4 hours minimum work per week)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everybody can become a team member, unless 2/3 of existing members disagree.&lt;br /&gt;
&lt;br /&gt;
==== Responsibilities ====&lt;br /&gt;
As described and voted in the [[Software Development Procedure]]&lt;br /&gt;
* maintains trunk and stabilization branch&lt;br /&gt;
* ensures that all contributions meet technical requirements in respect to quality&lt;br /&gt;
** code is documented&lt;br /&gt;
** backward compatibility is achieved&lt;br /&gt;
** migration scripts complete&lt;br /&gt;
** technical documentation sufficient&lt;br /&gt;
** backward comparability analysis&lt;br /&gt;
** migration scripts are provided (when needed)&lt;br /&gt;
* regular releases by providing and supporting a release manager from amongst their members&lt;br /&gt;
&lt;br /&gt;
==== Process ====&lt;br /&gt;
* When a feature in a development branch is ready for approval the developer contacts the technical team and applies for approval&lt;br /&gt;
* Technical Team meets on a regular basis and discusses the applications &lt;br /&gt;
* If all criteria are met the team approves the feature from a technical perspective and allows the developer to merge his feature into stabilization branch&lt;br /&gt;
&lt;br /&gt;
==Concept Template Suggestion==&lt;br /&gt;
[http://www.adempiere.com/index.php/Technical_Specification_Template Technical Specification Template]&lt;br /&gt;
&lt;br /&gt;
= Meetings of Technical Team =&lt;br /&gt;
We meet at Thursday 15:00 hours GMT via Skype.&lt;br /&gt;
Minutes of Meetings are to be written on the following Friday latest and published on the wiki page until evening.&lt;br /&gt;
&lt;br /&gt;
== 20101209 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[TT_meeting_minutes_09/12/10|Minutes]]&lt;br /&gt;
&lt;br /&gt;
# Channel for regular meetings&lt;br /&gt;
# Frequency of regular meetings&lt;br /&gt;
# Rules and rights of every team&lt;br /&gt;
# Communication between both teams&lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20101216 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes 16 Dezember 2010|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Templates for teams&lt;br /&gt;
#Repository (Mercurial)&lt;br /&gt;
#Codebase&lt;br /&gt;
#Misc&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
== 20110106 (together with [[Functional Team]]) ==&lt;br /&gt;
[[FT/TT_meeting_minutes_Jan_6th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
[[Category: community]]&lt;br /&gt;
[[Category: Community Contract]]&lt;br /&gt;
[[Category: Technical Team]]&lt;br /&gt;
&lt;br /&gt;
== 20110113 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 13th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Misc/ Next Steps&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110120 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_Jan_20th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110127 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 27th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Mercurial direcories &lt;br /&gt;
#Patches&lt;br /&gt;
#Test framework &lt;br /&gt;
#HG Repo Permissions&lt;br /&gt;
&lt;br /&gt;
== 20110203 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_feb_03th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110210 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT_meeting_minutes_Feb_10th_2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting &lt;br /&gt;
# Test Framework&lt;br /&gt;
# Bug Fixes&lt;br /&gt;
# Status of new functionality&lt;br /&gt;
# Migration Tool see [https://sourceforge.net/projects/adempiere/forums/forum/610546/topic/4096123]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110217 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Feb 17th 2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting&lt;br /&gt;
# Mercurial directories&lt;br /&gt;
# Test framework&lt;br /&gt;
# Integration of Bug Fixes and review of new functionality&lt;br /&gt;
# Migration Tool &lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20110303 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes March 3rd 2011|Minutes]]&lt;br /&gt;
# General&lt;br /&gt;
# Mike McKay as Functional Team member&lt;br /&gt;
# ADempiere Server Test&lt;br /&gt;
# Testing framework evaluation status&lt;br /&gt;
# Starting with the revision the pacth a new mercurial&lt;br /&gt;
# PMC in Adempiere wiki&lt;br /&gt;
# Next meeting&lt;br /&gt;
&lt;br /&gt;
== 20110324 ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[TT meeting minutes March 24th 2011|Minutes]]&lt;br /&gt;
# Testing framework status&lt;br /&gt;
## [[User:Tobi|Tobi]] 13:09, 24 March 2011 (UTC) POC/Documantion to share?&lt;br /&gt;
# Status new functionality&lt;br /&gt;
# [[User:Tobi|Tobi]] 13:09, 24 March 2011 (UTC) Table or other means to coordinate work?&lt;br /&gt;
# Misc&lt;br /&gt;
# Next meeting&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: community]]&lt;br /&gt;
[[Category: Community Contract]]&lt;br /&gt;
[[Category: Technical Team]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110519 ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[TT meeting minutes May 19th 2011|Minutes]]&lt;br /&gt;
# No attendees&lt;br /&gt;
# Next meeting&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: community]]&lt;br /&gt;
[[Category: Community Contract]]&lt;br /&gt;
[[Category: Technical Team]]&lt;/div&gt;</description>
			<pubDate>Thu, 19 May 2011 15:36:24 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Technical_Team</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* My Blogs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me =&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
* [https://trifonnt.wordpress.com My blog in wordpress.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month.&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Wed, 18 May 2011 15:26:45 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>ADempiere World Conference 2011</title>
			<link>http://www.adempiere.com/ADempiere_World_Conference_2011</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Beuth berlin.jpg|thumb]]&lt;br /&gt;
After organizing [[2nd European ADempiere Conference]] in 2009 which followed the [[European ADempiere Conference]] in 2007, [[ADeV|ADempiere e.V. (ADeV)]] invites the community to the next Conference which takes places 2011 in Berlin!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ADempiere World Conference 2011'''&lt;br /&gt;
* 02nd - 04th of September 2011 (Friday - Sunday) &lt;br /&gt;
* University of Beuth in Berlin, Germany (http://www.beuth-hochschule.de/)&lt;br /&gt;
* Agenda (Draft)&lt;br /&gt;
** Community discussion&lt;br /&gt;
** Workshops / Knowledgetransfer&lt;br /&gt;
** ADeV member meeting (private) ADeV is voting a new board&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Stay tuned for more details!'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Participants==&lt;br /&gt;
Put your name here if you want to come.&lt;br /&gt;
&lt;br /&gt;
#[[User:Mark_o|Mark Ostermann]]&lt;br /&gt;
#Kai Schaeffer&lt;br /&gt;
#Karsten Thiemann&lt;br /&gt;
#Dirk Niemeyer&lt;br /&gt;
#[[User:nwessel|Norbert Wessel]]&lt;br /&gt;
#Teo Sarca&lt;br /&gt;
#Tobias Schöneberg&lt;br /&gt;
#[[User:MJMcKay|Mike Mckay]]&lt;br /&gt;
#[[User:Kittiu|Kitti U.]]&lt;br /&gt;
#[[User:Wipawiij|Wipawii J.]]&lt;br /&gt;
#Dominik Zajak&lt;br /&gt;
#[[User:Trifonnt|Trifon Trifonov(ADempiere founder)]]&lt;br /&gt;
&lt;br /&gt;
==Workshops: Call for paper==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Space: Call for ideas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Conference]]&lt;br /&gt;
[[Category:ADempiere World Conference 2011]]&lt;/div&gt;</description>
			<pubDate>Mon, 16 May 2011 11:40:25 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:ADempiere_World_Conference_2011</comments>		</item>
		<item>
			<title>ADempiere World Conference 2011</title>
			<link>http://www.adempiere.com/ADempiere_World_Conference_2011</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Beuth berlin.jpg|thumb]]&lt;br /&gt;
After organizing [[2nd European ADempiere Conference]] in 2009 which followed the [[European ADempiere Conference]] in 2007, [[ADeV|ADempiere e.V. (ADeV)]] invites the community to the next Conference which takes places 2011 in Berlin!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ADempiere World Conference 2011'''&lt;br /&gt;
* 02nd - 04th of September 2011 (Friday - Sunday) &lt;br /&gt;
* University of Beuth in Berlin, Germany (http://www.beuth-hochschule.de/)&lt;br /&gt;
* Agenda (Draft)&lt;br /&gt;
** Community discussion&lt;br /&gt;
** Workshops / Knowledgetransfer&lt;br /&gt;
** ADeV member meeting (private) ADeV is voting a new board&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Stay tuned for more details!'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Participants==&lt;br /&gt;
Put your name here if you want to come.&lt;br /&gt;
&lt;br /&gt;
#[[User:Mark_o|Mark Ostermann]]&lt;br /&gt;
#Kai Schaeffer&lt;br /&gt;
#Karsten Thiemann&lt;br /&gt;
#Dirk Niemeyer&lt;br /&gt;
#[[User:nwessel|Norbert Wessel]]&lt;br /&gt;
#Teo Sarca&lt;br /&gt;
#Tobias Schöneberg&lt;br /&gt;
#[[User:MJMcKay|Mike Mckay]]&lt;br /&gt;
#[[User:Kittiu|Kitti U.]]&lt;br /&gt;
#[[User:Wipawiij|Wipawii J.]]&lt;br /&gt;
#Dominik Zajak&lt;br /&gt;
#[[User:Trifonnt|Trifon Trifonov]]&lt;br /&gt;
&lt;br /&gt;
==Workshops: Call for paper==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Space: Call for ideas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Conference]]&lt;br /&gt;
[[Category:ADempiere World Conference 2011]]&lt;/div&gt;</description>
			<pubDate>Mon, 16 May 2011 08:13:07 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:ADempiere_World_Conference_2011</comments>		</item>
		<item>
			<title>Technical Team</title>
			<link>http://www.adempiere.com/Technical_Team</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Initial Staff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Initial Staff ====&lt;br /&gt;
* Teo Sarca&lt;br /&gt;
* Karsten Thiemann&lt;br /&gt;
* Tobias Schöneberg&lt;br /&gt;
* Victor Perez (Maintaining Libero MFG and HR only)&lt;br /&gt;
* [[User:Trifonnt| Trifon Trifonov]]&lt;br /&gt;
* &amp;lt;please add your name when you want to join the team (4 hours minimum work per week)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everybody can become a team member, unless 2/3 of existing members disagree.&lt;br /&gt;
&lt;br /&gt;
==== Responsibilities ====&lt;br /&gt;
As described and voted in the [[Software Development Procedure]]&lt;br /&gt;
* maintains trunk and stabilization branch&lt;br /&gt;
* ensures that all contributions meet technical requirements in respect to quality&lt;br /&gt;
** code is documented&lt;br /&gt;
** backward compatibility is achieved&lt;br /&gt;
** migration scripts complete&lt;br /&gt;
** technical documentation sufficient&lt;br /&gt;
** backward comparability analysis&lt;br /&gt;
** migration scripts are provided (when needed)&lt;br /&gt;
* regular releases by providing and supporting a release manager from amongst their members&lt;br /&gt;
&lt;br /&gt;
==== Process ====&lt;br /&gt;
* When a feature in a development branch is ready for approval the developer contacts the technical team and applies for approval&lt;br /&gt;
* Technical Team meets on a regular basis and discusses the applications &lt;br /&gt;
* If all criteria are met the team approves the feature from a technical perspective and allows the developer to merge his feature into stabilization branch&lt;br /&gt;
&lt;br /&gt;
==Concept Template Suggestion==&lt;br /&gt;
[http://www.adempiere.com/index.php/Technical_Specification_Template Technical Specification Template]&lt;br /&gt;
&lt;br /&gt;
= Meetings of Technical Team =&lt;br /&gt;
We meet at Thursday 15:00 hours GMT via Skype.&lt;br /&gt;
Minutes of Meetings are to be written on the following Friday latest and published on the wiki page until evening.&lt;br /&gt;
&lt;br /&gt;
== 20101209 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[TT_meeting_minutes_09/12/10|Minutes]]&lt;br /&gt;
&lt;br /&gt;
# Channel for regular meetings&lt;br /&gt;
# Frequency of regular meetings&lt;br /&gt;
# Rules and rights of every team&lt;br /&gt;
# Communication between both teams&lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20101216 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes 16 Dezember 2010|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Templates for teams&lt;br /&gt;
#Repository (Mercurial)&lt;br /&gt;
#Codebase&lt;br /&gt;
#Misc&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
== 20110106 (together with [[Functional Team]]) ==&lt;br /&gt;
[[FT/TT_meeting_minutes_Jan_6th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
[[Category: community]]&lt;br /&gt;
[[Category: Community Contract]]&lt;br /&gt;
[[Category: Technical Team]]&lt;br /&gt;
&lt;br /&gt;
== 20110113 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 13th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Misc/ Next Steps&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110120 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_Jan_20th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110127 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 27th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Mercurial direcories &lt;br /&gt;
#Patches&lt;br /&gt;
#Test framework &lt;br /&gt;
#HG Repo Permissions&lt;br /&gt;
&lt;br /&gt;
== 20110203 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_feb_03th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110210 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT_meeting_minutes_Feb_10th_2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting &lt;br /&gt;
# Test Framework&lt;br /&gt;
# Bug Fixes&lt;br /&gt;
# Status of new functionality&lt;br /&gt;
# Migration Tool see [https://sourceforge.net/projects/adempiere/forums/forum/610546/topic/4096123]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110217 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Feb 17th 2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting&lt;br /&gt;
# Mercurial directories&lt;br /&gt;
# Test framework&lt;br /&gt;
# Integration of Bug Fixes and review of new functionality&lt;br /&gt;
# Migration Tool &lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20110303 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes March 3rd 2011|Minutes]]&lt;br /&gt;
# General&lt;br /&gt;
# Mike McKay as Functional Team member&lt;br /&gt;
# ADempiere Server Test&lt;br /&gt;
# Testing framework evaluation status&lt;br /&gt;
# Starting with the revision the pacth a new mercurial&lt;br /&gt;
# PMC in Adempiere wiki&lt;br /&gt;
# Next meeting&lt;br /&gt;
&lt;br /&gt;
== 20110324 ==&lt;br /&gt;
&lt;br /&gt;
Agenda &lt;br /&gt;
# Testing framework status&lt;br /&gt;
## [[User:Tobi|Tobi]] 13:09, 24 March 2011 (UTC) POC/Documantion to share?&lt;br /&gt;
# Status new functionality&lt;br /&gt;
# [[User:Tobi|Tobi]] 13:09, 24 March 2011 (UTC) Table or other means to coordinate work?&lt;br /&gt;
# Misc&lt;br /&gt;
# Next meeting&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: community]]&lt;br /&gt;
[[Category: Community Contract]]&lt;br /&gt;
[[Category: Technical Team]]&lt;/div&gt;</description>
			<pubDate>Thu, 24 Mar 2011 13:41:06 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Technical_Team</comments>		</item>
		<item>
			<title>Technical Team</title>
			<link>http://www.adempiere.com/Technical_Team</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Initial Staff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Initial Staff ====&lt;br /&gt;
* Teo Sarca&lt;br /&gt;
* Karsten Thiemann&lt;br /&gt;
* Tobias Schöneberg&lt;br /&gt;
* Victor Perez (Maintaining Libero MFG and HR only)&lt;br /&gt;
* {User:Trifonnt|Trifon Trifonov|&lt;br /&gt;
* &amp;lt;please add your name when you want to join the team (4 hours minimum work per week)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everybody can become a team member, unless 2/3 of existing members disagree.&lt;br /&gt;
&lt;br /&gt;
==== Responsibilities ====&lt;br /&gt;
As described and voted in the [[Software Development Procedure]]&lt;br /&gt;
* maintains trunk and stabilization branch&lt;br /&gt;
* ensures that all contributions meet technical requirements in respect to quality&lt;br /&gt;
** code is documented&lt;br /&gt;
** backward compatibility is achieved&lt;br /&gt;
** migration scripts complete&lt;br /&gt;
** technical documentation sufficient&lt;br /&gt;
** backward comparability analysis&lt;br /&gt;
** migration scripts are provided (when needed)&lt;br /&gt;
* regular releases by providing and supporting a release manager from amongst their members&lt;br /&gt;
&lt;br /&gt;
==== Process ====&lt;br /&gt;
* When a feature in a development branch is ready for approval the developer contacts the technical team and applies for approval&lt;br /&gt;
* Technical Team meets on a regular basis and discusses the applications &lt;br /&gt;
* If all criteria are met the team approves the feature from a technical perspective and allows the developer to merge his feature into stabilization branch&lt;br /&gt;
&lt;br /&gt;
==Concept Template Suggestion==&lt;br /&gt;
[http://www.adempiere.com/index.php/Technical_Specification_Template Technical Specification Template]&lt;br /&gt;
&lt;br /&gt;
= Meetings of Technical Team =&lt;br /&gt;
We meet at Thursday 15:00 hours GMT via Skype.&lt;br /&gt;
Minutes of Meetings are to be written on the following Friday latest and published on the wiki page until evening.&lt;br /&gt;
&lt;br /&gt;
== 20101209 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[TT_meeting_minutes_09/12/10|Minutes]]&lt;br /&gt;
&lt;br /&gt;
# Channel for regular meetings&lt;br /&gt;
# Frequency of regular meetings&lt;br /&gt;
# Rules and rights of every team&lt;br /&gt;
# Communication between both teams&lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20101216 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes 16 Dezember 2010|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Templates for teams&lt;br /&gt;
#Repository (Mercurial)&lt;br /&gt;
#Codebase&lt;br /&gt;
#Misc&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
== 20110106 (together with [[Functional Team]]) ==&lt;br /&gt;
[[FT/TT_meeting_minutes_Jan_6th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
[[Category: community]]&lt;br /&gt;
[[Category: Community Contract]]&lt;br /&gt;
[[Category: Technical Team]]&lt;br /&gt;
&lt;br /&gt;
== 20110113 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 13th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Misc/ Next Steps&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110120 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_Jan_20th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110127 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 27th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Mercurial direcories &lt;br /&gt;
#Patches&lt;br /&gt;
#Test framework &lt;br /&gt;
#HG Repo Permissions&lt;br /&gt;
&lt;br /&gt;
== 20110203 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_feb_03th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110210 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT_meeting_minutes_Feb_10th_2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting &lt;br /&gt;
# Test Framework&lt;br /&gt;
# Bug Fixes&lt;br /&gt;
# Status of new functionality&lt;br /&gt;
# Migration Tool see [https://sourceforge.net/projects/adempiere/forums/forum/610546/topic/4096123]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110217 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Feb 17th 2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting&lt;br /&gt;
# Mercurial directories&lt;br /&gt;
# Test framework&lt;br /&gt;
# Integration of Bug Fixes and review of new functionality&lt;br /&gt;
# Migration Tool &lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20110303 (together with [[Functional Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes March 3rd 2011|Minutes]]&lt;br /&gt;
# General&lt;br /&gt;
# Mike McKay as Functional Team member&lt;br /&gt;
# ADempiere Server Test&lt;br /&gt;
# Testing framework evaluation status&lt;br /&gt;
# Starting with the revision the pacth a new mercurial&lt;br /&gt;
# PMC in Adempiere wiki&lt;br /&gt;
# Next meeting&lt;br /&gt;
&lt;br /&gt;
== 20110324 ==&lt;br /&gt;
&lt;br /&gt;
Agenda &lt;br /&gt;
# Testing framework status&lt;br /&gt;
## [[User:Tobi|Tobi]] 13:09, 24 March 2011 (UTC) POC/Documantion to share?&lt;br /&gt;
# Status new functionality&lt;br /&gt;
# [[User:Tobi|Tobi]] 13:09, 24 March 2011 (UTC) Table or other means to coordinate work?&lt;br /&gt;
# Misc&lt;br /&gt;
# Next meeting&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: community]]&lt;br /&gt;
[[Category: Community Contract]]&lt;br /&gt;
[[Category: Technical Team]]&lt;/div&gt;</description>
			<pubDate>Thu, 24 Mar 2011 13:19:35 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Technical_Team</comments>		</item>
		<item>
			<title>Functional Team</title>
			<link>http://www.adempiere.com/Functional_Team</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Staff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Staff ====&lt;br /&gt;
* Victor Perez&lt;br /&gt;
* Ramiro Vergara&lt;br /&gt;
* Mario Calderon&lt;br /&gt;
* Mark Ostermann&lt;br /&gt;
* Michael Judd (Accounting/BI/Processes)&lt;br /&gt;
* Paul Aviles&lt;br /&gt;
* Enrique Ruibal&lt;br /&gt;
* Mike McKay&lt;br /&gt;
* [[User:Trifonnt| Trifon Trifonov]]&lt;br /&gt;
* &amp;lt;please add your name when you want to join the team (4 hours minimum work per week)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everybody can become a team member, unless 2/3 of existing members disagree.&lt;br /&gt;
&lt;br /&gt;
==== Responsibilities ====&lt;br /&gt;
As described and voted in the [[Software Development Procedure]]&lt;br /&gt;
&lt;br /&gt;
* ensures that all contributions meet functional requirements in respect to quality &lt;br /&gt;
** requirement makes sense&lt;br /&gt;
** feature is needed in trunk or to be kept as optional extension&lt;br /&gt;
** requirement is solved&lt;br /&gt;
** acceptance criteria are defined&lt;br /&gt;
** test cases are complete&lt;br /&gt;
** user documentation is sufficient&lt;br /&gt;
** system documentation is sufficient&lt;br /&gt;
&lt;br /&gt;
==== Process ====&lt;br /&gt;
* The Functional team has got the final decision on which feature is accepted and merged from development to stabilization branch.&lt;br /&gt;
&lt;br /&gt;
=Concept Template=&lt;br /&gt;
As starting point to be discussed for further/ future usage. The Functional Specification Style Guide intends to be a brief document to explain how to create well formed documentation for all the projects developed by the ADempiere Community.&lt;br /&gt;
&lt;br /&gt;
Please see below for an explanation for each section of the template. This Template suggestion is based on the Contributions Template from Openbravo, which can be found here http://wiki.openbravo.com/wiki/Functional_Specification_Style_Guide.&lt;br /&gt;
&lt;br /&gt;
== Status  ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; margin-right: 10px; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;font-size: 0.86em; line-height: 0.9em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 180px; color: rgb(255, 255, 255); background-color: grey;&amp;quot; | User, Date &lt;br /&gt;
! style=&amp;quot;width: 170px; color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Status &lt;br /&gt;
! style=&amp;quot;width: 70%; color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Description &lt;br /&gt;
! style=&amp;quot;width: 50px; color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Points&lt;br /&gt;
|-&lt;br /&gt;
| [[Benutzer:Mo|Mo]] 11:15, 30. Jul. 2009 (CEST) &lt;br /&gt;
| In Development&lt;br /&gt;
| ... Further Information ...&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Benutzer:Mo|Mo]] 11:42, 12. Jul. 2010 (CEST) &lt;br /&gt;
| Technical Team: Approval&lt;br /&gt;
| ... Further Information ...&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Benutzer:Mo|Mo]] 14:46, 23. Nov. 2010 (CET) &lt;br /&gt;
| Functional Team: Approval&lt;br /&gt;
| ... Further Information ...&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Benutzer:Ts|Ts]] 18:55, 26. Nov. 2010 (CET) &lt;br /&gt;
| Other Status ... &lt;br /&gt;
| ... Further Information ... &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
'''Sponsoring''': &amp;lt;contributor name(s)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Concept''': &amp;lt;contributor name(s)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Implementation''': &amp;lt;contributor name(s)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Testing''': &amp;lt;contributor name(s)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Documentation''': &amp;lt;contributor name(s)&amp;gt; ...&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The overview/ short description for the project will be a brief summary outlining the goals and reasons for the project.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
Go into more detail here on how the implementation of this project will be used and why it is required in the business.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Any references that may be required for extra knowledge or information in regards to providing an accurate estimation on the completion time for the project.&lt;br /&gt;
&lt;br /&gt;
==Design Considerations==&lt;br /&gt;
This section of the specification covers anything that may affect the development or implementation of the solution. This is the place to put any potential problems or requirements that are not necessarily stated elsewhere in the specification.&lt;br /&gt;
&lt;br /&gt;
===Assumptions===&lt;br /&gt;
With all projects there will be certain assumptions made regarding the development or implementation of the solution. Examples of these would be that all components should be translated into Spanish, or ??&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
In the project there may be elements of the solution which will have a dependency on outside issues. In order to implement or develop the solution these dependencies will need to be resolved or removed. e.g. resolving a licensing issue with a dependant library&lt;br /&gt;
&lt;br /&gt;
===Constraints===&lt;br /&gt;
Highlight here any issues which will restrict the development or the implementation of the solution.&lt;br /&gt;
&lt;br /&gt;
==Glossary==&lt;br /&gt;
Please explain any specific terms relating to the project that may not be understood by all involved. This would include industry specific terminology or abbreviations used in the specification document.&lt;br /&gt;
&lt;br /&gt;
==Functional Requirements==&lt;br /&gt;
This is the main section into the Functional Specification document and it should be treated with an special care.&lt;br /&gt;
&lt;br /&gt;
===User roles &amp;amp; profiles===&lt;br /&gt;
Explain the different roles that can use the new functionality and their knowledge related with computers.&lt;br /&gt;
&lt;br /&gt;
Examples of possible user roles:&lt;br /&gt;
&lt;br /&gt;
;Warehouse workers: Typically these users do not have a high level of professional education and might not be computer literate. They tend however to spend a number of years with the same employer and after hiring they go through a few days of training to learn the processes within the warehouse. These users, therefore, need to be able to learn how to use the product in a few hours.&lt;br /&gt;
&lt;br /&gt;
;Purchase managers: Typically these users have a high level of professional education, are computer literate and receive training in the product and business process. These users perform purchase orders from the requisitions, they have to select the correspondent vendor taking into account the different variables that can take part in the decision: price, discounts, availability,...&lt;br /&gt;
&lt;br /&gt;
;Generic employee: These are users that work for the organization implementing ADempiere in a variety of roles and that are involved in a given business process on an occasional basis. Because of the infrequent nature of their involvement in the process, their primary concern is ease of use, defined as the ability to perform a new task without having to read any documentation.&lt;br /&gt;
&lt;br /&gt;
===Business process definition===&lt;br /&gt;
A definition of the process is expected in order to know what business capabilities are supported.&lt;br /&gt;
&lt;br /&gt;
===User stories===&lt;br /&gt;
A good approach to understand the problem is trying to explain it with real cases that happen in the real world. &lt;br /&gt;
 &lt;br /&gt;
===Functional requirements based on business processes===&lt;br /&gt;
Use this space to provide detailed information on the various functional requirements. If possible this should include process diagrams and mock ups of files or material that gets used within the process. The more information regarding the process the better as this will give the developers the relevant information to understand the process and allow them to provide functionality that meets the requirements.&lt;br /&gt;
&lt;br /&gt;
====User Interface Mockups====&lt;br /&gt;
''A picture tells a thousand words''&lt;br /&gt;
&lt;br /&gt;
Providing a mock up of how the user interface should look provides a very clear definition of what the developer needs to create. The developer will not implicitly understand how the user will use the screen so the results may not be as user friendly as they could be. This is where the mock up comes into it's own. &lt;br /&gt;
&lt;br /&gt;
Think about &lt;br /&gt;
* how the user will complete the screen, &lt;br /&gt;
* where will they go first, &lt;br /&gt;
* what is the most important information to gather, &lt;br /&gt;
* what are the mandatory fields required &lt;br /&gt;
&lt;br /&gt;
A good screen design will make the implementation so much easier and the customer happier.&lt;br /&gt;
&lt;br /&gt;
== Acceptance criteria  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! Expectation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== QA and test cases ==&lt;br /&gt;
ff&lt;br /&gt;
&lt;br /&gt;
== Development infrastructure  ==&lt;br /&gt;
Table with standard info that is required for documentation and task handover: &lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; margin-right: 10px; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! User, Date (Signature)&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Dev-SCM (URL) &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Stab-SCM (URL) &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SQL-Skripts&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Community &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Explanation of table:&lt;br /&gt;
*Name: Name of information item &lt;br /&gt;
**Devel-SCM: URL of SCM repository location where the devolopment is done (SCM=&amp;quot;source code management&amp;quot;) &lt;br /&gt;
**Stab-SCM: URL of SCM repository into which developed work is merged for stabilization&lt;br /&gt;
**SQL-Skripts: List of URLs to migration Skripts (inside SCM) that are applied to a DB for rollout &lt;br /&gt;
**Community: List of URLs to BFs and FRs that came up development&amp;lt;br&amp;gt; &lt;br /&gt;
*User/Date: Signature (&amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt;) of the person who last edited the row &lt;br /&gt;
*Description: Value, Comment, Description or List of URLs depending on &amp;quot;Name&amp;quot;. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Technical Requirements ==&lt;br /&gt;
This area will generally be left to the developers and custom development to complete. However if there are specific technical requirements from the implementation then this is the place to state them. Good information here would be the environment into which the final solution will be deployed.&lt;br /&gt;
&lt;br /&gt;
== Data Requirements ==&lt;br /&gt;
Are there specific requirements for the handling of data? Put this information here, one such example may be that no information is to ever be physically deleted from the database and should only be made inactive. Perhaps the system is to take data from another database and work with that....anything ''data'' goes here.&lt;br /&gt;
&lt;br /&gt;
==Non-Functional Requirements==&lt;br /&gt;
Non functional requirements are the soft touches that the system needs to cater for. Are there speed requirements for the system, what about issues with skinning, language, jargon?&lt;br /&gt;
&lt;br /&gt;
==Open Discussion Items==&lt;br /&gt;
ADempiere is an open source project, and it is aimed that anybody in the community can expose his/her point of view. The points that need to be discussed will be exposed in this section and the achieved resolutions will appear in the next section. Here is the place too, where Functional and Technical Teams can put their discussion Points about the concept.&lt;br /&gt;
&lt;br /&gt;
==Closed Discussion Items==&lt;br /&gt;
Once one conflictive point has been discussed, the achieved resolution is presented into this point.&lt;br /&gt;
&lt;br /&gt;
==Template==&lt;br /&gt;
This is the template with all the points useful to cut &amp;amp; paste into your new functional specification pages:&lt;br /&gt;
&lt;br /&gt;
 = My Project - Functional Specifications =&lt;br /&gt;
 == Status  ==&lt;br /&gt;
 == Contributors ==&lt;br /&gt;
 == Overview ==&lt;br /&gt;
 == Purpose ==&lt;br /&gt;
 == References ==&lt;br /&gt;
 == Design Considerations ==&lt;br /&gt;
 === Assumptions ===&lt;br /&gt;
 === Dependencies ===&lt;br /&gt;
 === Constraints ===&lt;br /&gt;
 == Glossary ==&lt;br /&gt;
 == Functional Requirements ==&lt;br /&gt;
 === User roles &amp;amp; profiles ===&lt;br /&gt;
 === Business process definition ===&lt;br /&gt;
 === User stories ===&lt;br /&gt;
 === Functional requirements based on business processes ===&lt;br /&gt;
 ==== User Interface Mockups ====&lt;br /&gt;
 == Acceptance criteria  ==&lt;br /&gt;
 == QA and test cases ==&lt;br /&gt;
 == Development infrastructure  ==&lt;br /&gt;
 == Technical Requirements ==&lt;br /&gt;
 == Data Requirements ==&lt;br /&gt;
 == Non-Functional Requirements ==&lt;br /&gt;
 == Open Discussion Items ==&lt;br /&gt;
 == Closed Discussion Items ==&lt;br /&gt;
&lt;br /&gt;
= Meetings of Functional Team =&lt;br /&gt;
We meet at Thursday 15:00 hours GMT via Skype.&lt;br /&gt;
Minutes of Meetings are to be written on the following Friday latest and published on the wiki page until evening.&lt;br /&gt;
&lt;br /&gt;
== 20101209 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT_meeting_minutes_09/12/10|Minutes]]&lt;br /&gt;
&lt;br /&gt;
# Channel for regular meetings&lt;br /&gt;
# Frequency of regular meetings&lt;br /&gt;
# Rules and rights of every team&lt;br /&gt;
# Communication between both teams&lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20101216 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes 16 Dezember 2010|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Templates for teams&lt;br /&gt;
#Repository (Mercurial)&lt;br /&gt;
#Codebase&lt;br /&gt;
#Misc&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
== 20110106 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 6th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Repository (Mercurial)&lt;br /&gt;
#Codebase&lt;br /&gt;
#Misc&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110113 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 13th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Misc/ Next Steps&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110120 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_Jan_20th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110127 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 27th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Mercurial direcories &lt;br /&gt;
#Patches&lt;br /&gt;
#Test framework &lt;br /&gt;
#HG Repo Permissions&lt;br /&gt;
&lt;br /&gt;
== 20110203 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_feb_03th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110210 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT_meeting_minutes_Feb_10th_2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting &lt;br /&gt;
# Test Framework&lt;br /&gt;
# Bug Fixes&lt;br /&gt;
# Status of new functionality&lt;br /&gt;
# Migration Tool see [https://sourceforge.net/projects/adempiere/forums/forum/610546/topic/4096123]&lt;br /&gt;
&lt;br /&gt;
== 20110210 (together with [[Technical Team]]) ==&lt;br /&gt;
Agenda [[FT/TT meeting minutes Feb 17th 2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting&lt;br /&gt;
# Mercurial directories&lt;br /&gt;
# Test framework&lt;br /&gt;
# Integration of Bug Fixes and review of new functionality&lt;br /&gt;
# Migration Tool &lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20110224 (together with [[Technical Team]]) ==&lt;br /&gt;
Agenda [[FT/TT meeting minutes Feb 24th 2011|Minutes]]&lt;br /&gt;
# Migration Tool &lt;br /&gt;
# Status of renaming in Mercurial/ Mercurial directories&lt;br /&gt;
# Review task list from last meeting&lt;br /&gt;
# Test framework&lt;br /&gt;
# Integration of Bug Fixes and review of new functionality&lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20110303 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes March 3rd 2011|Minutes]]&lt;br /&gt;
# General&lt;br /&gt;
# Mike McKay as Functional Team member&lt;br /&gt;
# ADempiere Server Test&lt;br /&gt;
# Testing framework evaluation status&lt;br /&gt;
# Starting with the revision the pacth a new mercurial&lt;br /&gt;
# PMC in Adempiere wiki&lt;br /&gt;
# Next meeting&lt;br /&gt;
&lt;br /&gt;
[[Category: community]]&lt;br /&gt;
[[Category: Community Contract]]&lt;br /&gt;
[[Category: Functional Team]]&lt;/div&gt;</description>
			<pubDate>Tue, 15 Mar 2011 16:47:35 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Functional_Team</comments>		</item>
		<item>
			<title>Functional Team</title>
			<link>http://www.adempiere.com/Functional_Team</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Staff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Staff ====&lt;br /&gt;
* Victor Perez&lt;br /&gt;
* Ramiro Vergara&lt;br /&gt;
* Mario Calderon&lt;br /&gt;
* Mark Ostermann&lt;br /&gt;
* Kai Schaeffer&lt;br /&gt;
* Michael Judd (Accounting/BI/Processes)&lt;br /&gt;
* Paul Aviles&lt;br /&gt;
* Enrique Ruibal&lt;br /&gt;
* Mike McKay&lt;br /&gt;
* [User:Trifonnt]&lt;br /&gt;
* &amp;lt;please add your name when you want to join the team (4 hours minimum work per week)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everybody can become a team member, unless 2/3 of existing members disagree.&lt;br /&gt;
&lt;br /&gt;
==== Responsibilities ====&lt;br /&gt;
As described and voted in the [[Software Development Procedure]]&lt;br /&gt;
&lt;br /&gt;
* ensures that all contributions meet functional requirements in respect to quality &lt;br /&gt;
** requirement makes sense&lt;br /&gt;
** feature is needed in trunk or to be kept as optional extension&lt;br /&gt;
** requirement is solved&lt;br /&gt;
** acceptance criteria are defined&lt;br /&gt;
** test cases are complete&lt;br /&gt;
** user documentation is sufficient&lt;br /&gt;
** system documentation is sufficient&lt;br /&gt;
&lt;br /&gt;
==== Process ====&lt;br /&gt;
* The Functional team has got the final decision on which feature is accepted and merged from development to stabilization branch.&lt;br /&gt;
&lt;br /&gt;
=Concept Template=&lt;br /&gt;
As starting point to be discussed for further/ future usage. The Functional Specification Style Guide intends to be a brief document to explain how to create well formed documentation for all the projects developed by the ADempiere Community.&lt;br /&gt;
&lt;br /&gt;
Please see below for an explanation for each section of the template. This Template suggestion is based on the Contributions Template from Openbravo, which can be found here http://wiki.openbravo.com/wiki/Functional_Specification_Style_Guide.&lt;br /&gt;
&lt;br /&gt;
== Status  ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; margin-right: 10px; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;font-size: 0.86em; line-height: 0.9em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 180px; color: rgb(255, 255, 255); background-color: grey;&amp;quot; | User, Date &lt;br /&gt;
! style=&amp;quot;width: 170px; color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Status &lt;br /&gt;
! style=&amp;quot;width: 70%; color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Description &lt;br /&gt;
! style=&amp;quot;width: 50px; color: rgb(255, 255, 255); background-color: grey;&amp;quot; | Points&lt;br /&gt;
|-&lt;br /&gt;
| [[Benutzer:Mo|Mo]] 11:15, 30. Jul. 2009 (CEST) &lt;br /&gt;
| In Development&lt;br /&gt;
| ... Further Information ...&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Benutzer:Mo|Mo]] 11:42, 12. Jul. 2010 (CEST) &lt;br /&gt;
| Technical Team: Approval&lt;br /&gt;
| ... Further Information ...&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Benutzer:Mo|Mo]] 14:46, 23. Nov. 2010 (CET) &lt;br /&gt;
| Functional Team: Approval&lt;br /&gt;
| ... Further Information ...&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Benutzer:Ts|Ts]] 18:55, 26. Nov. 2010 (CET) &lt;br /&gt;
| Other Status ... &lt;br /&gt;
| ... Further Information ... &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
'''Sponsoring''': &amp;lt;contributor name(s)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Concept''': &amp;lt;contributor name(s)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Implementation''': &amp;lt;contributor name(s)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Testing''': &amp;lt;contributor name(s)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Documentation''': &amp;lt;contributor name(s)&amp;gt; ...&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The overview/ short description for the project will be a brief summary outlining the goals and reasons for the project.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
Go into more detail here on how the implementation of this project will be used and why it is required in the business.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Any references that may be required for extra knowledge or information in regards to providing an accurate estimation on the completion time for the project.&lt;br /&gt;
&lt;br /&gt;
==Design Considerations==&lt;br /&gt;
This section of the specification covers anything that may affect the development or implementation of the solution. This is the place to put any potential problems or requirements that are not necessarily stated elsewhere in the specification.&lt;br /&gt;
&lt;br /&gt;
===Assumptions===&lt;br /&gt;
With all projects there will be certain assumptions made regarding the development or implementation of the solution. Examples of these would be that all components should be translated into Spanish, or ??&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
In the project there may be elements of the solution which will have a dependency on outside issues. In order to implement or develop the solution these dependencies will need to be resolved or removed. e.g. resolving a licensing issue with a dependant library&lt;br /&gt;
&lt;br /&gt;
===Constraints===&lt;br /&gt;
Highlight here any issues which will restrict the development or the implementation of the solution.&lt;br /&gt;
&lt;br /&gt;
==Glossary==&lt;br /&gt;
Please explain any specific terms relating to the project that may not be understood by all involved. This would include industry specific terminology or abbreviations used in the specification document.&lt;br /&gt;
&lt;br /&gt;
==Functional Requirements==&lt;br /&gt;
This is the main section into the Functional Specification document and it should be treated with an special care.&lt;br /&gt;
&lt;br /&gt;
===User roles &amp;amp; profiles===&lt;br /&gt;
Explain the different roles that can use the new functionality and their knowledge related with computers.&lt;br /&gt;
&lt;br /&gt;
Examples of possible user roles:&lt;br /&gt;
&lt;br /&gt;
;Warehouse workers: Typically these users do not have a high level of professional education and might not be computer literate. They tend however to spend a number of years with the same employer and after hiring they go through a few days of training to learn the processes within the warehouse. These users, therefore, need to be able to learn how to use the product in a few hours.&lt;br /&gt;
&lt;br /&gt;
;Purchase managers: Typically these users have a high level of professional education, are computer literate and receive training in the product and business process. These users perform purchase orders from the requisitions, they have to select the correspondent vendor taking into account the different variables that can take part in the decision: price, discounts, availability,...&lt;br /&gt;
&lt;br /&gt;
;Generic employee: These are users that work for the organization implementing ADempiere in a variety of roles and that are involved in a given business process on an occasional basis. Because of the infrequent nature of their involvement in the process, their primary concern is ease of use, defined as the ability to perform a new task without having to read any documentation.&lt;br /&gt;
&lt;br /&gt;
===Business process definition===&lt;br /&gt;
A definition of the process is expected in order to know what business capabilities are supported.&lt;br /&gt;
&lt;br /&gt;
===User stories===&lt;br /&gt;
A good approach to understand the problem is trying to explain it with real cases that happen in the real world. &lt;br /&gt;
 &lt;br /&gt;
===Functional requirements based on business processes===&lt;br /&gt;
Use this space to provide detailed information on the various functional requirements. If possible this should include process diagrams and mock ups of files or material that gets used within the process. The more information regarding the process the better as this will give the developers the relevant information to understand the process and allow them to provide functionality that meets the requirements.&lt;br /&gt;
&lt;br /&gt;
====User Interface Mockups====&lt;br /&gt;
''A picture tells a thousand words''&lt;br /&gt;
&lt;br /&gt;
Providing a mock up of how the user interface should look provides a very clear definition of what the developer needs to create. The developer will not implicitly understand how the user will use the screen so the results may not be as user friendly as they could be. This is where the mock up comes into it's own. &lt;br /&gt;
&lt;br /&gt;
Think about &lt;br /&gt;
* how the user will complete the screen, &lt;br /&gt;
* where will they go first, &lt;br /&gt;
* what is the most important information to gather, &lt;br /&gt;
* what are the mandatory fields required &lt;br /&gt;
&lt;br /&gt;
A good screen design will make the implementation so much easier and the customer happier.&lt;br /&gt;
&lt;br /&gt;
== Acceptance criteria  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! Expectation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== QA and test cases ==&lt;br /&gt;
ff&lt;br /&gt;
&lt;br /&gt;
== Development infrastructure  ==&lt;br /&gt;
Table with standard info that is required for documentation and task handover: &lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; margin-right: 10px; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! User, Date (Signature)&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Dev-SCM (URL) &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Stab-SCM (URL) &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SQL-Skripts&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Community &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Explanation of table:&lt;br /&gt;
*Name: Name of information item &lt;br /&gt;
**Devel-SCM: URL of SCM repository location where the devolopment is done (SCM=&amp;quot;source code management&amp;quot;) &lt;br /&gt;
**Stab-SCM: URL of SCM repository into which developed work is merged for stabilization&lt;br /&gt;
**SQL-Skripts: List of URLs to migration Skripts (inside SCM) that are applied to a DB for rollout &lt;br /&gt;
**Community: List of URLs to BFs and FRs that came up development&amp;lt;br&amp;gt; &lt;br /&gt;
*User/Date: Signature (&amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt;) of the person who last edited the row &lt;br /&gt;
*Description: Value, Comment, Description or List of URLs depending on &amp;quot;Name&amp;quot;. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Technical Requirements ==&lt;br /&gt;
This area will generally be left to the developers and custom development to complete. However if there are specific technical requirements from the implementation then this is the place to state them. Good information here would be the environment into which the final solution will be deployed.&lt;br /&gt;
&lt;br /&gt;
== Data Requirements ==&lt;br /&gt;
Are there specific requirements for the handling of data? Put this information here, one such example may be that no information is to ever be physically deleted from the database and should only be made inactive. Perhaps the system is to take data from another database and work with that....anything ''data'' goes here.&lt;br /&gt;
&lt;br /&gt;
==Non-Functional Requirements==&lt;br /&gt;
Non functional requirements are the soft touches that the system needs to cater for. Are there speed requirements for the system, what about issues with skinning, language, jargon?&lt;br /&gt;
&lt;br /&gt;
==Open Discussion Items==&lt;br /&gt;
ADempiere is an open source project, and it is aimed that anybody in the community can expose his/her point of view. The points that need to be discussed will be exposed in this section and the achieved resolutions will appear in the next section. Here is the place too, where Functional and Technical Teams can put their discussion Points about the concept.&lt;br /&gt;
&lt;br /&gt;
==Closed Discussion Items==&lt;br /&gt;
Once one conflictive point has been discussed, the achieved resolution is presented into this point.&lt;br /&gt;
&lt;br /&gt;
==Template==&lt;br /&gt;
This is the template with all the points useful to cut &amp;amp; paste into your new functional specification pages:&lt;br /&gt;
&lt;br /&gt;
 = My Project - Functional Specifications =&lt;br /&gt;
 == Status  ==&lt;br /&gt;
 == Contributors ==&lt;br /&gt;
 == Overview ==&lt;br /&gt;
 == Purpose ==&lt;br /&gt;
 == References ==&lt;br /&gt;
 == Design Considerations ==&lt;br /&gt;
 === Assumptions ===&lt;br /&gt;
 === Dependencies ===&lt;br /&gt;
 === Constraints ===&lt;br /&gt;
 == Glossary ==&lt;br /&gt;
 == Functional Requirements ==&lt;br /&gt;
 === User roles &amp;amp; profiles ===&lt;br /&gt;
 === Business process definition ===&lt;br /&gt;
 === User stories ===&lt;br /&gt;
 === Functional requirements based on business processes ===&lt;br /&gt;
 ==== User Interface Mockups ====&lt;br /&gt;
 == Acceptance criteria  ==&lt;br /&gt;
 == QA and test cases ==&lt;br /&gt;
 == Development infrastructure  ==&lt;br /&gt;
 == Technical Requirements ==&lt;br /&gt;
 == Data Requirements ==&lt;br /&gt;
 == Non-Functional Requirements ==&lt;br /&gt;
 == Open Discussion Items ==&lt;br /&gt;
 == Closed Discussion Items ==&lt;br /&gt;
&lt;br /&gt;
= Meetings of Functional Team =&lt;br /&gt;
We meet at Thursday 15:00 hours GMT via Skype.&lt;br /&gt;
Minutes of Meetings are to be written on the following Friday latest and published on the wiki page until evening.&lt;br /&gt;
&lt;br /&gt;
== 20101209 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT_meeting_minutes_09/12/10|Minutes]]&lt;br /&gt;
&lt;br /&gt;
# Channel for regular meetings&lt;br /&gt;
# Frequency of regular meetings&lt;br /&gt;
# Rules and rights of every team&lt;br /&gt;
# Communication between both teams&lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20101216 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes 16 Dezember 2010|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Templates for teams&lt;br /&gt;
#Repository (Mercurial)&lt;br /&gt;
#Codebase&lt;br /&gt;
#Misc&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
== 20110106 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 6th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Repository (Mercurial)&lt;br /&gt;
#Codebase&lt;br /&gt;
#Misc&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110113 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 13th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Review task list from last meeting&lt;br /&gt;
#Misc/ Next Steps&lt;br /&gt;
#Next meeting&lt;br /&gt;
#Next moderator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 20110120 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_Jan_20th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110127 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes Jan 27th 2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
#Mercurial direcories &lt;br /&gt;
#Patches&lt;br /&gt;
#Test framework &lt;br /&gt;
#HG Repo Permissions&lt;br /&gt;
&lt;br /&gt;
== 20110203 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
[[FT/TT_meeting_minutes_feb_03th_2011|Minutes]]&lt;br /&gt;
&lt;br /&gt;
== 20110210 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT_meeting_minutes_Feb_10th_2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting &lt;br /&gt;
# Test Framework&lt;br /&gt;
# Bug Fixes&lt;br /&gt;
# Status of new functionality&lt;br /&gt;
# Migration Tool see [https://sourceforge.net/projects/adempiere/forums/forum/610546/topic/4096123]&lt;br /&gt;
&lt;br /&gt;
== 20110210 (together with [[Technical Team]]) ==&lt;br /&gt;
Agenda [[FT/TT meeting minutes Feb 17th 2011|Minutes]]&lt;br /&gt;
# Review task list from last meeting&lt;br /&gt;
# Mercurial directories&lt;br /&gt;
# Test framework&lt;br /&gt;
# Integration of Bug Fixes and review of new functionality&lt;br /&gt;
# Migration Tool &lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20110224 (together with [[Technical Team]]) ==&lt;br /&gt;
Agenda [[FT/TT meeting minutes Feb 24th 2011|Minutes]]&lt;br /&gt;
# Migration Tool &lt;br /&gt;
# Status of renaming in Mercurial/ Mercurial directories&lt;br /&gt;
# Review task list from last meeting&lt;br /&gt;
# Test framework&lt;br /&gt;
# Integration of Bug Fixes and review of new functionality&lt;br /&gt;
# Misc&lt;br /&gt;
&lt;br /&gt;
== 20110303 (together with [[Technical Team]]) ==&lt;br /&gt;
&lt;br /&gt;
Agenda [[FT/TT meeting minutes March 3rd 2011|Minutes]]&lt;br /&gt;
# General&lt;br /&gt;
# Mike McKay as Functional Team member&lt;br /&gt;
# ADempiere Server Test&lt;br /&gt;
# Testing framework evaluation status&lt;br /&gt;
# Starting with the revision the pacth a new mercurial&lt;br /&gt;
# PMC in Adempiere wiki&lt;br /&gt;
# Next meeting&lt;br /&gt;
&lt;br /&gt;
[[Category: community]]&lt;br /&gt;
[[Category: Community Contract]]&lt;br /&gt;
[[Category: Functional Team]]&lt;/div&gt;</description>
			<pubDate>Tue, 15 Mar 2011 15:11:43 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/Talk:Functional_Team</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Paid On-Site ADempiere User training(1 week) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me =&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month.&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site Flash ADempiere User training(1 day) ==&lt;br /&gt;
* 400 EUR + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+01) Introduction to ADempiere user interface.&lt;br /&gt;
+02) How to setup new Company in ADempiere.&lt;br /&gt;
+03) How to setup new Organization in ADempiere.&lt;br /&gt;
+04) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
+05) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
+06) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
+07) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
+08) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
+09) How to create Purchase Order.&lt;br /&gt;
+10) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
+11) How to create Material Receipt.&lt;br /&gt;
+12) How to create Invoice (Vendor)&lt;br /&gt;
+13) How to create Sales Order.&lt;br /&gt;
+14) How to create Shipment (Customer).&lt;br /&gt;
+15) How to create Invoice (Customer).&lt;br /&gt;
+16) How to create Payment.&lt;br /&gt;
+17) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
+18) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
+19) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
+20) How to create Bank Account and Bank transaction.&lt;br /&gt;
+21) How to create Users and assign User permissions. (Needed in order to be able to experiment afterwards)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Tue, 01 Mar 2011 06:16:16 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>User:Trifonnt</title>
			<link>http://www.adempiere.com/User:Trifonnt</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Paid on site ADempiere User training */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;width: 100%;background:#f6f6f6;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 33%;border:solid silver;background:#fff;vertical-align:top;&amp;quot;|&lt;br /&gt;
{{SummaryView|My Pages|&lt;br /&gt;
* Trifon's projects based on Compiere/Adempiere : [[User:Trifonnt/Projects]].&lt;br /&gt;
* Trifon's Recent thoughts : [[User:Trifonnt/MyThoughts]]&lt;br /&gt;
* Adempiere trackers : [[User:Trifonnt/MyTrackers]]&lt;br /&gt;
* My favorite readings: [[User:Trifonnt/MyReadings|Page 1]], [[User:Trifonnt/MyReadings2|Page 2]] and [[User:Trifonnt/MyReadings3|Page 3]]&lt;br /&gt;
* See my special page for you: [[User:Trifonnt/Howtos Hints|Howtos and Hints]].&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Userboxtop}}&lt;br /&gt;
{{User real name|Trifon Nikolaev Trifonov}}&lt;br /&gt;
{{User Bulgaria}}&lt;br /&gt;
{{User en}}&lt;br /&gt;
{{User bg}}&lt;br /&gt;
{{User council}}&lt;br /&gt;
{{User IT Consultant}}&lt;br /&gt;
{{User developer}}&lt;br /&gt;
{{User Sourceforge|http://sourceforge.net/users/trifonnt/}}&lt;br /&gt;
{{User Wikipedia|http://en.wikipedia.org/wiki/User:Trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{User Facebook|http://www.facebook.com/trifonnt}}&lt;br /&gt;
{{User Blogspot|http://trifonnt.blogspot.com}}&lt;br /&gt;
{{User Twitter|http://www.twitter.com/trifonnt}}&lt;br /&gt;
&lt;br /&gt;
{{Userboxbottom}}&lt;br /&gt;
&lt;br /&gt;
= About Me =&lt;br /&gt;
* High School of Economics and Computer Science. It helped me to understand accounting and economics.&lt;br /&gt;
* Bachelor degree in Mathematics. Helped me to like mathematics and especially cryptography. Attended many courses in programming, which helped me to became good developer.&lt;br /&gt;
* SUN Certified Programmer 1.4. Maybe should try to pass other Certifications programs... But no time last years.&lt;br /&gt;
&lt;br /&gt;
I started my first company in 2006 year providing ADempiere/Compiere consultancy, training and development services.&lt;br /&gt;
I like developing business systems and traveling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Some nice words about me on the net :) ==&lt;br /&gt;
* [http://compjuta.wordpress.com/2009/01/09/adempiere_a_new_beginning/ Adempiere - a new beginning]&lt;br /&gt;
&lt;br /&gt;
== My Blogs ==&lt;br /&gt;
* [http://trifonnt.blogspot.com/ My blog in blogspot]&lt;br /&gt;
** [http://trifonnt.blogspot.com/2007/08/compiere-begging-of-end.html Compiere - Beginning of the end!] Bye, Bye Compiere Inc. no more Open Source. Actually you never understood what it really means.&lt;br /&gt;
** [http://test-edi.blogspot.com/ EDI test]&lt;br /&gt;
&lt;br /&gt;
* [http://www.jroller.com/trifon My blog in jroller.com]&lt;br /&gt;
&lt;br /&gt;
= Trifon's Paid Services =&lt;br /&gt;
&lt;br /&gt;
== ADempiere Technical Support ==&lt;br /&gt;
This support consists of answering questions and providing advices.&lt;br /&gt;
Unlimited number of questions.&lt;br /&gt;
Technical support is available monthly or in chunks of 6 and 12 months from the Adempiere developer, Trifon Trifonov.&lt;br /&gt;
For the duration, you can ask Trifon direct questions via a special support mailing address.&lt;br /&gt;
Contact is email-only and replies are sent within one business day, often within hours.&lt;br /&gt;
&lt;br /&gt;
Prices:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 month ADempiere tech support  :  500 USD&lt;br /&gt;
6 months ADempiere tech support : 2700 USD - 10% discount&lt;br /&gt;
12 months ADempiere tech support: 4800 USD - 20% discount&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contract based ADempiere Support ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Included 5 support hours per month. Hours above that are at 40 euro per hour.&lt;br /&gt;
* Up to 10 registered ADempiere users.&lt;br /&gt;
* One contact person from the side of the customer.&lt;br /&gt;
* Communication channels: Phone, Email, Skype, Ticketing system.&lt;br /&gt;
* Free bugfixes.&lt;br /&gt;
* Free migration to next version of ADempiere.&lt;br /&gt;
* Free installation of ADempiere on customer server.&lt;br /&gt;
* Free integration with [http://www.oscommerce.com/ osCommerce].&lt;br /&gt;
* Free integration with [http://docs.google.com/ Google Documents]. User can import data from Google Docs and Spreadsheets.&lt;br /&gt;
* Free integration with [http://www.google.com/calendar/ Google Calendar]. All events created in Adempiere calendar are exported to Google Calendar.&lt;br /&gt;
&lt;br /&gt;
* Optional - Dedicated Server&lt;br /&gt;
** 130 EURO per month.&lt;br /&gt;
** 650 EURO server setup fee.&lt;br /&gt;
** 4 GB RAM.&lt;br /&gt;
** 2 x 250 GB HDD. Hardware-RAID 1.&lt;br /&gt;
** Traffic 5 000 GB.&lt;br /&gt;
&lt;br /&gt;
== ADempiere customized with client's own brand ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Client must send two images.&lt;br /&gt;
* Services created for small and mid-sized implementation companies which do not have own java developers and find modifying of source code impossible task.&lt;br /&gt;
* [[Adempiere Images]]&lt;br /&gt;
&lt;br /&gt;
== ADempiere Virtual Appliance ==&lt;br /&gt;
* Fully setup and ready to use Adempiere!&lt;br /&gt;
* Standard users: Garden Admin and Garden Users can send emails!&lt;br /&gt;
&lt;br /&gt;
* VMWare with Linux - Fedora Core - 5/7&lt;br /&gt;
* Adempiere&lt;br /&gt;
* Sun JDK&lt;br /&gt;
* Database - Oracle or Postgres&lt;br /&gt;
* Jakarta James email server&lt;br /&gt;
* Price 45 EURO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== On demand Adempiere build ==&lt;br /&gt;
* Please call for the price.&lt;br /&gt;
* Build of Adempiere upon user request.&lt;br /&gt;
* 10% will be donated to Adempiere.&lt;br /&gt;
* Build can include additional functionality like Fixed Asset or other not included in trunk.&lt;br /&gt;
&lt;br /&gt;
== Adempiere DVD by Trifon ==&lt;br /&gt;
* Price is: 30 EURO + shipping cost to your place or only 30 EUR and download from FTP Server.&lt;br /&gt;
* DVD with complete Adempiere sources, Eclipse IDE and Sun JDK. &lt;br /&gt;
* Available version for Linux and Windows.&lt;br /&gt;
* Jakarta James email server.&lt;br /&gt;
* Please contact me if you would like to have it.&lt;br /&gt;
&lt;br /&gt;
Developer need to copy one directory to his local hard drive and can start customizing Adempiere.&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere Urgent support ==&lt;br /&gt;
* 3 EURO per minute.&lt;br /&gt;
&lt;br /&gt;
* Need urgent advice for your Adempiere implementation or need to talk with experienced Adempiere developer &amp;amp;#45; call now to get friendly help&amp;amp;#46; Ask for Trifon&amp;amp;#46;&lt;br /&gt;
* [http://www.skype.com/go/joinskypeprime?call&amp;amp;skypename=trifonnt Use Skype Prime service to call now.]&lt;br /&gt;
* [http://skypeprime.skype.com/ More info about Skype Prime]&lt;br /&gt;
* [http://share.skype.com/sites/en/2007/03/skype_prime_beta_introducing_t.html Skype Prime Beta — introducing the global expertise marketplace]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.bitwine.com/advisors/trifonnt?auid=25850&amp;amp;amp;ctx=button http://www.bitwine.com/presence/1/25850.gif] 3 EUR per minute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.ether.com Ether] Another pay per call service&lt;br /&gt;
&lt;br /&gt;
== Paid On-Site ADempiere User training(1 week) ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) General overview of ADempiere ERP-CRM system.&lt;br /&gt;
02) Introduction to user interface.&lt;br /&gt;
03) How to setup new Company in ADempiere.&lt;br /&gt;
04) How to setup new Organization in ADempiere.&lt;br /&gt;
05) How to create and import Chart of Accounts. Introduction to ADempiere Chart of Accounts Editor.&lt;br /&gt;
06) How to create new Product, Product Category and set Product Price and Price List.&lt;br /&gt;
07) How to create hierarchical Categories of Services and Products (categories, subcategories, etc)&lt;br /&gt;
08) How to import Products from external sources/systems.&lt;br /&gt;
09) How to create Discount Schema and Price List and apply specific discount/overcharge for specific Product Group/Product, e.t.c. How to create Discount based on a percent or fixed amount.&lt;br /&gt;
10) How to create new Business Partner(Client, Vendor and Employee).&lt;br /&gt;
11) How set credit limit for Business Partners. Apply a credit limit to a client and ADempiere lock sales when limit is reached.&lt;br /&gt;
12) How to assign discount to specific Business Partner, and change it in every sell.&lt;br /&gt;
13) How to import Business Partners from external sources/systems.&lt;br /&gt;
14) How to create Purchase Order.&lt;br /&gt;
15) How to track purchases: list purchases that are not received, due dates.&lt;br /&gt;
15) How to create Material Receipt.&lt;br /&gt;
16) How to create Invoice (Vendor)&lt;br /&gt;
17) How to enter Landed Costs.&lt;br /&gt;
18) How to create Sales Order.&lt;br /&gt;
19) How to create Shipment (Customer).&lt;br /&gt;
20) How to create Shipment Confirmation.&lt;br /&gt;
21) How to create Invoice (Customer).&lt;br /&gt;
22) how to enter RMA.&lt;br /&gt;
23) How to create Payment.&lt;br /&gt;
24) How to match Purchase Order - Material Receipt - Invoice (Vendor).&lt;br /&gt;
25) How to match Sales Order - Shipment - Invoice (Customer).&lt;br /&gt;
26) How to create Cash Payment and Cash Receipt.&lt;br /&gt;
27) How to create Bank Account and Bank transaction.&lt;br /&gt;
28) How to modify Print Format of documents.&lt;br /&gt;
29) How to setup emails of ADempiere users and send emails with attached document(Purchase Order, Invoice, e.t.c) to clients.&lt;br /&gt;
30) How to create Users and assign User permissions.&lt;br /&gt;
31) How to setup Window, Tab and Field permissions for specific Roles and Users.&lt;br /&gt;
32) How to share data between Organizations and users.&lt;br /&gt;
33) How to setup records to be readable only by their creators.&lt;br /&gt;
34) How to setup taxes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Training_Courses&lt;br /&gt;
** http://www.adempiere.com/wiki/index.php/Implementation_Manuals&lt;br /&gt;
&lt;br /&gt;
== Paid on site Adempiere Developer training ==&lt;br /&gt;
* 1500 EUR per week + ticket + hotel&lt;br /&gt;
* Training plan customized to fit client needs.&lt;br /&gt;
* Example training plan:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01) Overview of Adempiere setup in Eclipse.&lt;br /&gt;
02) Layers in adempiere and where clases are located in the source tree?&lt;br /&gt;
2.1) Model (Domain) layer.&lt;br /&gt;
2.2) Business logic layer.&lt;br /&gt;
2.3) GUI - Swing layer.&lt;br /&gt;
2.4) GUI - Web layer.&lt;br /&gt;
03) How to add new table and columns in Adempiere?&lt;br /&gt;
04) How to generate Adempiere model classes for the newly created table?&lt;br /&gt;
05) How to add validation, pre-pressing and post-processing logic for the new table?&lt;br /&gt;
    (beforeSave, afterSave, beforeDelete afterDelete)&lt;br /&gt;
    ModelValidator&lt;br /&gt;
06) How to add new Window, Tab and Fields?&lt;br /&gt;
06.1) How to add new Tab which has Tree?&lt;br /&gt;
06.2) How to add Translation Tab?&lt;br /&gt;
07) How to add GUI callout?&lt;br /&gt;
08) How to define new Document in Adempiere?&lt;br /&gt;
09) How to add business logic for the newly created document?&lt;br /&gt;
10) How to add Process in Adempiere?&lt;br /&gt;
11) How to add java code for the newly defined process?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paid Adempiere development ==&lt;br /&gt;
* 300 EURO / day&lt;br /&gt;
* Please call for discount if you plan to book more than 150 hours&lt;br /&gt;
&lt;br /&gt;
== Paid EDI @ ADempiere support and training ==&lt;br /&gt;
* If you need training or support for EDI in Adempiere, please do not hesitate to contact me.&lt;br /&gt;
* Prices start from 30 EUR per hour.&lt;br /&gt;
&lt;br /&gt;
== Paid [http://www.liferay.com Liferay] setup and extensions development ==&lt;br /&gt;
* Leading Open Source Enterprise Portal&lt;br /&gt;
* JSR-168 compliant&lt;br /&gt;
* Business Friendly Open Source License: MIT License&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paid OpenXava Development ==&lt;br /&gt;
* Development of custom applications based on [http://www.gestion400.com/web/guest/openxava OpenXava framework].&lt;br /&gt;
&lt;br /&gt;
* Suitable for:&lt;br /&gt;
** Small applications which need to be developed from scratch&lt;br /&gt;
** Development of applications which must be part of a [http://en.wikipedia.org/wiki/Web_portal Web Portal].&lt;br /&gt;
** Applications based on OpenXava can run on any DB which is supported by [http://www.hibernate.org/ Hibernate].&lt;br /&gt;
** Licensed under LGPL. You can develop commercial application using OpenXava.&lt;br /&gt;
&lt;br /&gt;
* Features:&lt;br /&gt;
** Applications based on OpenXava can choose [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_3.0.2C_final_release_.282006-05-02.29 EJB3 JPA], [http://www.hibernate.org/ Hibernate] or [http://en.wikipedia.org/w/index.php?title=Enterprise_JavaBean#EJB_2.1.2C_final_release_.282003-11-24.29 EJB2 CMP] as persistence engine.&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava have [http://en.wikipedia.org/wiki/Multitier_architecture Multitier architecture] or [http://en.wikipedia.org/wiki/Client-server_architecture Client-server architecture].&lt;br /&gt;
&lt;br /&gt;
** Applications based on OpenXava can run on any application server (Tomcat, JBoss, WebSphere, etc).&lt;br /&gt;
&lt;br /&gt;
** Applications based on Openxava have easy integration of reports made with JasperReports.&lt;br /&gt;
&lt;br /&gt;
=== Trifon's contributions to OpenXava ===&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1749402&amp;amp;group_id=123187&amp;amp;atid=695746 1749402 - GUI display field size]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/forum/forum.php?thread_id=1755705&amp;amp;forum_id=419691 Bulgarian flag]&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1784323&amp;amp;group_id=123187&amp;amp;atid=695746 1784323 - Generate constant PROPERTY_Xxx in java interfaces] Will be part of OpenXava 2.2.2 release.&lt;br /&gt;
&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
== Paid Java Development ==&lt;br /&gt;
* Development of java applications.&lt;br /&gt;
* Please contact me for quotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ADempiere =&lt;br /&gt;
=== Performance tests &amp;amp; results made by me ===&lt;br /&gt;
This are slower than on my laptop. &lt;br /&gt;
On laptop result was around 17 products / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Processors..........: 2 x Pentium2 800MHz&lt;br /&gt;
RAM.................: 2 GB&lt;br /&gt;
OS..................: Linux, Fedora Core 5&lt;br /&gt;
DB..................: Oracle XE&lt;br /&gt;
JDK.................: Sun JDK 1.5.0_11&lt;br /&gt;
Adempiere version...: 3.3.0&lt;br /&gt;
Note................: Adempiere client on the same machine as DB.&lt;br /&gt;
&lt;br /&gt;
Tables where records are inserted: &lt;br /&gt;
AD_TREENODEPR     1095095&lt;br /&gt;
M_PRODUCT         1095095&lt;br /&gt;
M_PRODUCT_ACCT    1095095&lt;br /&gt;
M_PRODUCT_TRL     1095095&lt;br /&gt;
&lt;br /&gt;
Performance table&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 04:57:01 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 05:13:54 EEST 2007&lt;br /&gt;
Duration(ms)    = 1012585&lt;br /&gt;
Duration(sec.)  = 1012&lt;br /&gt;
Duration(min.)  = 16&lt;br /&gt;
Products        = 5000&lt;br /&gt;
Time(seconds)   = 1012&lt;br /&gt;
Produsts/Second = 4.9407115&lt;br /&gt;
&lt;br /&gt;
Start Time      = Thu Aug 09 05:17:04 EEST 2007&lt;br /&gt;
End Time        = Thu Aug 09 09:14:23 EEST 2007&lt;br /&gt;
Duration(ms)    = 14239657&lt;br /&gt;
Duration(sec.)  = 14239&lt;br /&gt;
Duration(min.)  = 237&lt;br /&gt;
Products        = 144000&lt;br /&gt;
Time(seconds)   = 14239&lt;br /&gt;
Produsts/Second = 10.11307 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 03:43:13 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 07:42:25 EEST 2007&lt;br /&gt;
Duration(ms)     = 14351454&lt;br /&gt;
Duration(sec.)   = 14351&lt;br /&gt;
Duration(min.)   = 239&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 239&lt;br /&gt;
Produsts/Second  = 10.03&lt;br /&gt;
 &lt;br /&gt;
Start Time       = Fri Aug 10 13:00:23 EEST 2007&lt;br /&gt;
End Time         = Fri Aug 10 16:58:42 EEST 2007&lt;br /&gt;
Duration(ms)     = 14298664&lt;br /&gt;
Duration(sec.)   = 14298&lt;br /&gt;
Duration(min.)   = 238&lt;br /&gt;
Duration(hours.) = 3&lt;br /&gt;
Products         = 144000&lt;br /&gt;
Time(seconds)    = 14298&lt;br /&gt;
Produsts/Second  = 10.071339&lt;br /&gt;
&lt;br /&gt;
Start Time       = Fri Aug 10 19:59:38 EEST 2007&lt;br /&gt;
End Time         = Sat Aug 11 03:59:55 EEST 2007&lt;br /&gt;
Duration(ms)     = 28817002&lt;br /&gt;
Duration(sec.)   = 28817&lt;br /&gt;
Duration(min.)   = 480&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 28817&lt;br /&gt;
Produsts/Second  = 9.994101&lt;br /&gt;
&lt;br /&gt;
Start Time       = Sat Aug 11 17:53:38 EEST 2007&lt;br /&gt;
End Time         = Sun Aug 12 02:18:17 EEST 2007&lt;br /&gt;
Duration(ms)     = 30278812&lt;br /&gt;
Duration(sec.)   = 30278&lt;br /&gt;
Duration(min.)   = 504&lt;br /&gt;
Duration(hours.) = 8&lt;br /&gt;
Products         = 288000&lt;br /&gt;
Time(seconds)    = 30278&lt;br /&gt;
Produsts/Second  = 9.511857&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=7529055 post regarding import performance]&lt;br /&gt;
&lt;br /&gt;
==== Issues found ====&lt;br /&gt;
* Posterita WP POS expect that TAX Category has only one Tax Rate assigned to it.&lt;br /&gt;
* Posterita create AR Invoice while POS Order type in Adempiere creates Invoice Indirect. This allows to distinguish Invoices creates by POS. Of course Business partner also can allow sot distinguish POS invoices, but more consitent behavior is to create Invoice Indirect.&lt;br /&gt;
&lt;br /&gt;
==== Comparison of Posterita Web UI and Robert Klein Ajax Web UI ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4664348 sf.net post]&lt;br /&gt;
&lt;br /&gt;
* Robert Klein Ajax is more usable than Posterita WebUI&lt;br /&gt;
** Attachment works in Robert Klein but not in Posterita.&lt;br /&gt;
** Grid of Posterita is mess up.&lt;br /&gt;
** Scrolling and navigation are mess up in Posterita.&lt;br /&gt;
** Decimal point of numeric has many zeros in Posterita. &lt;br /&gt;
** Robert Klein Web UI runs fast than Posterita.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes about installation ====&lt;br /&gt;
* One Business partner must have column AD_OrgBP_ID set to Organization which is set in POS Terminal.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT C_BPartner_ID FROM C_BPartner WHERE AD_OrgBP_ID=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Execution of migration scripts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\001_ad_changes.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.0-1.5 (AD331b)\oracle\003_m_pricelist.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\001_ad_Changes for C_Currency.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\002_ad_message.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.6(AD340)\oracle\003_C_Currency.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.0\oracle\001_MixedPayment.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\002_Terminals_newTableStructure.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\003_Terminals_TransferConfiguration.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\004_Terminals_newTableDDL.sql&amp;quot;&lt;br /&gt;
@&amp;quot;1.7.0\oracle\005_Messages.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.1\oracle\001_M_Inventory.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;1.7.2\oracle\001_ADRole.sql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
@&amp;quot;trunk\oracle\002_ADMessage.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\003_AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\004_AD_Changes for AD_OrgInfo.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\005_MissingIDs.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\006_PackSize_MProduct.sql&amp;quot;&lt;br /&gt;
@&amp;quot;trunk\oracle\007_CashPayment.sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Values of web.xml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Client_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Language&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;en_US&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Org_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_User_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt; &amp;lt;!-- GardenUSer --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#C_BankAccount_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;100&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#SalesRep_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;102&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#AD_Role_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;103&amp;lt;/param-value&amp;gt; &amp;lt;!-- Garden User --&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;#W_Store_ID&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;11&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
	&amp;lt;context-param&amp;gt;&lt;br /&gt;
		&amp;lt;param-name&amp;gt;REPORT_DIRECTORY&amp;lt;/param-name&amp;gt;&lt;br /&gt;
		&amp;lt;param-value&amp;gt;/config/reports/&amp;lt;/param-value&amp;gt;&lt;br /&gt;
	&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to setup?&lt;br /&gt;
Explained by Colin in irc:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-01) Login as System Admin and add new window for the table &amp;quot;U_POSTerminal&amp;quot;.&lt;br /&gt;
-02) Use the &amp;quot;Create Fields&amp;quot; button on the &amp;quot;Tab&amp;quot; tab to add all the fields of this table.&lt;br /&gt;
-03) Go to System Admin-&amp;gt;Gerenral Rules-&amp;gt;System Rules-&amp;gt;Menu window and create a new menu item.&lt;br /&gt;
-04) Select Window as the Action and point it to the new window you just created (by selecting it in the window dropdown).&lt;br /&gt;
-05) Log out and log back in as Garden Admin.&lt;br /&gt;
-06) Using you new window create a new POS terminal. Chose what ever you wish for the settings.&lt;br /&gt;
-07) Go to Quote-to-Invoice-&amp;gt;Sales Orders-&amp;gt;Web POS-&amp;gt;&lt;br /&gt;
-08) Go to the role menu here and create a new record with &amp;quot;Web Menu&amp;quot;=smenu.cash.sales and &amp;quot;Role&amp;quot; = &amp;quot;GardenWorld Admin&amp;quot;.&lt;br /&gt;
     Uou can add more if you wish but I think this is all that's needed for basic sales.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Printing&lt;br /&gt;
&lt;br /&gt;
Edit java.policy in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Program Files\Java\jdk1.6.0_10\jre\lib\security&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the code below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grant codeBase &amp;quot;http://192.168.0.100&amp;quot; {&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;org.jpedal.rejectsuperimposedimages&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
       permission java.util.PropertyPermission &amp;quot;file.separator&amp;quot;, &amp;quot;read, write&amp;quot;;&lt;br /&gt;
OR&lt;br /&gt;
       permission java.security.AllPermission;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Seats/tables in a restaurant (or plane or cinema) ===&lt;br /&gt;
&lt;br /&gt;
In my opinion the seat/table numbering problematic could be solved with the help of the entities AccommodationClass, AccommodationMap  described in the book vol2. I will give you a short description of these entities and example of the &amp;quot;numbering issue&amp;quot; solution.&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - description:&lt;br /&gt;
It is designed to store classes information (these could be plane, bus classes, table types, chair types, room types etc)&lt;br /&gt;
&lt;br /&gt;
AccommodationClass - definition (based on the book but modified a little)&lt;br /&gt;
fields: accClassId, parentAccClassId, description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AccommodationMap - description:&lt;br /&gt;
Its idea is to provide information of the number of spaces offered by a fa/accClass. Here we can extend it to provide overbooking information and seat numbering information(the last two fields in the definition below)&lt;br /&gt;
fields: mapId, accClassId, faId, nrOfSpaces, overBooked, number&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Define two tables.&lt;br /&gt;
 - Table number 5 has 3 chairs. Chair with number 1 is baby_chair. The other two chairs with number 2 and 3 are high_chairs.&lt;br /&gt;
 - Table number 9 has 2 chairs. Chairs number 1 and 2 are normal_chairs.&lt;br /&gt;
&lt;br /&gt;
In FixedAsset relate the tables to the chairs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FixedAsset:fixedAssetId=table1,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=table2,  parentFixedAssetId=NULL&lt;br /&gt;
FixedAsset:fixedAssetId=chair11, parentFixedAssetId=table1 //chair11 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair12, parentFixedAssetId=table1 //chair12 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair13, parentFixedAssetId=table1 //chair13 belongs to table1&lt;br /&gt;
FixedAsset:fixedAssetId=chair14, parentFixedAssetId=table2 //chair14 belongs to table2&lt;br /&gt;
FixedAsset:fixedAssetId=chair15, parentFixedAssetId=table2 //chair15 belongs to table2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Accommodationclass define the table/chair classes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationClass: accClassId=tables,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=chairs,        parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=plane_classes, parentAccClassId=NULL&lt;br /&gt;
AccommodationClass: accClassId=baby_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=high_chair,    parentAccClassId=chairs;&lt;br /&gt;
AccommodationClass: accClassId=normal_chair,  parentAccClassId=chairs;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In AccommodationMap define how many places each table or chair has and which is its number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table1,  nrOfSpaces=3, number=5 //table number 5 has 3 chairs(faId=table1)&lt;br /&gt;
AccommodationMap: accClassId=baby_chair,    fixedAssetId=chair11, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair11)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair12, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair12)&lt;br /&gt;
AccommodationMap: accClassId=high_chair,    fixedAssetId=chair13, nrOfSpaces=1, number=3 //chair number 3 has one place(faId=chair13)&lt;br /&gt;
AccommodationMap: accClassId=tables,        fixedAssetId=table2,  nrOfSpaces=2, number=9 //table number 9 has two places(faId=table2)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair14, nrOfSpaces=1, number=1 //chair number 1 has one place(faId=chair14)&lt;br /&gt;
AccommodationMap: accClassId=normal_chair,  fixedAssetId=chair15, nrOfSpaces=1, number=2 //chair number 2 has one place(faId=chair15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In similar fashion you can define theaters, planes etc. &lt;br /&gt;
Also overbooking data could be kept in the AccommodationMap entity which could be used for hotel reservations. Hourly reservations could be enabled as well with the introduction of the AccommodationSpot entity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How to import product from csv file? ====&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=5507588 sf.net post]&lt;br /&gt;
&lt;br /&gt;
MySQL script commands to import a simple CSV spreadsheet of products and a collection of image files.&lt;br /&gt;
&lt;br /&gt;
CSV file MUST have these columns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REFERENCE*, NAME*, PRICEBUY, PRICESELL, BARCODE*, CATEGORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns with a * must have different values for every product, otherwise the script will fail.&lt;br /&gt;
The category IDs in the CSV file also have to match the IDs in the 'categories' database table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD DATA&lt;br /&gt;
 INFILE 'C:\\temp\\products.csv'&lt;br /&gt;
 INTO TABLE products&lt;br /&gt;
 FIELDS TERMINATED BY ','&lt;br /&gt;
 LINES TERMINATED BY '\r\n'&lt;br /&gt;
 (REFERENCE, NAME, PRICEBUY, PRICESELL, CODE, CATEGORY)&lt;br /&gt;
 SET ID = UUID(), TAXCAT = '001', ISCOM = 0, ISSCALE = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# the images are loaded by searching a directory for files that have the same names as the products&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SET @IMAGE_DIR = 'C:\\temp\\products\\images\\';&lt;br /&gt;
UPDATE products&lt;br /&gt;
 SET IMAGE = IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.jpg')),&lt;br /&gt;
             IFNULL(LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.png')),&lt;br /&gt;
                    LOAD_FILE(CONCAT(@IMAGE_DIR, products.NAME, '.gif'))))&lt;br /&gt;
 WHERE IMAGE IS NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# to make the products appear in the catalog, their ids must be added to this table&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO products_cat (PRODUCT)&lt;br /&gt;
 SELECT products.ID FROM products;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OsCommerce db settings ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/www/html/admin/includes/configure.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas in MySQL DB where OsCommerce is installed ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
information_schema&lt;br /&gt;
mysql&lt;br /&gt;
oscomm&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== osCommerce Tables ===&lt;br /&gt;
==== products ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
products_quantity		int(4)&lt;br /&gt;
products_model			varchar(12)&lt;br /&gt;
products_image			varchar(64)&lt;br /&gt;
products_price			decimal(15,4)&lt;br /&gt;
products_date_added		datetime&lt;br /&gt;
products_last_modified		datetime&lt;br /&gt;
products_date_available		datetime&lt;br /&gt;
products_weight			decimal(5,3)&lt;br /&gt;
products_status			tinyint(1)&lt;br /&gt;
products_tax_class_id		int(11)&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
products_ordered		int(11)&lt;br /&gt;
products_quanityt_discount	varchar(255)&lt;br /&gt;
products_weight_package		varchar(255)&lt;br /&gt;
products_status_hide		tinyint(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== products_description ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
products_id			int(11)&lt;br /&gt;
language_id			int(11)&lt;br /&gt;
products_name			varchar(128)&lt;br /&gt;
products_description		text&lt;br /&gt;
products_description_short	text&lt;br /&gt;
products_url			varchar(255)&lt;br /&gt;
products_viewed			int(5)&lt;br /&gt;
products_status_translation	tinyint(1)&lt;br /&gt;
products_meta_title		varchar(255)&lt;br /&gt;
products_meta_keywords		text&lt;br /&gt;
products_meta_description	text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tax_class ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tax_class_id			int(11)&lt;br /&gt;
tax_class_title			varchar(32)&lt;br /&gt;
tax_class_description		varchar(255)&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
date_added			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
manufacturers_name		varchar(32)&lt;br /&gt;
manufacturers_image		varchar(64)&lt;br /&gt;
date_added			datetime&lt;br /&gt;
last_modified			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== manufacturers_info ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manufacturers_id		int(11)&lt;br /&gt;
languages_id			int(11)&lt;br /&gt;
manufacturers_url		varchar(255)&lt;br /&gt;
url_clicked			int(5)&lt;br /&gt;
date_last_click			datetime&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== languages ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
languages_id	int(11)&lt;br /&gt;
name			varchar(32)&lt;br /&gt;
code			char(2)&lt;br /&gt;
image			varchar(64)&lt;br /&gt;
directory		varchar(32)&lt;br /&gt;
sort_order		int(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eclipse Easy Shell plugin ==&lt;br /&gt;
* [http://pluginbox.sourceforge.net/plugins.html Easy Shell plugin]&lt;br /&gt;
* Settings for Linux in order to open proper terminal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gnome-terminal --working-directory {1}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Seetings for windows&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmd.exe /C start /D{1} cmd.exe /K &amp;quot;rxvt.exe -fn &amp;quot;Console&amp;quot; -vb +sb -sl 1000 -e bash -I&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eclipse Preprocessor Plugin ==&lt;br /&gt;
* [http://prebop.sourceforge.net/ Prebop Preprocessor]&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* $if isAdempiere $&lt;br /&gt;
  Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
$else$ */&lt;br /&gt;
  Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Adempiere Preprocessor Example code-2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			// =================&lt;br /&gt;
			/* $if isAdempiere $&lt;br /&gt;
			Env.setContext(Env.getCtx(), &amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);  // Adempiere&lt;br /&gt;
			$else$ */&lt;br /&gt;
			Env.getCtx().setContext(&amp;quot;#AD_User_ID&amp;quot;, CreatedBy_ID);       // Compiere&lt;br /&gt;
			/* $endif$ */&lt;br /&gt;
		}&lt;br /&gt;
		// =================&lt;br /&gt;
		/* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Client_ID&amp;quot;, AD_Client_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
	    // =================&lt;br /&gt;
	    /* $if isAdempiere $&lt;br /&gt;
		Env.setContext(Env.getCtx(), &amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);  // Adempiere&lt;br /&gt;
		$else$ */&lt;br /&gt;
		Env.getCtx().setContext(&amp;quot;#AD_Org_ID&amp;quot;, AD_Org_ID);       // Compiere&lt;br /&gt;
		/* $endif$ */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenXava hints =&lt;br /&gt;
&lt;br /&gt;
* Naming convention&lt;br /&gt;
&lt;br /&gt;
** Utility classes are in org.openxava.util package.&lt;br /&gt;
&lt;br /&gt;
** An utility class must be in plural and its methods have to be static.&lt;br /&gt;
&lt;br /&gt;
** Example utility class: For dates called Dates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava User hints ==&lt;br /&gt;
&lt;br /&gt;
=== Hint.1 How do to search in detail mode? ===&lt;br /&gt;
Click on 'new', fill the fields, and click on 'Search'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenXava Developer hints ==&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 Always use different properties names ====&lt;br /&gt;
Let's have component Organization&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Organization&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;orgName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and component Warehouse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;component name=&amp;quot;Warehouse&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;entity&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseId&amp;quot; type=&amp;quot;String&amp;quot; key=&amp;quot;true&amp;quot; hidden=&amp;quot;true&amp;quot; &amp;gt;&lt;br /&gt;
			&amp;lt;default-value-calculator class=&amp;quot;org.openxava.calculators.UUIDCalculator&amp;quot; on-create=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/property&amp;gt;&lt;br /&gt;
		&amp;lt;property name=&amp;quot;warehouseName&amp;quot; type=&amp;quot;String&amp;quot; size=&amp;quot;30&amp;quot; required=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by this way in Application_en.properties developer can define different names for properties:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
organizationId=Organization ID&lt;br /&gt;
orgName=Organization Name&lt;br /&gt;
warehouseId=Warehouse ID&lt;br /&gt;
warehouseName=Warehouse Name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
also it helps developer to understand well which exactly property he uses/modify.&lt;br /&gt;
&lt;br /&gt;
==== Hint.2 Always create by hand DB migration scripts. ====&lt;br /&gt;
ORM(Hibernate) tools do not create proper DB migration scripts.&lt;br /&gt;
&lt;br /&gt;
=== OpenXava Links &amp;amp; Info ===&lt;br /&gt;
* [http://openxava.wiki.sourceforge.net/ OpenXava Wiki page]&lt;br /&gt;
* [http://sourceforge.net/projects/qamanager/ qaProjectManager] Web based application used for keeping track of engineering and customer releases, Resource allocations and related information effectively in QA Projects. Powered by openXava.&lt;br /&gt;
&lt;br /&gt;
* Nice to have OpenXava features:&lt;br /&gt;
** Icon in header of each column indicating that column can be sorted.&lt;br /&gt;
** When hook over header of column to show more information for column. Information to be configured in OpenXava xml files.&lt;br /&gt;
** Ability to align labels in forums.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4563535 Interesting proposal regarding Actions]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==========================================================================================&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                          Actions:|1.- Pick              |&lt;br /&gt;
                                                                  |2.- Edit              |&lt;br /&gt;
                                                                  |3.- Copy              |&lt;br /&gt;
                                                                  |4.- Delete            |&lt;br /&gt;
                                                                  |5.- See (Detail mode) |&lt;br /&gt;
                                                                  +----------------------+&lt;br /&gt;
                                                                  |A.- Detail of Subjects|&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |B.- Send e-mail       |&lt;br /&gt;
     | ACTION |  ID | Pupil                  | Comments       |   |C.- Print curriculum  |&lt;br /&gt;
     +--------+-----+------------------------+----------------+   |D.- etc...            |&lt;br /&gt;
     |   A    |  1  | Eduard Escrihuela      | Firt pupil     |   +----------------------+&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |   C    |  2  | Enric Selfa            | Second pupil   |&lt;br /&gt;
     +--------+-----+------------------------+----------------+&lt;br /&gt;
     |  ..    | ..  | ..                     | ...            |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
                                                                       | EXECUTE ACTIONS |&lt;br /&gt;
                                                                       +-----------------+&lt;br /&gt;
==========================================================================================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see to the left a grid whith the LIST mode of the PUPILS and the FIRST field is the ACTION to apply to the records. The A action (Detail of subjects of this pupil) is selected for the first pupil and the B action (Printing of his curriculum) is selected for the second pupil.&lt;br /&gt;
 &lt;br /&gt;
The actions possible are detailed in the combo on the TOP RIGHT of the window. Options 1 to 5 are standard (always available by default). The rest of actions are specific to the model .  &lt;br /&gt;
&lt;br /&gt;
Finally there is a button for executing ALL the actions at the same time. &lt;br /&gt;
&lt;br /&gt;
The default actions are: &lt;br /&gt;
&lt;br /&gt;
1.-Pick: For instance to select a Customer for a invoice. By using this action you choose your customer and return to previous model (invoice) &lt;br /&gt;
&lt;br /&gt;
2.- Edit: To modifiy the record &lt;br /&gt;
&lt;br /&gt;
3.- Copy: To create a new record but previously copying the information of an existing record that is very similar to the new one &lt;br /&gt;
&lt;br /&gt;
4.- Delete: to delete the record &lt;br /&gt;
&lt;br /&gt;
5.- See: To see the record in detail mode and READ ONLY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DB change/migration tracking =&lt;br /&gt;
&lt;br /&gt;
== Liquibase ==&lt;br /&gt;
* [http://www.liquibase.org/ http://www.liquibase.org]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
&lt;br /&gt;
=== Liquibase Questions and Hints ===&lt;br /&gt;
&lt;br /&gt;
==== Hint.1 How to update data? ====&lt;br /&gt;
Is there any way to update a row that already exists in a table (besides using &amp;lt;sql&amp;gt;)?&lt;br /&gt;
&lt;br /&gt;
Currently there is not. &lt;br /&gt;
I have considered creating an update tag but have not yet. &lt;br /&gt;
The main reason I did not create it originally is that it seemed to not add a lot of value over the standard &amp;lt;sql&amp;gt; update statement and created a lot of typing.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;update table=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;column name=&amp;quot;username&amp;quot; value=&amp;quot;newUsername&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;where&amp;gt;username = 'oldUsername'&amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
seems like a lot of work compared to &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sql&amp;gt;UPDATE person SET username='newUsername' WHERE username='oldUsername'&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that there is support for standardizing dates, Boolean values, etc. it may be worth creating however.&lt;br /&gt;
&lt;br /&gt;
== JSR-170 Note ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I am trying to get user atributes using the JSR-186 specified way.&lt;br /&gt;
Here is the extract from portlet.xml:&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.given&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.name.family&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.street&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.city&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.country&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.postal.organization&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&amp;lt;user-attribute&amp;gt;&lt;br /&gt;
  &amp;lt;name&amp;gt;user.business-info.telecom.telephone.number&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/user-attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the code to get user attributes:&lt;br /&gt;
&lt;br /&gt;
HashMap hmUserInfo = (HashMap)request.getAttribute(PortletRequest.USER_INFO);'&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_NAME_GIVEN));&lt;br /&gt;
log.debug(((String)hmUserInfo.get(UserAttributes.USER_NAME_FAMILY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_CITY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_COUNTRY));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_ORGANIZATION));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_POSTAL_STREET));&lt;br /&gt;
log.debug((String)hmUserInfo.get(UserAttributes.USER_BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER));&lt;br /&gt;
&lt;br /&gt;
Liferay return first/last names ONLY in spite of the fact that all other information is presented for this user.&lt;br /&gt;
I entered it using Organization Admin portlet.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kTable =&lt;br /&gt;
&lt;br /&gt;
== Move Table Header ==&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4581708 sf.net post]&lt;br /&gt;
&lt;br /&gt;
Create following Header Listener&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class HeaderListener implements Listener, ControlListener { &lt;br /&gt;
 &lt;br /&gt;
KTable table_ = null; &lt;br /&gt;
 &lt;br /&gt;
Point initPoint = null; &lt;br /&gt;
 &lt;br /&gt;
Tracker tracker = null; &lt;br /&gt;
 &lt;br /&gt;
public HeaderListener(KTable table) { &lt;br /&gt;
table_ = table; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDoubleClick(MouseEvent e) {  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseUp(int x , int y ) { &lt;br /&gt;
Point p = table_.getCellForCoordinates(x, y); &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Up &amp;quot; + p); &lt;br /&gt;
 &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &amp;amp;&amp;amp; &lt;br /&gt;
(p.x != initPoint.x) &amp;amp;&amp;amp; &lt;br /&gt;
(p.y == initPoint.y) &lt;br /&gt;
){ &lt;br /&gt;
 &lt;br /&gt;
//if (p.y == initPoint.y) { &lt;br /&gt;
System.out.println(&amp;quot;Move &amp;quot; + initPoint + &amp;quot; to &amp;quot; + p); &lt;br /&gt;
((SpanModel)table_.getModel()).switchColumn(p.x, initPoint.x); &lt;br /&gt;
} &lt;br /&gt;
initPoint = null; &lt;br /&gt;
//tracker.close(); &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseDown(Event e) { &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(e.x, e.y); &lt;br /&gt;
if ( &lt;br /&gt;
(p.y &amp;lt; table_.getModel().getFixedHeaderRowCount()) &amp;amp;&amp;amp;  &lt;br /&gt;
(p.x &amp;gt;= table_.getModel().getFixedHeaderColumnCount()) &lt;br /&gt;
) &lt;br /&gt;
initPoint = p; &lt;br /&gt;
 &lt;br /&gt;
System.out.println(&amp;quot;Down &amp;quot; + p); &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void mouseMove(Event event) {  &lt;br /&gt;
int JITTER = 8; &lt;br /&gt;
Display display = event.display; &lt;br /&gt;
Shell shell = display.getActiveShell(); &lt;br /&gt;
 &lt;br /&gt;
Rectangle tableLocation = display.map(table_, null, shell.getClientArea ()); &lt;br /&gt;
System.out.println(&amp;quot;table location &amp;quot; + tableLocation);  &lt;br /&gt;
 &lt;br /&gt;
Point p = table_.getCellForCoordinates(event.x, event.y);  &lt;br /&gt;
Rectangle rect = table_.getCellRect(p.x, p.y); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
int deltaX = initPoint.x - event.x, deltaY = initPoint.y - event.y; &lt;br /&gt;
if (Math.abs (deltaX) &amp;lt; JITTER &amp;amp;&amp;amp; Math.abs (deltaY) &amp;lt; JITTER) { &lt;br /&gt;
return; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
tracker = new Tracker (table_, SWT.LEFT | SWT.RIGHT); &lt;br /&gt;
 &lt;br /&gt;
tracker.setRectangles (new Rectangle [] {rect}); &lt;br /&gt;
tracker.open (); &lt;br /&gt;
//FALL THROUGH &lt;br /&gt;
 &lt;br /&gt;
Rectangle finalPosition = tracker.getRectangles()[0];  &lt;br /&gt;
System.out.println(finalPosition); &lt;br /&gt;
 &lt;br /&gt;
int posX = finalPosition.x + finalPosition.width / 2 ;//- tableLocation.x; &lt;br /&gt;
int posY = finalPosition.y + finalPosition.height / 2 ;//- tableLocation.y; &lt;br /&gt;
mouseUp (posX,posY); &lt;br /&gt;
 &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void handleEvent(Event event) { &lt;br /&gt;
switch (event.type) { &lt;br /&gt;
case SWT.MouseDown: &lt;br /&gt;
mouseDown((event)); &lt;br /&gt;
break; &lt;br /&gt;
case SWT.MouseMove: &lt;br /&gt;
if (initPoint == null) return; &lt;br /&gt;
mouseMove(event); &lt;br /&gt;
 &lt;br /&gt;
case SWT.MouseUp: &lt;br /&gt;
break; &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlMoved(ControlEvent e) { &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public void controlResized(ControlEvent e) { &lt;br /&gt;
// TODO Auto-generated method stub  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fork developers work in their free time! Excuse Me??? ==&lt;br /&gt;
What Compiere defenders think.&lt;br /&gt;
&lt;br /&gt;
Can you belive? I work for free? Please do not tell it to my wife... This is top secret.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/forum/message.php?msg_id=4468154 sf.net post] It looks that this post was deleted from Compiere forums. Compiere Inc. do not like what friends of Compiere think??? Just to prove that such post exist i posted whole post [https://sourceforge.net/forum/forum.php?thread_id=1799108&amp;amp;forum_id=611167 here]&lt;br /&gt;
&lt;br /&gt;
''Having been in the ERP game for a very long time, I just find the bazaar a bit too risky for real life scenario and most of the clever developers involved are doing out of free time. I honestly dont even have free time to write this email, but I guess some people have more free time than others. So what people do in their free times is entirely up to them? The product is becoming massive yes, and to expect the couple of clever developers to maintain it within their &amp;quot;free&amp;quot; time would be EXTREMELY risky for any  enterprise to put reliance on. Yes it may be more clever and even more transparent and yes many more extremely clever things will be released out of it. Question  though is who is going to maintain it in their free time over the next couple of years and who actually needs to get paid to support it.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Roses ==&lt;br /&gt;
1 роза - любов от пръв поглед;&lt;br /&gt;
2 рози - взаимна, дълбока любов;&lt;br /&gt;
3 рози - Обичам те!;&lt;br /&gt;
6 рози - искам да бъда твой;&lt;br /&gt;
7 рози - аз съм заслепен от теб;&lt;br /&gt;
9 рози - вечна любов, дълъг живот заедно;&lt;br /&gt;
10 рози - ти си перфектна;&lt;br /&gt;
11 рози - ти си моето съкровище, най-голямата любов в моя живот;&lt;br /&gt;
12 рози - бъди моя постоянна приятелка;&lt;br /&gt;
13 рози - таен обожател;&lt;br /&gt;
15 рози - аз съм наистина съжалявам, моля те не ме забравяй;&lt;br /&gt;
20 рози - повярвай ми, аз съм искрен с теб;&lt;br /&gt;
21 рози - аз съм отдаден на теб;&lt;br /&gt;
24 рози - не мога да спра да мисля за теб, мисля за теб денонощно;&lt;br /&gt;
33 рози - голяма привързаност;&lt;br /&gt;
36 рози - Ще помня нашите романтични моменти;&lt;br /&gt;
40 рози - Моята любов е истинска;&lt;br /&gt;
50 рози - любов изпълнена със съжаление;&lt;br /&gt;
99 рози - Ще те обичам до деня на смъртта;&lt;br /&gt;
100 рози - хармонична любов, останала запазена до дълбока старост;&lt;br /&gt;
101 рози - Ти си единствена за мен;&lt;br /&gt;
108 рози - Ще се омъжиш ли за мен?;&lt;br /&gt;
365 рози - не мога да спра да мисля за теб, всеки ден мисля за теб;&lt;br /&gt;
999 рози - вечна любов;&lt;br /&gt;
&lt;br /&gt;
= Site Meter =&lt;br /&gt;
&amp;lt;!-- Site Meter http://sm9.sitemeter.com/meter.asp?site=sm9trifon&amp;amp;i=t.gif --&amp;gt;&lt;br /&gt;
*[http://sm9.sitemeter.com/stats.asp?site=sm9trifon Site Meter]&lt;br /&gt;
&amp;lt;!-- Copyright (c)2006 Site Meter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://www.alexa.com/data/details/traffic_details/adempiere.com www.alexa.com]www.adempiere.com&lt;br /&gt;
&lt;br /&gt;
* [http://www.statcounter.com www.statcounter.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</description>
			<pubDate>Tue, 01 Mar 2011 06:11:03 GMT</pubDate>			<dc:creator>Trifonnt</dc:creator>			<comments>http://www.adempiere.com/User_talk:Trifonnt</comments>		</item>
		<item>
			<title>User:Trifonnt/MyReadings</title>
			<link>http://www.adempiere.com/User:Trifonnt/MyReadings</link>
			<description>&lt;p&gt;Trifonnt:&amp;#32;/* Hospital Information System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
* [http://www.onlamp.com/lpt/a/7005 Tools for Geographically Distributed Software Development]&lt;br /&gt;
* Geocode&lt;br /&gt;
** [http://googlemapsapi.blogspot.com/2006/06/geocoding-at-last.html Geocoding at last!]&lt;br /&gt;
&lt;br /&gt;
* [http://www.oasis-open.org/committees/ciq/ciq.html#6 OASIS Customer Information Quality Committee]&lt;br /&gt;
* [http://www.timeanddate.com/ Time and zone info]&lt;br /&gt;
* [http://coinmill.com/ Currency convert]&lt;br /&gt;
* [http://www.jonelo.de/java/nc/index.html NumericalChameleon] free, open source, platform-independent and localized software to convert units.&lt;br /&gt;
&lt;br /&gt;
* [http://www.x-rates.com Exchange Rates]&lt;br /&gt;
&lt;br /&gt;
* Open Source&lt;br /&gt;
** [http://jamesdixon.wordpress.com/2009/05/07/forking-protocol-why-when-and-how-to-fork-an-open-source-project/ Forking Protocol: Why, When, and How to Fork an Open Source Project]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* SVN - Subversion&lt;br /&gt;
** [http://ist.berkeley.edu/as/ag/tools/usage/svn-govern-commit-permission.html SVN Repositories: Governing Commit Permissons]&lt;br /&gt;
** [http://lijinjoseji.wordpress.com/2008/03/24/installing-subversion-just-follow-this-7-steps/ Installing Subversion? Just follow this 7 Steps]&lt;br /&gt;
** [http://www.bgoncalves.com/notes/2007/10/03/setting-up-your-very-own-subversion-repository/ Setting up your very own Subversion repository]&lt;br /&gt;
** [http://blog.vinodsingh.com/2008/07/svn-with-apache-ldap.html SVN with Apache + LDAP]&lt;br /&gt;
** [http://mpy-svn-stats.berlios.de/ mpy-svn]SVN statistics&lt;br /&gt;
** [http://www.howtogeek.com/howto/ubuntu/install-subversion-with-web-access-on-ubuntu/ Install Subversion with Web Access on Ubuntu]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.barcodeman.com/faq/2d.php 2d Barcode explained]&lt;br /&gt;
** [http://reader.kaywa.com/ Reader for Mobile phones with java]&lt;br /&gt;
** [http://www.squaregear.net/fonts/free3of9.shtml Barcode Font]&lt;br /&gt;
&lt;br /&gt;
* Barcode and Serial port&lt;br /&gt;
** [http://www.insideria.com/2009/11/barcode-scanner-support-for-fl.html Barcode Scanner Support for Flex]&lt;br /&gt;
** [http://www.communitymx.com/content/article.cfm?page=2&amp;amp;cid=8658A Controlling the Serial Port with PHP]&lt;br /&gt;
** [http://www.phpclasses.org/browse/package/3679.html PHP Serial]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://openqa.org/selenium/ OpenQA - Selenium] a test tool for web applications. Selenium tests run directly in a browser, just as real users do.&lt;br /&gt;
* [http://ketan.padegaonkar.name/2008/06/21/reusing-functional-tests-part-1.html Reusing Functional Tests - Part 1]&lt;br /&gt;
&lt;br /&gt;
* [http://winmerge.org/ WinMerge] My favorite diff tool.&lt;br /&gt;
&lt;br /&gt;
* [https://inmail24.com email] offer IMAP access&lt;br /&gt;
&lt;br /&gt;
* [http://www.alignjournal.com Align Journal]&lt;br /&gt;
&lt;br /&gt;
* [http://www.imagemagick.org/Usage/thumbnails/#polaroid ImageMagick v6 Examples -- Creating Thumbnails]ImageMagick® is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (over 100) including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, and TIFF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* OpenOffice interesting&lt;br /&gt;
** [http://books.evc-cit.info/ OASIS OpenDocument Essentials]&lt;br /&gt;
** [http://www.linux.com/feature/119718 A simple task manager for OpenOffice.org]&lt;br /&gt;
** [http://www.linux.com/feature/119245 Adding a basket tool to OpenOffice.org]&lt;br /&gt;
** [http://www.learnopenoffice.org/calccontents.htm OpenOffice Tutorials]&lt;br /&gt;
** [http://www.devx.com/opensource/Article/38178 Getting Started with XForms in OpenOffice]&lt;br /&gt;
** [http://www.devx.com/opensource/Article/38859 Generating Generic XForms for OpenOffice]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Excel interesting&lt;br /&gt;
** [http://www.contextures.com/xlNames01.html Names, Naming Ranges, Dynamic ranges]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.businesscreditcards.com/bootstrapper/the-100-tools-freelancers-cant-live-without/ The 100 Tools Freelancers Can’t Live Without]&lt;br /&gt;
&lt;br /&gt;
* [http://persony.net/purchase/ PERSONY]WEB Conference software.&lt;br /&gt;
&lt;br /&gt;
* [http://www.rootsweb.com/~bgrwgw/researchguide/tips.html Bulgarian alphabet] Bg alphabet and it's transcript into Latin Alphabet&lt;br /&gt;
* [http://www.studybulgarian.com/Bulgarian%20alphabet.htm THE BULGARIAN ALPHABET] Bg alphabet and it's transcript into Latin Alphabet&lt;br /&gt;
&lt;br /&gt;
* [http://dnes.dir.bg/2007/11/03/news2284792.html BANKRUPTCY of Communism]In Bulgarian.&lt;br /&gt;
&lt;br /&gt;
* [http://view.samurajdata.se/ online ps, PDF and Word viewer]&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
** [http://dublincore.org/ The Dublin Core Metadata Initiative] Open organization engaged in the development of interoperable online metadata standards.&lt;br /&gt;
&lt;br /&gt;
== Interesting ==&lt;br /&gt;
* [http://www.readingcpl.com/activity-based-costing/2007/05/variable-costing-direct-costing-marginal-costing.php  Variable Costing/Direct Costing/Marginal Costing]&lt;br /&gt;
* [http://buildix.thoughtworks.com/ Continuous Integration, Source Control, a Wiki and a Bug-Tracker; by ThoughtWorks]&lt;br /&gt;
* [http://www.businessweek.com/innovate/content/feb2007/id20070215_251519.htm?chan=globalbiz_europe_the+businessweek+wikinomics+series Ideagoras] &lt;br /&gt;
* [http://www.eureka.be/contacts/AcFindContact.do?memId=BG Eureka - A network for market oriented R&amp;amp;D]&lt;br /&gt;
* [http://portableapps.com/ Portable Applications] Way to run applications from USB.&lt;br /&gt;
* [http://sourceforge.net/projects/freedict/ Free Dictionary]The data is kept as XML complying to the TEI DTD.&lt;br /&gt;
* [http://www.manageability.org manageability] Site with categorized open source applications&lt;br /&gt;
* [http://www.prosper.com www.prosper.com]Prosper can help you get a personal loan from one of our trusted partners.&lt;br /&gt;
* [http://dozer.sourceforge.net/documentation/about.html Dozer]Java Bean to Java Bean mapper that recursively copies data from one object to another. Similar to my idea of Document Transfer interface. &lt;br /&gt;
* [http://opengts.sourceforge.net/ OpenGTS]Open GPS Tracking System. Written in Java.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DSL - Domain Specific Languages ===&lt;br /&gt;
* [http://martinfowler.com/articles/languageWorkbench.html Martin Fowler; Language Workbenches: The Killer-App for Domain Specific Languages?]&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.eclipse.org/Xtext Eclipse Xtext]&lt;br /&gt;
** [http://www.eclipse.org/articles/article.php?file=Article-BuildYourOwnDSL/index.html Build your own textual DSL with Tools from the Eclipse Modeling Project]&lt;br /&gt;
** [http://blog.efftinge.de/2008/06/fowlers-dsl-example-with-xtext.html Fowler's DSL example with Xtext]&lt;br /&gt;
** [http://www.mt-ag.com/web/download/experts_library/special_interest_artikel/Implementation%20and%20Integration%20of%20a%20DSL.pdf Implementation and Integration of a Domain Specific Language with oAW and Xtext]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.jetbrains.com/mps/ JetBrains MPS]&lt;br /&gt;
** [http://architects.dzone.com/articles/solving-problem-dsls-adoption DSL Adoption with JetBrains MPS]&lt;br /&gt;
&lt;br /&gt;
* [http://fragmental.tw/research-on-dsls/domain-specific-languages-dsls/dsl-examples/ DSL Examples]Apache Camel DSL; Regular Expressions; Structured Query Language (SQL);&lt;br /&gt;
&lt;br /&gt;
* [http://nhw.pl/wp/2008/03/26/how-to-write-dsl-with-acts-as-tree-in-background How to write DSL (with Acts As Tree in background)]&lt;br /&gt;
&lt;br /&gt;
* [http://www.devx.com/semantic/Article/35973?trk=DXRSS_JAVA Create Domain-Specific Languages with ANTLR]The latest version of ANTLR provides the tools you need to build a parser for special-purpose languages.&lt;br /&gt;
&lt;br /&gt;
* [http://www.theenterprisearchitect.eu/archive/2009/05/06/dsl-development-7-recommendations-for-domain-specific-language-design-based-on-domain-driven-design DSL development: 7 recommendations for Domain Specific Language design based on Domain-Driven Design]&lt;br /&gt;
&lt;br /&gt;
=== Prototyping ===&lt;br /&gt;
* [http://www.svpg.com/blog/files/high-fidelity-prototypes.html High-Fidelity Prototypes]&lt;br /&gt;
&lt;br /&gt;
* [http://www.evolus.vn/Pencil/Home.html Pencil Project]mission is to build a free and opensource tool for making diagrams and GUI prototyping that everyone can use.&lt;br /&gt;
&lt;br /&gt;
* [http://www.techmixer.com/creately-online-diagramming-tools/ Creately]Online Diagram Tool.&lt;br /&gt;
&lt;br /&gt;
* Terms&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MODFM = Mockup-driven fast-prototyping methodology.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pivot Tables ===&lt;br /&gt;
* [http://video.about.com/spreadsheets/Create-Excel-Pivot-Tables.htm How to create Pivot tables in Excel]&lt;br /&gt;
* [http://www.cpearson.com/excel/pivots.htm Another guide to Excel Pivot tables]&lt;br /&gt;
* [http://www.adaxa.com.au/downloads/howtos/howto_excel_pivot_tables.pdf ADAXA How-To: Analysis of Data using Excel Pivot Tables]&lt;br /&gt;
* [http://www.linuxjournal.com/node/1000252 OpenOffice.org Calc: Pivot tables by another name]&lt;br /&gt;
* [http://www.learnopenoffice.org/CalcTutorial33.htm Open Office - Using the data pilot]&lt;br /&gt;
* [http://jpivot.sourceforge.net/ JPivot]JSP custom tag library that renders an OLAP table and let users perform typical OLAP navigations like slice and dice, drill down and roll up. It uses Mondrian as its OLAP Server. JPivot also supports XMLA datasource access.&lt;br /&gt;
&lt;br /&gt;
=== Mozilla - Firefox Extensions ===&lt;br /&gt;
* [http://www.foxmarks.com/ FoxMark - The Bookmark Synchronizer]&lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/673 InFormEnter adds a small, clickable icon next to every input field in a web form, from where you can select the item to be inserted]&lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/60 Web Developer - Adds a menu and a toolbar with various web developer tools.]&lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/824 XForms support for Firefox and Mozilla] A must have Add-on.&lt;br /&gt;
* [http://www.zotero.org/ Zotero]help you collect, manage, and cite your research sources.&lt;br /&gt;
* [http://www.google.com/tools/firefox/browsersync/ Google Browser Sync]&lt;br /&gt;
&lt;br /&gt;
=== Project/Time/Bug management ===&lt;br /&gt;
* [http://pdune.sourceforge.net/index.html Project Dune] Web-based issue tracker. Integration with subversion or cvs, code inspections in the browser, SCRUM project management.&lt;br /&gt;
* [http://www.openproj.org/ Open Proj] - free, open source desktop alternative to Microsoft Project.&lt;br /&gt;
* [http://www.openworkbench.org/ Open Workbench] - Open source project similar to Microsoft Project.&lt;br /&gt;
* [https://workeffort.dev.java.net/ workeffort] Businesses perform work efforts within their organizations to accomplish tasks such as producing products, developing software, mantaining assets etc. This system helps in managing these kind of tasks. It also includes a time tracking system.&lt;br /&gt;
* [http://www.ehour.nl/index.phtml eHour]Timesheet Management&lt;br /&gt;
* [http://www.opnworks.com/opentime/ OpenTime]Eclipse, SWT/JFace, Hibernate, embedded relational databases, XML.&lt;br /&gt;
* [http://www.mantisbt.org/ Mantis Bug Tracker]PHP&lt;br /&gt;
* [http://www.dotproject.net/ dotProject]&lt;br /&gt;
* [http://www.acetask.com/index.html www.acetask.com]&lt;br /&gt;
* [http://www.redmine.org Redmine]Flexible project management web application written using Ruby on Rails framework. Similar to sf.net.&lt;br /&gt;
* [https://sourceforge.net/projects/time4u Time4U]Java based.&lt;br /&gt;
* [http://project.net/ Project.net]&lt;br /&gt;
&lt;br /&gt;
* Articles&lt;br /&gt;
** [http://www.joelonsoftware.com/items/2007/10/26.html Evidence Based Scheduling]&lt;br /&gt;
&lt;br /&gt;
=== Bug-Finding Tools ===&lt;br /&gt;
* [http://findbugs.sourceforge.net FindBugs]&lt;br /&gt;
* [http://pmd.sourceforge.net/ PMD]&lt;br /&gt;
* [http://jbrugge.com/glean/index.html Glean]Gathering feedback from your code&lt;br /&gt;
* [http://www.cs.umd.edu/~jfoster/papers/issre04.pdf - A Comparison of Bug Finding Tools for Java]&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
* [http://www.worldtrans.org/TP/TP1/TP1-17.HTML A Communication Model]&lt;br /&gt;
* [http://www.cs.tut.fi/~jkorpela/wiio.html How all human communication fails, except by accident, or a commentary of Wiio's laws]&lt;br /&gt;
&lt;br /&gt;
* Alan Greenspan [https://sourceforge.net/forum/message.php?msg_id=4653656 sf.net post] posted by Colin&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;I guess I should warn you, if I turn out to be particularly clear, you've probably misunderstood what I've said.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Good lookiing Resumes/CV ===&lt;br /&gt;
* [http://agilejava.com/resume.html agilejava.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Software Engineers Salaries ===&lt;br /&gt;
* [http://blogs.payscale.com/ask_dr_salary/2008/01/software-develo.html Software Developer Salaries: Ruby on Rails vs. Java]&lt;br /&gt;
* [http://ifbywhiskey.com/blog/2007/04/20/acts_as_french_fries/ Rails - do you want fries with that?]&lt;br /&gt;
&lt;br /&gt;
=== Open Source Magazines, Articles and Surveys ===&lt;br /&gt;
&lt;br /&gt;
==== Surveys/Studies ====&lt;br /&gt;
* [http://www.openeo.biz www.openeo.biz] Organizational and business aspects of open source&lt;br /&gt;
&lt;br /&gt;
==== Magazines ====&lt;br /&gt;
* [http://www.freesoftwaremagazine.com FreeSoftware]&lt;br /&gt;
* [http://www.osdbzine.net Open Source DB Magazine]&lt;br /&gt;
&lt;br /&gt;
==== Articles ====&lt;br /&gt;
* [http://www.h-online.com/open/The-Open-Source-Enterprise-Trap--/features/112992 The Open Source Enterprise Trap]&lt;br /&gt;
&lt;br /&gt;
* [http://whdb.com/2008/the-top-50-proprietary-programs-that-drive-you-crazy-and-their-open-source-alternatives/ The Top 50 Proprietary Programs that Drive You Crazy — and Their Open Source Alternatives]&lt;br /&gt;
&lt;br /&gt;
* [http://osofbiz.blogspot.com/2008/01/glass-cathedrals-and-community-versus.html Glass Cathedrals and Community versus Code]Very good post from David E. Jones.&lt;br /&gt;
&lt;br /&gt;
* [http://www.law.washington.edu/lct/swp/Law/trademark.html Trademark and OSS]&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyrius.com/publications/michlmayr-phd.html Quality Improvement in Volunteer Free and Open Source Software Projects: Exploring the Impact of Release Management]&lt;br /&gt;
* [http://www.networkworld.com/news/2007/082307-open-source-to-watch.html Open source companies to watch]&lt;br /&gt;
* [http://itmanagement.earthweb.com/career/article.php/11067_3687096_1 Will Open Source Developers be Well Paid?]&lt;br /&gt;
* [http://www.riehle.org/computer-science/research/2007/computer-2007-article.html The Economic Motivation of Open Source Software: Stakeholder Perspectives]&lt;br /&gt;
* [http://enigmastation.com/technology/fsf.jsp Why I Can't Stand the FSF]V