phpgroupware-cvs
[Top][All Lists]
Advanced

[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 &mdash; and how to 
implement it
   &mdash; 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
   &mdash; and working ok). If one wants to utilize foreign keys &mdash; one has
   to consider not using MySQL &mdash; 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 &mdash; one is bound to send mail via a valid smtp
    server &mdash; 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 &mdash; 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 &mdash; 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>
     &mdash; and fill inn appropriate values &mdash; and &mdash;
     <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>
     &mdash; 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 &mdash; 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 &mdash; and to enable the applications for these
     groups/users. One has to define a set of global and user-specific
     preferences &mdash; 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
    &mdash; 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 &mdash; the tables can be accessed
    directly within the procedures &mdash; as opposed to when the databases
    resides on different servers &mdash; 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
    &mdash; 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 &mdash; 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 &gt; 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 &lt; @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 &mdash; 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 &mdash;
    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 &mdash; the obvious choice is
     the bundled IIS. For best performance &mdash; make sure that the version is
     later than 5.x.
    </para>
    <para>
     Alternatively &mdash; 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>
     &mdash; and install it as described in the
     <quote>install.txt</quote>
     . Choose the CGI-mode &mdash; even though there is a performance penalty.
    </para>
    <para>
     If one intends to use MSSQL database server &mdash; one has to enable the
     <quote>extension = php_mssql.dll</quote>
     in the extension part of
     <quote>php.ini</quote>
     &mdash; 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) &mdash; 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 &mdash; 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 &mdash; 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 &mdash; 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 &mdash; 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&lt;level&gt; - and is referencing its parent table by foreign keys
   </para>
   <para>
    Each level is also referencing a category-table - which is named
    fm_location&lt;level&gt;_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_&lt;type&gt;_&lt;category&gt;
   </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  &lt;--- Owner,part of town
    /-- Building                   2
      /-- Entrance                 3  &lt;--- Street
        /-- Apartment              4  &lt;--- 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>
    &mdash; 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>






reply via email to

[Prev in Thread] Current Thread [Next in Thread]