[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Phpgroupware-cvs] property/tutorials/property property.pkg, 1.2 prizebo
From: |
ceb |
Subject: |
[Phpgroupware-cvs] property/tutorials/property property.pkg, 1.2 prizebook_index.png, 1.2 property.pkg.ini, 1.2 project_structure.png, 1.2 update.apache.php.pkg, 1.2 tts_use.png, 1.2 prizebook.png, 1.2 lookup_vendor.png, 1.2 location_conf.gif, 1.2 admin_access.png, 1.2 architecture.pkg, 1.2 |
Date: |
Thu, 24 Feb 2005 14:36:35 -0000 |
Update of property/tutorials/property
Added Files:
Branch: MAIN
property.pkg lines: +671 -0
prizebook_index.png lines: +47 -0
property.pkg.ini lines: +2 -0
project_structure.png lines: +14 -0
update.apache.php.pkg lines: +20 -0
tts_use.png lines: +88 -0
prizebook.png lines: +12 -0
lookup_vendor.png lines: +90 -0
location_conf.gif lines: +22 -0
admin_access.png lines: +23 -0
architecture.pkg lines: +736 -0
Log Message:
committed prop-18-branch version to head
====================================================
Index: property.pkg
<refentry id="address@hidden">
<refnamediv>
<refname>Installation Guide</refname>
<refpurpose>This is a short description of the FM-system — and how to
implement it
— as it is implemented at BBB.</refpurpose>
</refnamediv>
<refsynopsisdiv>
<author>
Sigurd Nes
<authorblurb>
address@hidden mailto:address@hidden address@hidden
</authorblurb>
</author>
</refsynopsisdiv>
address@hidden
<refsect1 id="address@hidden intro}">
<title>Intro</title>
<para>
Both Linux and Windows NT/2000/XP will do. Linux is preferred due to aspects
as less expensive and friendlier regarding tuning, safety and reliability.
</para>
<para>
The production server is here based on Linux Mandrake 10.0 while the
development server is on a laptop with dualboot Linux/Windows XP.
</para>
<para>
PhpGroupWare runs on MySQL, PostgreSQL and Microsoft SQL Server (tested
— and working ok). If one wants to utilize foreign keys — one has
to consider not using MySQL — although this feature is promised in the
next version (version 4.x). PhpGroupWare also claims to be running on Oracle
and Sybase.
</para>
<para>
In this case the databaseserver is a Microsoft SQL Server v7.0 located on a
dedicated databaseserver.
</para>
</refsect1>
<refsect1 id="address@hidden mail_server}">
<title>Mail server</title>
<para>
On Windows platform — one is bound to send mail via a valid smtp
server — while on Linux one has also the choice of using the native
<quote>sendmail</quote>
for distributing
<quote>workorders</quote>
and<quote>trouble tickets</quote>.
</para>
<para>
Not required: a guide to create: a server that is (1) a SMTP server that
can receive e-mail for localhost and virtual domain hosts that you have
setup and send (relay) e-mail from any remote host from which users have
authenticated through POP or IMAP, (2) a POP server, (3) an IMAP server:
<ulink
url="http://www.lifewithqmail.org/">http://www.lifewithqmail.org/</ulink>
</para>
</refsect1>
<refsect1 id="address@hidden phpgw_inst}">
<title>PhpGroupWare - basic installation</title>
<para>
The latest version of PhpGroupware is available at
<ulink url="http://w.phpgroupware.org/">http://w.phpgroupware.org</ulink>
</para>
<para>
This is a short description how to install the PhpGroupware — with no
integration with BOEI. First of all - create a database on the
database-server.
</para>
<refsect2 id="address@hidden phpgw_win}">
<title>Windows</title>
<para>
- Decompress the files to a location beneath C:\Inetpub\wwwroot\
</para>
<para>
- Add read and execute rights for I_USR_
</para>
</refsect2>
<refsect2 id="address@hidden phpgw_linux}">
<title>Linux</title>
<para>
Decompress the files to a location beneath your
<quote>DocumentRoot</quote>
(from /usr/local/apache/conf/httpd.conf)
</para>
<para>
Change the owner to your user running the server:
</para>
</refsect2>
<refsect2 id="address@hidden phpgw_common}">
<title>common</title>
<para>
- Point the browser to
<ulink
url="http://your.domain.com/phpgroupware/setup/">http://your.domain.com/phpgroupware/setup/</ulink>
</para>
<para>
- Supply the setup-form with appropriate values — download the
<quote>header.inc.php</quote>
to the phpgroupware- directory.
</para>
<warning>
<para>
The database-
<quote>user</quote>
and
<quote>password</quote>
used to access the database is stored in plain text in the header.inc.php.
</para>
</warning>
<para>
- Point the browser to
<ulink
url="http://your.domain.com/phpgroupware/setup/">http://your.domain.com/phpgroupware/setup/</ulink>
and log in to
<quote>Setup/Config Admin Login</quote>
with the
<quote>Configuration Password</quote>
supplied in the previous step.
</para>
<para>
- Click the button
<quote>install</quote>
all applications
</para>
<para>
- Click the button
<quote>Edit Current Configuration</quote>
— and fill inn appropriate values — and —
<quote>submit</quote>
</para>
<para>
- Click the link to setup admin
</para>
<para>
- Add your language
</para>
<para>
- Click the button
<quote>Manage Application</quote>
— and select (minimum) :
</para>
<itemizedlist>
<listitem>
<para>
addressbook
</para>
</listitem>
<listitem>
<para>
admin
</para>
</listitem>
<listitem>
<para>
calendar
</para>
</listitem>
<listitem>
<para>
email (or felamimail)
</para>
</listitem>
<listitem>
<para>
preferences
</para>
</listitem>
<listitem>
<para>
property
</para>
</listitem>
</itemizedlist>
<para>
- logout — and point your browser to
http://your.domain.com/phpgroupware/ - and log in with the admin account
and go to the
<quote>admin</quote>
define groups and users — and to enable the applications for these
groups/users. One has to define a set of global and user-specific
preferences — these are located in the
<quote>admin</quote>
and
<quote>preferences</quote> section.
</para>
</refsect2>
<refsect2 id="address@hidden phpgw_boei}">
<title>PhpGroupWare - integration with BOEI</title>
<para>
All property and tenant information is owned and maintained by BOEI - an
external database. Since PhpGroupWare is not allowed to write back to BOEI
— data is collected and updated from tables in BOEI and written to
tables in PhpGroupWare by means of stored procedures and scheduled jobs. The
creation of views and procedures are done by executing scripts on the
database server. The scheduling of the jobs has to be manually defined on
database server.
</para>
<para>
If both databases reside on the server — the tables can be accessed
directly within the procedures — as opposed to when the databases
resides on different servers — it is necessary call up the tables as
views - and then operate on them.
</para>
<para>
Adding records is straight forward querying: left join the master-table
— and check for NULL in the slave-table.
</para>
<para>
Updating records demands programming due to fact that MSSQL does not allow
update-query as one would normally do in MsAccess.
</para>
<para>
The problem can be solved by tagging records during update — and
asking for one row at the time that are not tagged (or at least not tagged
this time)
</para>
<example>
<title>Procedure to keep track of the tenants (MSSQL).</title>
<programlisting>
<![CDATA[
CREATE PROCEDURE oppdater_leietaker_pr_leieobjekt
AS
DECLARE @t char(4), @u char(3), @i int, @leietaker char(20), @update_date
smalldatetime , @formaal int, @gateadresse int, @etasje char(6)
SET ROWCOUNT 1
BEGIN
SELECT @i = count(*) from boei_leieobjekt
SELECT @update_date =CONVERT (int , GETDATE() , 106)
END
WHILE @i > 1
BEGIN
SELECT @t = objekt_id, @u = leie_id, @leietaker=Leietaker_ID,
@formaal=formaal_id ,
@gateadresse=gateadresse_id, @etasje= etasje FROM boei_leieobjekt where
(updated < @update_date or updated is NULL)
SELECT @leietaker=Leietaker_ID FROM dbo.v_Leieobjekt where address@hidden and
address@hidden
UPDATE boei_leieobjekt
SET Leietaker_ID = @leietaker, address@hidden, etasje= @etasje,
address@hidden,updated = @update_date
WHERE objekt_id = @t
AND address@hidden
SELECT @i = @i - 1
END
]]>
</programlisting>
</example>
</refsect2>
</refsect1>
<refsect1 id="address@hidden os_linux}">
<title>Install Linux operative system</title>
<para>
Download the images needed from Linux from
<ulink
url="http://www.mandrakelinux.com/">http://www.mandrakelinux.com/</ulink>
or some other distributor and burn the CDs and boot into the installation
process — which is pretty self explanatory.
</para>
<para>
Do not install a database-server (PostgreSQL or MySQL) or Web-server
(Apache) unless you intend to. The Web-server is very much needed —
but there is some performance to gain from compiling as most as possible
into the httpd executable in addition to assuring the PHP databasesupport
for
<quote>MSSQL</quote>.</para>
</refsect1>
<refsect1 id="address@hidden windows_version}">
<title>Web-server with PHP-support; Windows version</title>
<para>
The implementation is tested on both
<quote>Apache</quote>
and
<quote>Internet Information Services</quote>
(IIS)
</para>
<para>
If the platform is of some brand of windows — the obvious choice is
the bundled IIS. For best performance — make sure that the version is
later than 5.x.
</para>
<para>
Alternatively — the apache 2.x is reported to be a good alternative
(used as part of the developement server).
</para>
<para>
Download the latest Php interpreter from
<ulink url="http://www.php.net/">http://www.php.net</ulink>
— and install it as described in the
<quote>install.txt</quote>
. Choose the CGI-mode — even though there is a performance penalty.
</para>
<para>
If one intends to use MSSQL database server — one has to enable the
<quote>extension = php_mssql.dll</quote>
in the extension part of
<quote>php.ini</quote>
— and copy the
<quote>NTWDBLIB.DLL</quote>
(bundled) SQL server Client Library and place it in the systems path.
</para>
<para>
To enable the imap support (to enable the built-in web-mail facility in
PhpGroupWare) — enable
<quote>extension = php_imap.dll</quote>
in php.ini
</para>
</refsect1>
<refsect1 id="address@hidden linux_version}">
<title>Web-server with PHP-support; Linux version</title>
<refsect2 id="address@hidden tuning}">
<title>Tuning — caching</title>
<para>
The Linux version
<footnote>
<para>
Turck MMCache is availlable for both windows and *nix
</para>
</footnote>
has the free opportunity to utilize a php-accelerator which saves
compilation time by caching. Every time a PHP script is accessed, the PHP
engine must open the script file and read, parse, and compile the file
contents into a compiled form. With scripts often including other scripts,
this work can become a significant part of the overall time to deliver a
page. The Accelerator caches the compiled scripts in shared memory for
later reuse.
</para>
</refsect2>
<refsect2 id="address@hidden compression}">
<title>Tuning — compression</title>
<para>
there is techinques to deliver dynamically compressed content 'on the fly'
to any browser or user-agent that is capable of receiving it — and
thereby saves bandwidth. Typically compression ratio for text is about 90
%.
</para>
<para>
mod_gzip is an addon module for apache 1.3.x , while mod_deflate is the
equivalent built in module for apache2
</para>
</refsect2>
<refsect2 id="address@hidden linux_mssql}">
<title>Installation of web-server on Linux with mssql support</title>
<para>
FreeTDS is a set of libraries for Unix and Linux that allows your programs
to natively talk to Microsoft SQL Server and Sybase databases and have to
be kompiled into php if one intend to connect to either MSSQL or Sybase.
Further — you need the c-client library to enable IMAP-support.
</para>
<para>
Download the software to a directory at your choice (my choice is
/opt/web):
</para>
<para>
The latest freetds package from
<ulink url="http://www.freetds.org/">http://www.freetds.org</ulink>
,
</para>
<para>
Apache from
<ulink
url="http://www.apache.org/dist/httpd/">http://www.apache.org/dist/httpd/</ulink>
(apache_1.3.x or httpd-2.x)
</para>
<para>
PHP from
<ulink
url="http://www.php.net/downloads.php">http://www.php.net/downloads.php</ulink>
</para>
<para>
C-client library from
<ulink
url="ftp://ftp.cac.washington.edu/imap/">ftp://ftp.cac.washington.edu/imap/</ulink>
</para>
<para>
Php_accelerator from
<ulink
url="http://www.php-accelerator.co.uk/download.php">http://www.php-accelerator.co.uk/download.php</ulink>
</para>
<para>
Support for xlt:
</para>
<para>
XSLT support in PHP relies on the Sablotron XSLT processor, which in turn
relies on the expat XML parser, so not only do you have to install both of
those packages, but you need to install them in the right order to satisfy
the dependencies.
</para>
<para>
expat from
<ulink
url="http://sourceforge.net/projects/expat">http://sourceforge.net/projects/expat</ulink>
</para>
<para>
Sablot-0.98.tar.gz from
<ulink
url="http://www.gingerall.cz/charlie/ga/xml/download.xml">http://www.gingerall.cz/charlie/ga/xml/download.xml</ulink>
</para>
<para>
Decompress the packages (the versions are probably altered);
</para>
<screen>
<![CDATA[
$ tar xfz expat-1.95.7.tar.gz
$ tar xfz Sablot-1.0.1.tar.gz
$ gunzip -c freetds-stable.tgz | tar xf -
$ gunzip -c httpd-2.0.52.tar.gz | tar xf -
$ bunzip2 -c php-4.3.9.tar.bz2 | tar xvf -
$ gunzip -c imap-2002d.tar.Z| tar xf -
$ gunzip -c php_accelerator-1.3.3r2_php-4.3.0_linux_i686-glibc2.1.3.tgz | tar
xf -
]]>
</screen>
<para>
Build and install the packages (Apache 2):
</para>
<note>
<para>
have a look into
<quote>imap-2002d/Makefile</quote>
for details for configuring your system with imap support
</para>
</note>
<screen>
<![CDATA[
$ cd expat-1.95.5
$ ./configure
$ make
$ make install
$ cd ../Sablot-1.0.1
$ make
$ make install
$ cd ../freetds-0.61.2
$ ./configure --prefix=/usr/local/freetds --with-tdsver=7.0 --enable-msdblib\
--enable-dbmfix --with-gnu-ld --enable-shared --enable-static
$ gmake
$ gmake install
$ cd ../imap-2002d
$ make <build type> SSLTYPE=unix
$ ln -s c-client include
$ mkdir lib
$ cd lib
$ ln -s ../c-client/c-client.a libc-client.a
$ cd ..
$ cd ../httpd-2.0.52
$ ./configure --enable-so --enable-deflate --enable-headers
$ make
$ make install
$ cd ../php-4.3.9
$ export LDFLAGS=-lstdc++
$ ./configure --with-imap=../imap-2002d --with-sybase-ct=/usr/local/freetds\
--with-apxs2=/usr/local/apache2/bin/apxs --enable-mail --enable-xslt\
--with-xslt-sablot --with-zlib --with-pspell --with-jpeg-dir=/usr/lib\
--with-png-dir=/usr --with-freetype-dir=/usr/lib --with-gd --enable-ftp
$ make
$ make install
$ cp php.ini-dist /usr/local/lib/php.ini
]]>
</screen>
<para>
alternatively Apache 1.3.x:
</para>
<screen>
<![CDATA[
$ gunzip -c apache_1.3.29.tar.gz | tar xf -
$ cd apache_1.3.29
./configure
]]>
</screen>
<para>
(ignore the warnings at this stage)
</para>
<screen>
<![CDATA[
$ cd ../php-4.3.9
$ export LDFLAGS=-lstdc++
$ ./configure --disable-cgi --with-imap=../imap-2002d
--with-sybase-ct=/usr/local/freetds --with-apache=../apache_1.3.29\
--with-mysql=no --with-pgsql --enable-mail --enable-xslt --with-xslt-sablot
$ make
$ make install
$ cp php.ini-dist /usr/local/lib/php.ini
$ cd ../apache_1.3.29
$ export LDFLAGS=-lstdc++
$ ./configure --prefix=/usr/local/apache\
--activate-module=src/modules/php4/libphp4.a --enable-module=so
$ make
$ make install
]]>
</screen>
<para>
Edit your httpd.conf or srm.conf file and add:
</para>
<screen>
<![CDATA[
AddType application/x-httpd-php .php
]]>
</screen>
<para></para>
<para>
Alter the
<quote>User</quote>
and
<quote>Group</quote>
in httpd.conf to
<quote>apache</quote>
</para>
<refsect3 id="address@hidden php_cache}">
<title>php-cache general</title>
<para>
There is sereval possibilities for adding caching capabilities to php
</para>
<itemizedlist>
<listitem>
<para>
APC, the Alternative PHP Cache(
<ulink
url="http://apc.communityconnect.com/about.html">http://apc.communityconnect.com/about.html</ulink>
) - Open Source
</para>
</listitem>
<listitem>
<para>
The ionCube PHP Accelerator(
<ulink
url="http://www.php-accelerator.co.uk">http://www.php-accelerator.co.uk</ulink>
) - not open source but it is free
</para>
</listitem>
<listitem>
<para>
The Zend Optimizer(
<ulink
url="http://www.zend.com/store/products/zend-optimizer.php">http://www.zend.com/store/products/zend-optimizer.php</ulink>
) - commerical product
</para>
</listitem>
<listitem>
<para>
Turck MMcache(
<ulink
url="http://sourceforge.net/projects/turck-mmcache/">http://sourceforge.net/projects/turck-mmcache/</ulink>
) - open source
</para>
</listitem>
</itemizedlist>
<para>
At the moment of this writing I recommend the
<quote>Turck MMcache</quote>
</para>
</refsect3>
<refsect3 id="address@hidden alt_1}">
<title>Add php-cache - alternative 1</title>
<screen>
<![CDATA[
$ cd ../ php_accelerator-1.3.3r2_php-4.3.0_linux_i686-glibc2.1.3
$ cp php_accelerator_1.3.3r2.so so /usr/local/lib /php_accelerator_1.3.3r2.so
$ cd ..
]]>
</screen>
<para>
Add the following line to your php.ini file, e.g. near the extensions
section. Set the correct path to where you installed the accelerator
library.
</para>
<programlisting>
<![CDATA[
; PHP Accelerator extension
zend_extension="/usr/local/lib/php_accelerator_1.3.3r2.so"
phpa = on
phpa.tweaks = on
phpa.cache_dir = /tmp
phpa.file_perms = 400
phpa.shm_size = 16
phpa.shm_key = 0xc0deb00
phpa.shm_perms = 664
phpa.shm_release_at_exit = on
phpa.shm_logging = on
phpa.shm_stats_check_period = 5m
phpa.shm_ttl = 36h
phpa.shm_max_processes = 512
phpa.cache_file_prune_period = 36h
]]>
</programlisting>
</refsect3>
<refsect3 id="address@hidden alt_2}">
<title>Add php-cache - alternative 2</title>
<para>
Download the Latest Turck MMcache versions from
<ulink
url="http://sourceforge.net/project/showfiles.php?group_id=69426">sourceforge</ulink>
</para>
<screen>
<![CDATA[
$ tar xfz turck-mmcache-2.4.6.tar.gz
]]>
</screen>
<para>
follow the instructions in
<quote>readme</quote>
</para>
</refsect3>
<refsect3 id="address@hidden add_compr}">
<title>Adding compression</title>
<para>
for Apache2 - read the documentataion for mod_deflate at
<ulink
url="http://httpd.apache.org/docs-2.0/mod/mod_deflate.html">http://httpd.apache.org/docs-2.0/mod/mod_deflate.html</ulink>
</para>
<para>
for apache 1.3.x: (mod_gzip)
</para>
<para>
Dowbload mod_gzip.so.gz from
<ulink
url="http://sourceforge.net/projects/mod-gzip/">http://sourceforge.net/projects/mod-gzip/</ulink>
</para>
<screen>
<![CDATA[
$ gunzip mod_gzip.so.gz
$ cp mod_gzip.so /usr/local/apache/libexec/
]]>
</screen>
<para>
Edit your httpd.conf or srm.conf file and add:
</para>
<programlisting>
<![CDATA[
LoadModule gzip_module libexec/mod_gzip.so
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_can_negotiate Yes
mod_gzip_static_suffix .gz
AddEncoding gzip .gz
mod_gzip_update_static No
mod_gzip_command_version '/mod_gzip_status'
mod_gzip_temp_dir /tmp
mod_gzip_keep_workfiles No
mod_gzip_minimum_file_size 500
mod_gzip_maximum_file_size 500000
mod_gzip_maximum_inmem_size 60000
mod_gzip_min_http 1000
mod_gzip_handle_methods GET POST
mod_gzip_item_exclude reqheader "User-agent: Mozilla/4.0[678]"
mod_gzip_item_include file \.html$
mod_gzip_item_exclude file \.js$
mod_gzip_item_exclude file \.css$
mod_gzip_item_include file \.pl$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/html$
mod_gzip_item_include mime ^text/plain$
mod_gzip_item_include mime ^httpd/unix-directory$
mod_gzip_item_include file \.php$
mod_gzip_item_include mime ^application/x-httpd-php
mod_gzip_item_exclude mime ^image/
mod_gzip_dechunk Yes
mod_gzip_add_header_count Yes
mod_gzip_send_vary Yes
</IfModule>
]]>
</programlisting>
<para>
That should be it ! Fire up the web-server with:
</para>
<screen>
<![CDATA[
$ /usr/local/apache2/bin/apachectl start</para>
]]>
</screen>
<para>
To shut down:
</para>
<screen>
<![CDATA[
$ /usr/local/apache2/bin/apachectl stop
]]>
</screen>
</refsect3>
</refsect2>
</refsect1>
</refentry>
====================================================
Index: property.pkg.ini
[Linked Tutorials]
update.apache.php
====================================================
Index: update.apache.php.pkg
<refentry id="address@hidden">
<refnamediv>
<refname>Sample for updating apache and php</refname>
<refpurpose>A quick command to update to new releases of php and/or
apache</refpurpose>
</refnamediv>
<refsynopsisdiv>
<author>
Sigurd Nes
<authorblurb>
address@hidden mailto:address@hidden address@hidden
</authorblurb>
</author>
</refsynopsisdiv>
<refsect1 id="address@hidden source}">
<title>update apache and php</title>
<para>
address@hidden update.apache.and.php.sh}
</para>
</refsect1>
</refentry>
====================================================
Index: architecture.pkg
<refentry id="address@hidden">
<refnamediv>
<refname>Architecture</refname>
<refpurpose>fundamental physical objects,actors, their conditions, relations
and operations</refpurpose>
</refnamediv>
<refsynopsisdiv>
<author>
Sigurd Nes
<authorblurb>
address@hidden mailto:address@hidden address@hidden
</authorblurb>
</author>
</refsynopsisdiv>
address@hidden
<refsect1 id="address@hidden property.software.architecture}">
<title>Intro</title>
<para>The database is in general buildt on some fundamental physical
objects,actors, their conditions, relations and operations.
</para>
<itemizedlist>
<listitem><para>
<emphasis>Locations</emphasis> - which is organized in a highly
customizable hierarchy</para>
</listitem>
<listitem><para><emphasis>Entities</emphasis> - is a generic class of
objects, that can be defined as reports, equipment and so on - which can
be linked to
locations or other entities</para>
</listitem>
<listitem><para><emphasis>Actors</emphasis></para>
<itemizedlist>
<listitem><simpara>Tenants/User of location</simpara>
</listitem>
<listitem><simpara>Vendors</simpara>
</listitem>
<listitem><simpara>Owners</simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem><para><emphasis>Operation/events</emphasis></para>
<itemizedlist>
<listitem><simpara>Request for action of any kind</simpara>
</listitem>
<listitem><simpara>Workorders - organized into projects</simpara>
</listitem>
<listitem><simpara>Service agreements</simpara>
</listitem>
<listitem><simpara>Payments/Cashflow</simpara>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
<para>The program-logic that operates on the database is programmed
in different layers - which have similar typical tasks</para>
<itemizedlist>
<listitem><simpara><emphasis role="bold">so</emphasis> - storage object -
this layer interacts with the database - and the <quote>bo</quote>
layer</simpara>
</listitem>
<listitem><simpara><emphasis role="bold">bo</emphasis> - business object -
this layer manipulate the data relivered from <quote>so</quote>.</simpara>
</listitem>
<listitem><simpara><emphasis role="bold">ui</emphasis> - user interface -
this layer prepares the dataset (array) delivered to the XSLT
engine from the <quote>bo</quote> - layer.</simpara>
</listitem>
</itemizedlist>
</refsect1>
<refsect1 id="address@hidden property.software.metadata}">
<title>Meta-database</title>
<para>
Both the <!-- <link linkend="property.software.location">location
hierarchy</link> --> address@hidden
architecture.pkg#property.software.location} - and the
<!-- <link linkend="property.software.entities">entities</link> -->
address@hidden architecture.pkg#property.software.entities} are organized in a
meta-database which contain information of tables, columns, relations and
attributes
<footnote>
<para>
alfanumeric values, dates,lookup from addressbook - and values available
as multiple choices
</para>
</footnote>
</para>
<para>The database queries and name of columns to return (visible
and hidden) is dynamicly created on the fly the first
time - and stored in a cache table (fm_cache) for later use to save
processing
overhead.</para>
<refsect2 id="address@hidden property.software.metadata.location}">
<title>Location</title>
<table>
<title>
<quote>location</quote> meta-data tables</title>
<tgroup cols="2">
<thead>
<row>
<entry>Table</entry>
<entry>Information</entry>
</row>
</thead>
<tbody>
<row>
<entry>fm_location_type</entry>
<entry>Location hierarchy level Id's - and the name of each level</entry>
</row>
<row>
<entry>fm_location_attrib</entry>
<entry>
<itemizedlist>
<listitem>
<para>
Column names and definitions for for the database tables
</para>
</listitem>
<listitem>
<para>
Form input text
</para>
</listitem>
<listitem>
<para>
Form input-field status text
</para>
</listitem>
<listitem>
<para>
Configuration of input - field - type:
</para>
<itemizedlist>
<listitem>
<para>
Text box
</para>
</listitem>
<listitem>
<para>
Text area
</para>
</listitem>
<listitem>
<para>
List box
</para>
</listitem>
<listitem>
<para>
check box
</para>
</listitem>
<listitem>
<para>
radio buttons
</para>
</listitem>
<listitem>
<para>
Date validation field
</para>
</listitem>
<listitem>
<para>
Contact - lookup field
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</entry>
</row>
<row>
<entry>fm_location_choice</entry>
<entry>Possible values for attributes for radio, check boxes and list
boxes</entry>
</row>
<row>
<entry>fm_location_config</entry>
<entry>Defines which level in the location-hierarchy to connect
<quote>property owner</quote>, <quote>part_of_town</quote>,
<quote>street</quote> and <quote>tenant</quote>
</entry>
</row>
</tbody>
</tgroup>
</table>
<para></para>
<para>
Each level in the hierarchy has it owns table - named as
location<level> - and is referencing its parent table by foreign keys
</para>
<para>
Each level is also referencing a category-table - which is named
fm_location<level>_category
</para>
</refsect2>
<refsect2 id="address@hidden property.software.metadata.entity}">
<title>Entity</title>
<para>
Similar to the
<!-- <link linkend="property.software.metadata.location">location</link> -->
address@hidden architecture.pkg#property.software.metadata.location} -
entities has their own tables - but in this case the entities are
separated by type and category - as entity_<type>_<category>
</para>
<table>
<title>
<quote>Entity</quote> meta-data tables</title>
<tgroup cols="2">
<thead>
<row>
<entry>
Table</entry>
<entry>
Information</entry>
</row>
</thead>
<tbody>
<row>
<entry>fm_entity
</entry>
<entry>
<para>
Definition of top-level Entity types - and whether this entity type
should:
</para>
<itemizedlist>
<listitem>
<para>
Appear in localization lookup-forms
</para>
</listitem>
<listitem>
<para>
Be subject to documentation records
</para>
</listitem>
<listitem>
<para>
Be accessible in lookup forms for other (specified) entity-types
</para>
</listitem>
</itemizedlist>
</entry>
</row>
<row>
<entry>fm_entity_lookup</entry>
<entry>
<para>
Configuration table for whether this entity type should:
</para>
<itemizedlist>
<listitem>
<para>
Be included in registration forms for:
</para>
<itemizedlist>
<listitem>
<para>
project
</para>
</listitem>
<listitem>
<para>
ticket
</para>
</listitem>
<listitem>
<para>
document
</para>
</listitem>
<listitem>
<para>
drawing
</para>
</listitem>
<listitem>
<para>
meter
</para>
</listitem>
<listitem>
<para>
request
</para>
</listitem>
<listitem>
<para>
investment
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Whether a new record of this entity type can be started from:
</para>
<itemizedlist>
<listitem>
<para>
A ticket in the help desk
</para>
</listitem>
<listitem>
<para>
A request
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</entry>
</row>
<row>
<entry>fm_entity_category</entry>
<entry>
<itemizedlist>
<listitem>
<para>
defines the entity category
</para>
</listitem>
<listitem>
<para>
whether file-uploads is allowed
</para>
</listitem>
<listitem>
<para>
Whether tracking is enabled in help-desk
</para>
</listitem>
<listitem>
<para>
Whether there is lookup links from location details
</para>
</listitem>
<listitem>
<para>
Whether tenants is enabled in location-lookup-form
</para>
</listitem>
</itemizedlist>
</entry>
</row>
<row>
<entry>fm_entity_attribute</entry>
<entry>
<itemizedlist>
<listitem>
<para>
Column names and definitions for for the database tables (per
category)
</para>
</listitem>
<listitem>
<para>
Form input text
</para>
</listitem>
<listitem>
<para>
Form input-field status text
</para>
</listitem>
<listitem>
<para>
Configuration of input - field - type:
</para>
<itemizedlist>
<listitem>
<para>
Text box
</para>
</listitem>
<listitem>
<para>
Text area
</para>
</listitem>
<listitem>
<para>
List box
</para>
</listitem>
<listitem>
<para>
check box
</para>
</listitem>
<listitem>
<para>
radio buttons
</para>
</listitem>
<listitem>
<para>
Date validation field
</para>
</listitem>
<listitem>
<para>
Contact - lookup field
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</entry>
</row>
<row>
<entry>fm_entity_choice</entry>
<entry>Possible values for attributes for radio, check boxes and list
boxes</entry>
</row>
</tbody>
</tgroup>
</table>
</refsect2>
</refsect1>
<refsect1 id="address@hidden property.software.location}">
<title>Location</title>
<para>
<quote>Location</quote>
is a physical part of the property - it is common to organize the locations
in a hierarchical structure with
<quote>part-of</quote>
relations
</para>
<example>
<title>location hierarchy</title>
<programlisting>
<emphasis role="underline"> Name Level</emphasis>
-- Property 1
/-- Building 2
/-- Entrance 3
/-- Apartment 4
/-- Room 5
</programlisting>
</example>
<para>
The hierarchy is configurable in both width and depth - that is: one can
define as many levels as one like - and each level can also have as many
attributes as one would like
</para>
<figure>
<title>Location structure</title>
<graphic fileref="./location_conf.gif"/>
</figure>
<example>
<title>location hierarchy with configurable external relations</title>
<programlisting>
<emphasis role="underline"> Name Level
Relation</emphasis>
-- Property 1 <--- Owner,part of town
/-- Building 2
/-- Entrance 3 <--- Street
/-- Apartment 4 <--- Tenant
/-- Room 5
</programlisting>
</example>
<para>
Each level has a primary key - composed by the foreign key to the parent -
and this levels ID. In addition - there is a
<quote>superkey</quote>
named
<emphasis>location_code</emphasis>
for indexing and searching across the hierarchy
</para>
<example>
<title>Different keys for level 4: Apartment </title>
<para>
<table>
<title>part of the table location4</title>
<tgroup cols="5">
<thead>
<row>
<entry>location_code</entry>
<entry>loc1</entry>
<entry>loc2</entry>
<entry>loc3</entry>
<entry>loc4</entry> </row>
</thead>
<tbody>
<row>
<entry>5000-01-01-001</entry>
<entry>5000</entry>
<entry>01</entry>
<entry>01</entry>
<entry>001</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<programlisting>
Primary key: loc1 + loc2 + loc3 + loc4
Foreign key: loc1 + loc2 + loc3
Superkey : Location_code
</programlisting>
</example>
<para>When querying location on a certain level - it is joined with all
its ancestors to make inherited information available.</para>
</refsect1>
<refsect1 id="address@hidden property.software.entities}">
<title>Entities</title>
<subtitle>all imaginary objects - as equipment, components, reports
etc.</subtitle>
<para>Entities is a generic class of objects that all have in common
that they can be placed in a <!-- <link
linkend="property.software.location">location</link> --> address@hidden
architecture.pkg#property.software.location}
and/or linked to other (only one) entities.</para>
<para>Entities are organized in class of entitity and entity
category: each entity_category is represented by their own table</para>
<example>
<title>Structure of entities at the BBB implementation</title>
<orderedlist numeration="arabic">
<listitem>
<para>Equipment</para>
<orderedlist numeration="arabic">
<listitem>
<para>Elevator</para>
</listitem>
<listitem>
<para>Fire alarm central</para>
</listitem>
<listitem>
<para>Cable TV</para>
</listitem>
<listitem>
<para>Building components</para>
</listitem>
<listitem>
<para>Drawings</para>
</listitem>
<listitem>
<para>Key system</para>
</listitem>
</orderedlist>
</listitem>
<listitem>
<para>Reports</para>
<orderedlist numeration="arabic">
<listitem>
<para>Condition report</para>
</listitem>
<listitem>
<para>Insurance damage</para>
</listitem>
<listitem>
<para>Elevator control report</para>
</listitem>
</orderedlist>
</listitem>
</orderedlist>
<para><emphasis>Reports</emphasis> are configured to be linked to both
<emphasis>Equipment</emphasis> and <emphasis>location</emphasis>
— that is: One can write reports on both
<emphasis>Equipment</emphasis> and
<emphasis>location</emphasis>.</para>
<para>The table representing the category
<emphasis>elevator</emphasis> in the entity-class
<emphasis>Equipment</emphasis> is
here named <emphasis>fm_entity_1_1</emphasis></para>
</example>
<para>Information about the different attributes and their datatypes
is held by the <!-- <link
linkend="property.software.metadata">metadatabase</link> --> address@hidden
architecture.pkg#property.software.metadata}</para>
</refsect1>
<refsect1 id="address@hidden property.software.contacts}">
<title>Contacts / vendors</title>
<para>Vendors are organized as contacts in the standard addressbook
application
of phpgroupware and categorized in groups by maintenance district in
which they have contracts</para><para>Each Vendor can be member of
several categories</para>
<figure>
<title>Lookup vendor</title>
<graphic fileref="./lookup_vendor.png"/>
</figure>
</refsect1>
<refsect1 id="address@hidden property.software.prizebook}">
<title>Prize book per vendor</title>
<para>The prizebook is organized in
<emphasis>activities</emphasis><footnote><para>Or items/ what to
deliver</para>
</footnote><footnote><para>Accessible from the calculation of
orders - if a vendor is chosen</para>
</footnote>as the most detailed level</para>
<para>Each vendor delivers a set of activities - tied up in an
<emphasis>agreement</emphasis></para>
<figure>
<title>ER Prizebook</title>
<graphic fileref="./prizebook.png"/>
</figure>
<para>During the agreement period - each prize is subject to be altered by
index. The index
history is stored</para>
<figure>
<title>Prize index</title>
<graphic fileref="./prizebook_index.png"/>
</figure>
</refsect1>
<refsect1 id="address@hidden property.software.helpdesk}">
<title>Help desk</title>
<para>The HelpDesk submodule is a hacked version of the
phpgroupware's standard
Trouble Ticket System application. The main differences is that the
tickets are fixed to a location or entity - and that one is able to
start projects and <!-- <link
linkend="property.software.entities">entities</link> --> address@hidden
architecture.pkg#property.software.entities}
(i.e. reports) from a ticket - which
enhance the trace-ability <footnote><para>Links are generated from the
ticket to the project/entity - and from the project/entity back to the
ticket</para>
</footnote></para>
<para>The owner a of ticket is notified by mail when the ticket
is updated.</para>
<figure>
<title>Principle HelpDesk</title>
<graphic fileref="./tts_use.png"/>
</figure>
</refsect1>
<refsect1 id="address@hidden property.software.acc}">
<title>Access control / security</title>
<para>There is two level of permissions</para>
<orderedlist>
<listitem><simpara>Granting users
rights<footnote><para>Read,add,edit,delete and manage. For the
location <emphasis>invoice</emphasis> there is in addition three
different roles to controle granting for payment</para>
</footnote>at sub-module locations</simpara>
</listitem>
<listitem><simpara>Granting other users of the system rights to your
records</simpara>
</listitem>
</orderedlist>
<para>The granting of rights can both be given to users and groups
of users.</para>
<figure>
<title>Granting permission</title>
<graphic fileref="./admin_access.png"/>
</figure>
</refsect1>
<refsect1 id="address@hidden property.software.projects}">
<title>Projects</title>
<para>A project is a collection of orders/contracts. The project is
linked to a location or entity (equipment). Projects is separated
in orders/contracts that could be subject to bidding contest
amongst vendors. Each order is linked to its parent project and to
a vendor - and consists of a serie of work-descriptions to perform and / or
items to deliver.
</para>
<para>An order can be defined as simple as a brief description of
simple tasks - or as a detailed complex tender document with a
full blown deviation auditing system up per record in the contract
</para>
<para>The perspective of the projects is from the receiver of
the product delivered</para>
<figure>
<title>Project structure</title>
<graphic fileref="./project_structure.png"/>
</figure>
<para></para>
</refsect1>
<refsect1 id="address@hidden property.software.deviation}">
<title>Deviation</title>
<para>This is a log of how the contract is implemented during the project.
Each record in the contract can be altered by series of pairs of
amount/comments.
Along with the date to keep track of the development of the
project economy and altered demands
</para>
</refsect1>
<refsect1 id="address@hidden property.software.invoice}">
<title>Electronic invoice handling</title>
<para>The potential of the FM-system is optimized if integrated with the
organizations accounting system</para>
<para>The FM-system serves as a pre-accounting-buffer-system which
delivers acquisition-data to the accounting system when orders is
placed.</para>
<para>There is several approaches to deal with
incoming invoices:</para>
<itemizedlist>
<listitem><simpara>Manual registration (punching) of invoices into the
accounting system</simpara></listitem>
<listitem><simpara>Import of datafiles/OCR<footnote><para>Optical Character
Recognition</para>
</footnote>-scanning of invoices into the FM-system - where invoices
are matched against orders before approved for payment and
exported to the accounting system</simpara>
</listitem>
<listitem><simpara>Import of datafiles/OCR-scanning of invoices into the
accounting system before either:</simpara>
<itemizedlist>
<listitem><simpara>approval for payment / syncronisation with
FM-system</simpara>
</listitem>
<listitem><simpara>syncronisation with FM-system / approval for payment
/ syncronisation with accounting system</simpara>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
<para>The FM-system supports import of
cvs-files<footnote><para>MsExcel spreadsheets saved as cvs</para>
</footnote>, flatfiles, BBS-files<footnote><para>A proprietary
file format for data exchange for the Norwegian banking
payment and clearance house (BBS)</para>
</footnote>and XML-files</para>
<para>Accounting systems tend to be very strict regarding direct
access to the database - thus in most cases a XML-file transfer is the
most practical solution</para>
</refsect1>
<refsect1 id="address@hidden property.software.gab}">
<title>Gab-register (w/link to GIS-map)</title>
<para>In Norway there is a property (estate) ownership register called GAB -
best
translated to property,address and building.The GAB-identity of a
property serves as a key to look up different types of maps
accessible over the internet. This ID also serves as a key to match
invoices from public services to the right property location.</para>
</refsect1>
<refsect1 id="address@hidden property.software.documentation}">
<title>Documentation</title>
<para></para>
</refsect1>
<refsect1 id="address@hidden property.software.drawing}">
<title>Drawing register</title>
<para></para>
</refsect1>
<refsect1 id="address@hidden property.software.depreciation}">
<title>Value Depreciation</title>
<para></para>
</refsect1>
</refentry>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Phpgroupware-cvs] property/tutorials/property property.pkg, 1.2 prizebook_index.png, 1.2 property.pkg.ini, 1.2 project_structure.png, 1.2 update.apache.php.pkg, 1.2 tts_use.png, 1.2 prizebook.png, 1.2 lookup_vendor.png, 1.2 location_conf.gif, 1.2 admin_access.png, 1.2 architecture.pkg, 1.2,
ceb <=
- Prev by Date:
[Phpgroupware-cvs] property/setup setup.inc.php, 1.8 default_records.inc.php, 1.6 tables_current.inc.php, 1.18 tables_update.inc.php, 1.3
- Next by Date:
[Phpgroupware-cvs] property/templates/default admin_entity.xsl, 1.2.2.1
- Previous by thread:
[Phpgroupware-cvs] property/setup setup.inc.php, 1.8 default_records.inc.php, 1.6 tables_current.inc.php, 1.18 tables_update.inc.php, 1.3
- Next by thread:
[Phpgroupware-cvs] property/templates/default admin_entity.xsl, 1.2.2.1
- Index(es):