fmsystem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Fmsystem-commits] [7246] bkbooking: delete function for booking and boo


From: Kjell Arne Espedal
Subject: [Fmsystem-commits] [7246] bkbooking: delete function for booking and bookingfrontend application for cancelation of booking /allocation
Date: Tue, 03 May 2011 08:58:46 +0000

Revision: 7246
          http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=7246
Author:   kjell
Date:     2011-05-03 08:58:45 +0000 (Tue, 03 May 2011)
Log Message:
-----------
bkbooking: delete function for booking and bookingfrontend application for 
cancelation of booking/allocation

Modified Paths:
--------------
    trunk/booking/inc/class.menu.inc.php
    trunk/booking/inc/class.sobooking.inc.php
    trunk/booking/inc/class.sosystem_message.inc.php
    trunk/booking/inc/class.uiallocation.inc.php
    trunk/booking/inc/class.uibooking.inc.php
    trunk/booking/inc/class.uidashboard.inc.php
    trunk/booking/inc/class.uisystem_message.inc.php
    trunk/booking/setup/phpgw_no.lang
    trunk/booking/templates/base/allocation_info.xsl
    trunk/booking/templates/base/booking.xsl
    trunk/booking/templates/base/booking_info.xsl
    trunk/bookingfrontend/inc/class.uiallocation.inc.php
    trunk/bookingfrontend/inc/class.uibooking.inc.php
    trunk/bookingfrontend/setup/phpgw_no.lang
    trunk/bookingfrontend/templates/base/allocation_info.xsl
    trunk/bookingfrontend/templates/base/booking_info.xsl

Added Paths:
-----------
    trunk/booking/templates/base/booking_delete.xsl
    trunk/booking/templates/base/booking_delete_preview.xsl
    trunk/bookingfrontend/templates/base/allocation_cancel.xsl
    trunk/bookingfrontend/templates/base/booking_cancel.xsl

Modified: trunk/booking/inc/class.menu.inc.php
===================================================================
--- trunk/booking/inc/class.menu.inc.php        2011-05-03 08:22:51 UTC (rev 
7245)
+++ trunk/booking/inc/class.menu.inc.php        2011-05-03 08:58:45 UTC (rev 
7246)
@@ -27,6 +27,12 @@
                                        'url'   => 
$GLOBALS['phpgw']->link('/index.php', array('menuaction'=> 
'booking.uidashboard.index') ),
                                        'image' => array('property', 
'location'),
                                ),
+                               'messages' => array
+                               (
+                                       'text'  => lang('Messages'),
+                                       'url'   => 
$GLOBALS['phpgw']->link('/index.php', array('menuaction'=> 
'booking.uisystem_message.index') ),
+                                                       'image' => 
array('property', 'location'),
+                               ),
                                // 'applications' => array
                                // (
                                //      'text'  => lang('Applications'),

Modified: trunk/booking/inc/class.sobooking.inc.php
===================================================================
--- trunk/booking/inc/class.sobooking.inc.php   2011-05-03 08:22:51 UTC (rev 
7245)
+++ trunk/booking/inc/class.sobooking.inc.php   2011-05-03 08:58:45 UTC (rev 
7246)
@@ -332,7 +332,117 @@
                        }
                        return $results;
                }
-               
+
+               public function get_booking_id($booking)
+        {
+                       $table_name = $this->table_name;
+                       $db = $this->db;
+
+            $from = "'".$booking['from_']."'";
+            $to = "'".$booking['to_']."'";
+            $gid = $booking['group_id'];
+            $season_id = $booking['season_id'];
+            $resources = implode(",", $booking['resources']);
+
+                       $sql = "SELECT bb.id,bbr.resource_id FROM bb_booking 
bb,bb_booking_resource bbr WHERE bb.from_ = ($from) AND bb.to_ = ($to) AND 
bb.group_id = ($gid) AND bb.season_id = ($season_id) AND bb.id = bbr.booking_id 
AND EXISTS (SELECT 1 FROM bb_booking_resource bbr2 WHERE  bbr2.resource_id IN 
($resources) AND bbr2.resource_id = bbr.resource_id)";
+
+                       $this->db->limit_query($sql, 0,__LINE__, __FILE__,1);
+                       if(!$this->db->next_record())
+                       {
+                               return False;
+                       } 
+            return $this->db->f('id', false);
+        }
+
+        public function check_allocation($id)
+        {
+                       $table_name = $this->table_name;
+                       $db = $this->db;
+
+            $sql = "SELECT allocation_id as aid FROM bb_booking WHERE 
allocation_id = ( SELECT allocation_id FROM bb_booking WHERE id = ($id) ) GROUP 
BY allocation_id HAVING count(id) < 2";
+
+                       $this->db->limit_query($sql, 0,__LINE__, __FILE__,1);
+                       if(!$this->db->next_record())
+                       {
+                               return False;
+                       } 
+            return $this->db->f('aid', false);
+        }
+               function check_for_booking($booking)
+        {
+            $from = "'".$booking['from_']."'";
+            $to = "'".$booking['to_']."'";
+            $gid = $booking['group_id'];
+            $season_id = $booking['season_id'];
+            $resources = implode(",", $booking['resources']);
+
+                       $sql = "SELECT id FROM bb_allocation ba2 WHERE 
ba2.from_ = ($from) AND ba2.to_ = ($to) AND ba2.organization_id = (SELECT 
organization_id FROM bb_group WHERE id = ($gid)) AND ba2.season_id = 
($season_id) AND EXISTS ( SELECT 1 FROM bb_allocation  a,bb_allocation_resource 
b WHERE a.id = b.allocation_id AND b.resource_id IN ($resources)) AND NOT 
EXISTS (SELECT 1 FROM bb_booking bb WHERE ba2.id = bb.allocation_id)";
+
+                       $this->db->limit_query($sql, 0,__LINE__, __FILE__,1);
+                       if(!$this->db->next_record())
+                       {
+                               return False;
+                       }
+                       return $this->db->f('id', false);
+            
+        }
+
+               public function delete_booking($id)
+        {
+                       $db = $this->db;
+                       $table_name = $this->table_name.'_resource';
+                       $sql = "DELETE FROM $table_name WHERE booking_id = 
($id)";
+                       $db->query($sql, __LINE__, __FILE__);
+                       $table_name = $this->table_name.'_targetaudience';
+                       $sql = "DELETE FROM $table_name WHERE booking_id = 
($id)";
+                       $db->query($sql, __LINE__, __FILE__);
+                       $table_name = $this->table_name.'_agegroup';
+                       $sql = "DELETE FROM $table_name WHERE booking_id = 
($id)";
+                       $db->query($sql, __LINE__, __FILE__);
+                       $table_name = $this->table_name;
+                       $sql = "DELETE FROM $table_name WHERE id = ($id)";
+                       $db->query($sql, __LINE__, __FILE__);
+               }
+
+               public function delete_allocation($id)
+        {
+                       $db = $this->db;
+                       $sql = "DELETE FROM bb_allocation_resource WHERE 
allocation_id = ($id)";
+                       $db->query($sql, __LINE__, __FILE__);
+                       $sql = "DELETE FROM bb_allocation WHERE id = ($id)";
+                       $db->query($sql, __LINE__, __FILE__);
+               }
+
+               public function got_no_allocation($booking) {
+                       $table_name = $this->table_name;
+                       $db = $this->db;
+
+            $from = "'".$booking['from_']."'";
+            $to = "'".$booking['to_']."'";
+            $org_id = $booking['organization_id'];
+            $season_id = $booking['season_id'];
+            $resources = implode(",", $booking['resources']);
+
+                       $sql = "SELECT id FROM bb_allocation ba2 WHERE 
ba2.from_ = ($from) AND ba2.to_ = ($to) AND ba2.organization_id = ($org_id) AND 
ba2.season_id = ($season_id) AND EXISTS ( SELECT 1 FROM bb_allocation  
a,bb_allocation_resource b WHERE a.id = b.allocation_id AND b.resource_id IN 
($resources))";
+                       $this->db->limit_query($sql, 0,__LINE__, __FILE__,1);
+                       if(!$this->db->next_record())
+                       {
+                               return True;
+                       } else {
+                               return False;
+            }
+               }
+
+               function get_building($id)
+               {
+                       $this->db->limit_query("SELECT name FROM bb_building 
where id=" . intval($id), 0, __LINE__, __FILE__, 1);
+                       if(!$this->db->next_record())
+                       {
+                               return False;
+                       }
+                       return $this->db->f('name', false);
+               }
+
                public function find_expired() {
                        $table_name = $this->table_name;
                        $db = $this->db;

Modified: trunk/booking/inc/class.sosystem_message.inc.php
===================================================================
--- trunk/booking/inc/class.sosystem_message.inc.php    2011-05-03 08:22:51 UTC 
(rev 7245)
+++ trunk/booking/inc/class.sosystem_message.inc.php    2011-05-03 08:58:45 UTC 
(rev 7246)
@@ -32,7 +32,20 @@
                        }
                        return $this->db->f('name', false);
                }
-               
+
        }
+       class booking_sosystem_message_association extends booking_socommon
+       {
+               function __construct()
+               {
+                       parent::__construct('bb_system_message_association', 
+                               array(
+                                       'id'                                    
=> array('type' => 'int'),
+                                       'building_id'           => array('type' 
=> 'int'),
+                                       'type'  => array('type' => 'string', 
'required' => true),
+                                       'status'        => array('type' => 
'string', 'required' => true),
+                                       ));
+               }
+       }               
 
 

Modified: trunk/booking/inc/class.uiallocation.inc.php
===================================================================
--- trunk/booking/inc/class.uiallocation.inc.php        2011-05-03 08:22:51 UTC 
(rev 7245)
+++ trunk/booking/inc/class.uiallocation.inc.php        2011-05-03 08:58:45 UTC 
(rev 7246)
@@ -378,6 +378,10 @@
                public function delete()
                {
                        $id = intval(phpgw::get_var('allocation_id', 'GET'));
+                       $outseason = phpgw::get_var('outseason', 'GET');
+                       $recurring = phpgw::get_var('recurring', 'GET');
+                       $repeat_untild = phpgw::get_var('repeat_until', 'GET');
+                       $field_interval = 
intval(phpgw::get_var('field_interval', 'GET'));
                        $allocation = $this->bo->read_single($id);
                $season = 
$this->season_bo->read_single($allocation['season_id']);
                        $step = phpgw::get_var('step', 'str', 'POST');
@@ -460,7 +464,12 @@
 
                        if ($step < 2) 
             {
-                       self::render_template('allocation_delete', 
array('allocation' => $allocation));
+                       self::render_template('allocation_delete', 
array('allocation' => $allocation,
+                                       'recurring' => $recurring,
+                                       'outseason' => $outseason,
+                                       'interval' => $field_interval,
+                                       'repeat_until' => $repeat_until,
+                ));
             }
                        elseif ($step == 2) 
             {

Modified: trunk/booking/inc/class.uibooking.inc.php
===================================================================
--- trunk/booking/inc/class.uibooking.inc.php   2011-05-03 08:22:51 UTC (rev 
7245)
+++ trunk/booking/inc/class.uibooking.inc.php   2011-05-03 08:58:45 UTC (rev 
7246)
@@ -10,6 +10,7 @@
                        'add'                   =>      true,
                        'show'                  =>      true,
                        'edit'                  =>      true,
+                       'delete'                        =>      true,
                        'info'                  =>      true,
                        'building_schedule' =>  true,
                        'resource_schedule' =>  true,
@@ -255,8 +256,7 @@
                                {
                                        $errors['booking'] = lang('This booking 
is not connected to a season');
                                }       
-
-                               if (!$errors['booking'] && 
!$errors['season_boundary'])
+                               if (!$errors['activity_id'] && 
!$errors['booking'] && !$errors['season_boundary'])
                                {
                                        $step++;
                                }
@@ -321,7 +321,8 @@
                                                        $valid_dates[$i]['to_'] 
= $todate;
                                                        if ($step == 3)
                                                        {
-                                if( isset($noallocation)) {
+                                $gotnoallocation = 
$this->bo->so->got_no_allocation($booking); 
+                                if( isset($noallocation) || $gotnoallocation) {
                                     $allocation['resources'] = 
$booking['resources'];
                                     $allocation['cost'] = $booking['cost'];
                                     $allocation['building_id'] = 
$booking['building_id'];
@@ -338,6 +339,7 @@
                                                                
$booking['secret'] = $this->generate_secret();
                                                                $receipt = 
$this->bo->add($booking);
                                     $booking['allocation_id'] = '';
+                                    
$this->allocation_bo->so->update_id_string();
                                 } else {
                                                                
$booking['secret'] = $this->generate_secret();
                                                                $receipt = 
$this->bo->add($booking);
@@ -477,12 +479,150 @@
                        $activities = $activities['results'];
                        self::render_template('booking_edit', array('booking' 
=> $booking, 'activities' => $activities, 'agegroups' => $agegroups, 'audience' 
=> $audience));
                }
+
+               public function delete()
+               {
+                       $id = intval(phpgw::get_var('id', 'GET'));
+                       $booking = $this->bo->read_single($id);
+            $allocation = 
$this->allocation_bo->read_single($booking['allocation_id']);
+            $season = $this->season_bo->read_single($booking['season_id']);
+                       $step = phpgw::get_var('step', 'str', 'POST');
+               if (! isset($step)) $step = 1;
+            $errors = array();
+                       $invalid_dates = array();
+                       $valid_dates = array();
+            $allocation_delete = array();
+            $allocation_keep = array();
+
+                       if($_SERVER['REQUEST_METHOD'] == 'POST')
+                       {
+                               $from_date = $_POST['from_'];
+                               $to_date = $_POST['to_'];
+
+                               if ($_POST['recurring'] != 'on' && 
$_POST['outseason'] != 'on' )
+                {
+                    if ($_POST['allocation_delete'] != 'on') {
+                        $this->bo->so->delete_booking($id);
+                        $this->redirect(array('menuaction' => 
'booking.uimassbooking.schedule', 'id'=>$booking['building_id']));
+                    }
+                    else
+                    {
+                        $allocation_id = $booking['allocation_id'];
+                        $this->bo->so->delete_booking($id);
+                        $err  = 
$this->allocation_bo->so->check_for_booking($allocation_id);
+                        if ($err)
+                        {
+                           $errors['booking'] = lang('Could not delete 
allocation due to a booking still use it');
+                        }
+                        else
+                        {
+                            $err = 
$this->allocation_bo->so->delete_allocation($allocation_id);
+                            $this->redirect(array('menuaction' => 
'booking.uimassbooking.schedule', 'id'=>$booking['building_id']));
+                        }
+                    }
+                } 
+                else
+                { 
+                    $step++;
+                                       if ($_POST['recurring'] == 'on') {
+                                               $repeat_until = 
strtotime($_POST['repeat_until'])+60*60*24; 
+                                       } 
+                                       else
+                                       {
+                                               $repeat_until = 
strtotime($season['to_'])+60*60*24; 
+                                               $_POST['repeat_until'] = 
$season['to_'];
+                                       } 
+
+                                       $max_dato = strtotime($_POST['to_']); 
// highest date from input
+                                       $interval = 
$_POST['field_interval']*60*60*24*7; // weeks in seconds
+                                       $i = 0;
+                                       // calculating valid and invalid dates 
from the first booking's to-date to the repeat_until date is reached
+                                       // the form from step 1 should validate 
and if we encounter any errors they are caused by double bookings.
+
+                                       while (($max_dato+($interval*$i)) <= 
$repeat_until)
+                                       {
+                                               $fromdate = date('Y-m-d H:i', 
strtotime($_POST['from_']) + ($interval*$i));
+                                               $todate = date('Y-m-d H:i', 
strtotime($_POST['to_']) + ($interval*$i));
+                                               $booking['from_'] = $fromdate;
+                                               $booking['to_'] = $todate;
+
+                        $id = $this->bo->so->get_booking_id($booking);         
       
+                        if($id) {
+                            $aid = $this->bo->so->check_allocation($id);
+                        } else {
+                            $aid = $this->bo->so->check_for_booking($booking); 
   
+                        }
+                            
+                               if ($id) 
+                                               {
+                                                       
$valid_dates[$i]['from_'] = $fromdate;
+                                                       $valid_dates[$i]['to_'] 
= $todate;
+                                                       if ($step == 3)
+                                                       {
+                                $stat = $this->bo->so->delete_booking($id);    
                        
+                            }                            
+                        }
+                        if ($_POST['delete_allocation'] == 'on')               
          {
+                                               if (!$aid) 
+                                               {
+                                                       
$allocation_keep[$i]['from_'] = $fromdate;
+                                                       
$allocation_keep[$i]['to_'] = $todate;
+                                               } 
+                                               else 
+                                               {
+                                                       
$allocation_delete[$i]['from_'] = $fromdate;
+                                                       
$allocation_delete[$i]['to_'] = $todate;
+                                                       if ($step == 3)
+                                                       {
+                                   $stat = 
$this->bo->so->delete_allocation($aid);                            
+                                }                            
+                            }
+                        }
+                                               $i++;
+                    }
+                                       if ($step == 3) 
+                                       {
+                                               
$this->redirect(array('menuaction' => 'booking.uimassbooking.schedule', 
'id'=>$allocation['building_id']));
+                                       }
+                }
+                       }
+
+                       $this->flash_form_errors($errors);
+                       self::add_javascript('booking', 'booking', 
'booking.js');
+                       $booking['resources_json'] = 
json_encode(array_map('intval', $booking['resources']));
+                       $booking['cancel_link'] = self::link(array('menuaction' 
=> 'booking.uibooking.show', 'id' => $booking['id']));
+                       $booking['booking_link'] = 
self::link(array('menuaction' => 'booking.uibooking.show', 'id' => 
$booking['id']));
+
+                       if ($step < 2) 
+            {
+                       self::render_template('booking_delete', array('booking' 
=> $booking
+                ));
+            }
+                       elseif ($step == 2) 
+            {
+                               self::render_template('booking_delete_preview', 
array('booking' => $booking,
+                                       'step' => $step,
+                                       'recurring' => $_POST['recurring'],
+                                       'outseason' => $_POST['outseason'],
+                                       'interval' => $_POST['field_interval'],
+                                       'repeat_until' => 
$_POST['repeat_until'],
+                                       'from_date' => $from_date,
+                                       'to_date' => $to_date,
+                    'delete_allocation' => $_POST['delete_allocation'],
+                                       'allocation_keep' => $allocation_keep,
+                                       'allocation_delete' => 
$allocation_delete,
+                                       'valid_dates' => $valid_dates,
+                                       'invalid_dates' => $invalid_dates
+                               ));
+            }                
+               }
                
                public function show()
                {
                        $booking = $this->bo->read_single(phpgw::get_var('id', 
'GET'));
                        $booking['bookings_link'] = 
self::link(array('menuaction' => 'booking.uibooking.index'));
                        $booking['edit_link'] = self::link(array('menuaction' 
=> 'booking.uibooking.edit', 'id' => $booking['id']));
+                       $booking['delete_link'] = self::link(array('menuaction' 
=> 'booking.uibooking.delete', 'id' => $booking['id']));
                        $resource_ids = '';
                        foreach($booking['resources'] as $res)
                        {
@@ -507,7 +647,7 @@
                        $booking['building_link'] = 
self::link(array('menuaction' => 'booking.uibuilding.show', 'id' => 
$booking['resources'][0]['building_id']));
                        $booking['org_link'] = self::link(array('menuaction' => 
'booking.uiorganization.show', 'id' => $booking['group']['organization_id']));
                        $booking['group_link'] = self::link(array('menuaction' 
=> 'booking.uigroup.show', 'id' => $booking['group']['id']));
-                       
+                       $booking['delete_link'] = self::link(array('menuaction' 
=> 'booking.uibooking.delete', 'id' => $booking['id']));
                        $booking['edit_link'] = self::link(array('menuaction' 
=> 'booking.uibooking.edit', 'id' => $booking['id']));
                                
                        $booking['when'] = 
pretty_timestamp($booking['from_']).' - '.pretty_timestamp($booking['to_']);

Modified: trunk/booking/inc/class.uidashboard.inc.php
===================================================================
--- trunk/booking/inc/class.uidashboard.inc.php 2011-05-03 08:22:51 UTC (rev 
7245)
+++ trunk/booking/inc/class.uidashboard.inc.php 2011-05-03 08:58:45 UTC (rev 
7246)
@@ -98,24 +98,6 @@
                                     )
                                 )
                             ),
-#                                                      array('type' => 
'filter', 
-#                                                              'name' => 
'type',
-#                                'text' => lang('Type').':',
-#                                'list' => array(
-#                                    array(
-#                                        'id' => 'not',
-#                                        'name' => lang('Not selected')
-#                                    ), 
-#                                    array(
-#                                        'id' => 'application',
-#                                        'name' => lang('Application')
-#                                    ), 
-#                                    array(
-#                                        'id' => 'message',
-#                                        'name' => lang('Message')
-#                                    ), 
-#                                )
-#                            ),
                                                        array('type' => 
'autocomplete', 
                                                                'name' => 
'building',
                                                                'ui' => 
'building',
@@ -136,8 +118,8 @@
                                                        ),
                                                        array(
                                                                'type' => 
'link',
-                                                               'value' => 
$this->show_all_dashboard_messages() ? lang('Show only messages assigned to 
me') : lang('Show all messages'),
-                                                               'href' => 
self::link(array('menuaction' => 
$this->url_prefix.'.toggle_show_all_dashboard_messages'))
+                                                               'value' => 
lang('Show messages'),
+                                                               'href' => 
self::link(array('menuaction' => 'booking.uisystem_message.index'))
                                                        ),
                                                )
                                        ),
@@ -223,19 +205,19 @@
                        }
                        array_walk($applications["results"], array($this, 
"_add_links"), "booking.uiapplication.show");
 
-                       $messages = 
$this->system_message_bo->read_message_data($this->show_all_dashboard_messages()
 ? null : $this->current_account_id());
+#                      $messages = 
$this->system_message_bo->read_message_data($this->show_all_dashboard_messages()
 ? null : $this->current_account_id());
 
-                       if ($this->show_all_dashboard_messages() || 
$this->show_all_dashboard_applications())
-                       {
-                               if ($this->show_all_dashboard_messages()) {
-                                       $applications['results'] = $messages;
-                               }
-                       } else {
-                               foreach($messages as $message)
-                               {
-                                       $applications['results'][] = $message;  
        
-                               } 
-                       }
+#                      if ($this->show_all_dashboard_messages() || 
$this->show_all_dashboard_applications())
+#                      {
+#                              if ($this->show_all_dashboard_messages()) {
+#                                      $applications['results'] = $messages;
+#                              }
+#                      } else {
+#                              foreach($messages as $message)
+#                              {
+#                                      $applications['results'][] = $message;  
        
+#                              } 
+#                      }
                        return $this->yui_results($applications);
                }
 

Modified: trunk/booking/inc/class.uisystem_message.inc.php
===================================================================
--- trunk/booking/inc/class.uisystem_message.inc.php    2011-05-03 08:22:51 UTC 
(rev 7245)
+++ trunk/booking/inc/class.uisystem_message.inc.php    2011-05-03 08:58:45 UTC 
(rev 7246)
@@ -8,25 +8,45 @@
                        'index'                 =>      true,
                        'show'                  =>      true,
                        'edit'                  =>      true,
+                       'toggle_show_all_dashboard_messages' => true,
                        'toggle_show_inactive'  =>      true,
                );
 
+               const SHOW_ALL_DASHBOARD_MESSAGES_SESSION_KEY = 
"show_all_dashboard_messages";
+
         protected $module;
                public function __construct()
                {
                        parent::__construct();
                        $this->bo = CreateObject('booking.bosystem_message');
-                       self::set_active_menu('booking::system_message');
+                       $this->allocation_bo = 
CreateObject('booking.boallocation');
+                       self::set_active_menu('booking::messages');
+                       $this->url_prefix = 'booking.uisystem_message';
+            $this->module = 'booking';
+               }
 
-            $this->module = "booking";
+               public function toggle_show_all_dashboard_messages()
+               {
+                       if($this->show_all_dashboard_messages())
+                       {
+                               
unset($_SESSION[self::SHOW_ALL_DASHBOARD_MESSAGES_SESSION_KEY]);
+                       } else {
+                               
$_SESSION[self::SHOW_ALL_DASHBOARD_MESSAGES_SESSION_KEY] = true;
+                       }
+                       $this->redirect(array('menuaction' => 
$this->url_prefix.'.index'));
                }
-
                
+               public function show_all_dashboard_messages() {
+                       return 
array_key_exists(self::SHOW_ALL_DASHBOARD_MESSAGES_SESSION_KEY, $_SESSION);
+               }
+               
                public function index()
                {
                        if(phpgw::get_var('phpgw_return_as') == 'json') {
                                return $this->index_json();
                        }
+
+                       $GLOBALS['phpgw_info']['apps']['manual']['section'] = 
'booking_manual';
                        self::add_javascript('booking', 'booking', 
'datatable.js');
                        phpgwapi_yui::load_widget('datatable');
                        phpgwapi_yui::load_widget('paginator');
@@ -34,13 +54,48 @@
                                'form' => array(
                                        'toolbar' => array(
                                                'item' => array(
-                                                       array(
-                                                               'type' => 
'link',
-                                                               'hidden' => 
true,
-                                                               'value' => 
lang('New message'),
-                                                               'href' => 
self::link(array('menuaction' => 'booking.uisystem_message.edit'))
+#                                                      array('type' => 
'filter', 
+#                                                              'name' => 
'status',
+#                                'text' => lang('Status').':',
+#                                'list' => array(
+#                                    array(
+#                                        'id' => 'not',
+#                                        'name' => lang('Not selected')
+#                                    ), 
+#                                    array(
+#                                        'id' => 'NEW',
+#                                        'name' => lang('NEW')
+#                                    ), 
+#                                    array(
+#                                        'id' => 'CLOSED',
+#                                        'name' => lang('CLOSED')
+#                                    )
+#                                )
+#                            ),
+#                                                      array('type' => 
'filter', 
+#                                                              'name' => 
'type',
+#                                'text' => lang('Type').':',
+#                                'list' => array(
+#                                    array(
+#                                        'id' => 'not',
+#                                        'name' => lang('Not selected')
+#                                    ), 
+#                                    array(
+#                                        'id' => 'message',
+#                                        'name' => lang('Message')
+#                                    ), 
+#                                    array(
+#                                        'id' => 'cancelation',
+#                                        'name' => lang('Cancelation')
+#                                    ), 
+#                                )
+#                            ),
+                                                       array('type' => 
'autocomplete', 
+                                                               'name' => 
'building',
+                                                               'ui' => 
'building',
+                                                               'text' => 
lang('Building').':',
                                                        ),
-                                                       array('type' => 'text', 
+                                               array('type' => 'text', 
                                                                'name' => 
'query'
                                                        ),
                                                        array(
@@ -50,9 +105,14 @@
                                                        ),
                                                        array(
                                                                'type' => 
'link',
-                                                               'value' => 
$_SESSION['showall'] ? lang('Show only active') : lang('Show all'),
-                                                               'href' => 
self::link(array('menuaction' => $this->url_prefix.'.toggle_show_inactive'))
+                                                               'value' => 
lang('Show applications') ,
+                                                               'href' => 
self::link(array('menuaction' => 'booking.uidashboard.index'))
                                                        ),
+                                                       array(
+                                                               'type' => 
'link',
+                                                               'value' => 
$this->show_all_dashboard_messages() ? lang('Show only messages assigned to 
me') : lang('Show all messages'),
+                                                               'href' => 
self::link(array('menuaction' => 
$this->url_prefix.'.toggle_show_all_dashboard_messages'))
+                                                       ),
                                                )
                                        ),
                                ),
@@ -60,27 +120,43 @@
                                        'source' => 
self::link(array('menuaction' => 'booking.uisystem_message.index', 
'phpgw_return_as' => 'json')),
                                        'field' => array(
                                                array(
-                                                       'key' => 'title',
-                                                       'label' => 
lang('Title'),
+                                                       'key' => 'id',
+                                                       'label' => lang('ID'),
                                                        'formatter' => 
'YAHOO.booking.formatLink'
                                                ),
                                                array(
+                                                       'key' => 'status',
+                                                       'label' => 
lang('Status')
+                                               ),
+                                               array(
+                                                       'key' => 'type',
+                                                       'label' => lang('Type')
+                                               ),
+                                               array(
                                                        'key' => 'created',
                                                        'label' => 
lang('Created')
                                                ),
                                                array(
-                                                       'key' => 'building_id',
-                                                       'label' => 
lang('Building')
+                                                       'key' => 'modified',
+                                                       'label' => lang('Last 
modified')
                                                ),
                                                array(
-                                                       'key' => 'type',
-                                                       'label' => lang('Type')
+                                                       'key' => 'what',
+                                                       'label' => lang('What')
                                                ),
                                                array(
-                                                       'key' => 'status',
-                                                       'label' => 
lang('Status')
+                                                       'key' => 
'activity_name',
+                                                       'label' => 
lang('Activity')
                                                ),
                                                array(
+                                                       'key' => 'contact_name',
+                                                       'label' => 
lang('Contact')
+                                               ),
+                                               array(
+                                                       'key' => 
'case_officer_name',
+                                                       'label' => lang('Case 
Officer')
+                                               ),
+                                               array(
                                                        'key' => 'link',
                                                        'hidden' => true
                                                )
@@ -92,6 +168,8 @@
 
                public function index_json()
                {
+                       $this->db = $GLOBALS['phpgw']->db;
+
                        if ( 
!isset($GLOBALS['phpgw_info']['user']['apps']['admin']) &&
                             
!$this->bo->has_role(booking_sopermission::ROLE_MANAGER) )
                        {
@@ -118,7 +196,12 @@
                                $system_message['type'] = 
lang($system_message['type']);
                                $system_message['status'] = 
lang($system_message['status']);
                        }
-                       array_walk($system_messages["results"], array($this, 
"_add_links"), $this->module.".uisystem_message.show");
+                       array_walk($system_messages['results'], array($this, 
'_add_links'), $this->module.'.uisystem_message.show');
+
+            $messages = 
$this->bo->read_message_data($this->show_all_dashboard_messages() ? null : 
$this->current_account_id());
+
+               $system_messages['results'] = $messages;
+
                        $results = $this->yui_results($system_messages);
                        
                        return $results;
@@ -183,7 +266,7 @@
                        $system_message = 
$this->bo->read_single(phpgw::get_var('id', 'GET'));
                        $system_message['system_messages_link'] = 
self::link(array('menuaction' => $this->module . '.uisystem_message.index'));
                        $system_message['system_message_link'] = 
self::link(array('menuaction' => $this->module . '.uisystem_message.show', 'id' 
=> $system_message['system_message_id']));
-                       $system_message['back_link'] = 
self::link(array('menuaction' => $this->module . '.uidashboard.index'));
+                       $system_message['back_link'] = 
self::link(array('menuaction' => $this->module . '.uisystem_message.index'));
 
                        if($_SERVER['REQUEST_METHOD'] == 'POST')
                        {

Modified: trunk/booking/setup/phpgw_no.lang
===================================================================
--- trunk/booking/setup/phpgw_no.lang   2011-05-03 08:22:51 UTC (rev 7245)
+++ trunk/booking/setup/phpgw_no.lang   2011-05-03 08:58:45 UTC (rev 7246)
@@ -495,7 +495,19 @@
 Recurring allocation deletion  booking no      Slettings intervall
 Delete allocation      booking no      Slett tildeling
 Delete allocations     booking no      Slett tildelinger
+Delete booking booking no      Slett booking
+Delete bookings        booking no      Slett bookinger
 Allocations that will be deleted       booking no      Tildelinger som vil bli 
slettet
 Allocations  with existing bookings (%1)       booking no      Tildeinger med 
eksisterende bookinger (%1)
-office booking no      Kontor
-office user    booking no      Bruker koplet til kontor
+Delete allocation also booking no      Slett underliggende tildelinger
+Bookings to be deleted booking no      Booking for sletting
+Allocations that is going to be deleted        booking no      Tildelinger for 
sletting
+Allocations with still existing bookings (%1)  booking no      Tildelinger som 
ikke blir slettet på grunn av eksisterende bookinger (%1)
+Messages       booking no      Beskjeder
+cancelation    booking no      Avbestilling
+Cancelation of allocation from booking no      Avbestilling av tildeling fra
+Cancelation of booking from    booking no      Avbestilling av booking fra
+To cancel booking use this link        booking no      For å slette bookingen 
bruk lenken
+To cancel allocation use this link     booking no      For å slette 
tildelingen bruk lenken
+Show applications      booking no      Vis søknader
+Show messages  booking no      Vis beskjeder

Modified: trunk/booking/templates/base/allocation_info.xsl
===================================================================
--- trunk/booking/templates/base/allocation_info.xsl    2011-05-03 08:22:51 UTC 
(rev 7245)
+++ trunk/booking/templates/base/allocation_info.xsl    2011-05-03 08:58:45 UTC 
(rev 7246)
@@ -17,12 +17,10 @@
        <xsl:if test="allocation/add_link">
                <div class="actions">
                        <button 
onclick="location.href='{allocation/add_link}'"><xsl:value-of 
select="php:function('lang', 'Create new booking')"/></button> 
+               <xsl:if test="allocation/delete_link">
+                       <button 
onclick="location.href='{allocation/delete_link}'"><xsl:value-of 
select="php:function('lang', 'Delete allocation')"/></button>
+               </xsl:if>
                </div>
        </xsl:if>
-       <xsl:if test="allocation/delete_link">
-               <div class="actions">
-                       <button 
onclick="location.href='{allocation/delete_link}'"><xsl:value-of 
select="php:function('lang', 'Delete allocation')"/></button>
-               </div>
-       </xsl:if>
 
 </xsl:template>

Modified: trunk/booking/templates/base/booking.xsl
===================================================================
--- trunk/booking/templates/base/booking.xsl    2011-05-03 08:22:51 UTC (rev 
7245)
+++ trunk/booking/templates/base/booking.xsl    2011-05-03 08:58:45 UTC (rev 
7246)
@@ -32,6 +32,10 @@
                                <button>
                            <xsl:attribute 
name="onclick">window.location.href="<xsl:value-of 
select="booking/edit_link"/>"</xsl:attribute>
                            <xsl:value-of select="php:function('lang', 'Edit')" 
/>
+                       </button> 
+                               <button>
+                           <xsl:attribute 
name="onclick">window.location.href="<xsl:value-of 
select="booking/delete_link"/>"</xsl:attribute>
+                           <xsl:value-of select="php:function('lang', 'Delete 
booking')" />
                        </button>
                        </xsl:if>
                </div>

Added: trunk/booking/templates/base/booking_delete.xsl
===================================================================
--- trunk/booking/templates/base/booking_delete.xsl                             
(rev 0)
+++ trunk/booking/templates/base/booking_delete.xsl     2011-05-03 08:58:45 UTC 
(rev 7246)
@@ -0,0 +1,132 @@
+<xsl:template match="data" xmlns:php="http://php.net/xsl";>
+    <div id="content">
+
+       <dl class="form">
+       <dt class="heading"><xsl:value-of select="php:function('lang', 'Delete 
Booking')"/></dt>
+       </dl>
+    <xsl:call-template name="msgbox"/>
+       <xsl:call-template name="yui_booking_i18n"/>
+
+    <form action="" method="POST">
+               <input type="hidden" name="application_id" 
value="{booking/application_id}"/>
+        <input type="hidden" name="group_id" value="{booking/group_id}" />
+        <input type="hidden" name="building_id" value="{booking/building_id}" 
/>
+        <input type="hidden" name="season_id" value="{booking/season_id}" />
+        <input type="hidden" name="from_" value="{booking/from_}" />
+        <input type="hidden" name="to_" value="{booking/to_}" />
+
+        <dl class="form-col">
+            <dt><label for="field_building"><xsl:value-of 
select="php:function('lang', 'Building')" /></label></dt>
+            <dd>
+                <div>
+                        <xsl:value-of select="booking/building_name"/>
+                </div>
+            </dd>
+            <dt><label for="field_from"><xsl:value-of 
select="php:function('lang', 'From')" /></label></dt>
+            <dd>
+                <div>
+                    <xsl:value-of select="booking/from_"/>
+                </div>
+            </dd>
+            <dt><label for="field_to"><xsl:value-of 
select="php:function('lang', 'To')"/></label></dt>
+            <dd>
+                <div>
+                    <xsl:value-of select="booking/to_"/>
+                </div>
+            </dd>
+                       <dt><label for="field_repeat_until"><xsl:value-of 
select="php:function('lang', 'Recurring allocation deletion')" /></label></dt>
+                       <dd>
+                               <label>
+                                       <input type="checkbox" name="outseason" 
id="outseason">
+                                               <xsl:if test="outseason='on'">
+                                                       <xsl:attribute 
name="checked">checked</xsl:attribute>
+                                               </xsl:if>
+                                       </input>
+                                       <xsl:value-of 
select="php:function('lang', 'Out season')" />
+                               </label>
+                       </dd>
+                       <dd>
+                               <label>
+                                       <input type="checkbox" name="recurring" 
id="recurring">
+                                               <xsl:if test="recurring='on'">
+                                                       <xsl:attribute 
name="checked">checked</xsl:attribute>
+                                               </xsl:if>
+                                       </input>
+                                       <xsl:value-of 
select="php:function('lang', 'Delete until')" />
+                               </label>
+                       </dd>
+                       <dd class="date-picker">
+                               <input id="field_repeat_until" 
name="repeat_until" type="text">
+                                       <xsl:attribute 
name="value"><xsl:value-of select="repeat_until"/></xsl:attribute>
+                               </input>
+                       </dd>
+                       <dt><xsl:value-of select="php:function('lang', 
'Interval')" /></dt>
+                       <dd>
+                               <xsl:value-of select="../field_interval" />
+                               <select id="field_interval" 
name="field_interval">
+                                       <option value="1">
+                                               <xsl:if test="interval=1">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '1 week')" />
+                                       </option>
+                                       <option value="2">
+                                               <xsl:if test="interval=2">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '2 weeks')" />
+                                       </option>
+                                       <option value="3">
+                                               <xsl:if test="interval=3">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '3 weeks')" />
+                                       </option>
+                                       <option value="4">
+                                               <xsl:if test="interval=4">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '4 weeks')" />
+                                       </option>
+                               </select>
+                       </dd>
+        </dl>
+        <dl class="form-col">
+            <dt><label for="field_group"><xsl:value-of 
select="php:function('lang', 'Group')"/></label></dt>
+            <dd>
+                        <xsl:value-of select="booking/group_name"/>
+            </dd>
+            <dt><label for="field_season"><xsl:value-of 
select="php:function('lang', 'Season')"/></label></dt>
+            <dd>
+                        <xsl:value-of select="booking/season_name"/>
+            </dd>
+                       <dt><label for="field_repeat_until"><xsl:value-of 
select="php:function('lang', 'Delete allocation also')" /></label></dt>
+                       <dd>
+                               <label>
+                                       <input type="checkbox" 
name="delete_allocation" id="delete_allocation">
+                                               <xsl:if 
test="delete_allocation='on'">
+                                                       <xsl:attribute 
name="checked">checked</xsl:attribute>
+                                               </xsl:if>
+                                       </input>
+                                       <xsl:value-of 
select="php:function('lang', 'Delete allocations')" />
+                               </label>
+                       </dd>
+        </dl>
+        <div class="form-buttons">
+            <input type="submit">
+                               <xsl:attribute name="value"><xsl:value-of 
select="php:function('lang', 'Delete')"/></xsl:attribute>
+                       </input>
+            <a class="cancel">
+                <xsl:attribute name="href"><xsl:value-of 
select="booking/cancel_link"/></xsl:attribute>
+                <xsl:value-of select="php:function('lang', 'Cancel')"/>
+            </a>
+        </div>
+    </form>
+    </div>
+    <script type="text/javascript">
+        YAHOO.booking.season_id = '<xsl:value-of select="booking/season_id"/>';
+        YAHOO.booking.group_id = '<xsl:value-of select="booking/group_id"/>';
+        YAHOO.booking.initialSelection = <xsl:value-of 
select="booking/resources_json"/>;
+               var lang = <xsl:value-of select="php:function('js_lang', 
'Resource Type')"/>;
+    </script>
+</xsl:template>

Added: trunk/booking/templates/base/booking_delete_preview.xsl
===================================================================
--- trunk/booking/templates/base/booking_delete_preview.xsl                     
        (rev 0)
+++ trunk/booking/templates/base/booking_delete_preview.xsl     2011-05-03 
08:58:45 UTC (rev 7246)
@@ -0,0 +1,102 @@
+<xsl:template match="data" xmlns:php="http://php.net/xsl";>
+    <div id="content">
+
+       <dl class="form">
+       <dt class="heading"><xsl:value-of select="php:function('lang', 'Delete 
Booking')"/></dt>
+       </dl>
+    <xsl:call-template name="msgbox"/>
+       <xsl:call-template name="yui_booking_i18n"/>
+
+       <!-- <xsl:call-template name="xmlsource"/> -->
+
+           <form action="" method="POST">
+                       <input type="hidden" name="season_id" 
value="{booking/season_id}"/>
+                       <input type="hidden" name="building_id" 
value="{booking/building_id}"/>
+                       <input type="hidden" name="building_name" 
value="{booking/building_name}"/>
+                       <input type="hidden" name="organization_id" 
value="{booking/organization_id}"/>
+                       <input type="hidden" name="organization_name" 
value="{booking/organization_name}"/>
+                       <input type="hidden" name="allocation_id" 
value="{booking/allocation_id}"/>
+                       <input type="hidden" name="noallocation" 
value="{noallocation}" />
+                       <input type="hidden" name="delete_allocation" 
value="{delete_allocation}" />
+                       <input type="hidden" name="step" value="{step}" />
+                       <input type="hidden" name="from_" value="{from_date}" />
+                       <input type="hidden" name="to_" value="{to_date}" />
+                       <input type="hidden" name="cost" value="{booking/cost}" 
/>
+                       <input type="hidden" name="repeat_until" 
value="{repeat_until}" />
+                       <input type="hidden" name="field_interval" 
value="{interval}" />
+                       <input type="hidden" name="recurring" 
value="{recurring}" />
+                       <input type="hidden" name="outseason" 
value="{outseason}" />
+                       <input type="hidden" name="activity_id" 
value="{booking/activity_id}" />
+                       <input type="hidden" name="group_id" 
value="{booking/group_id}" />
+                       <xsl:for-each select="booking/audience">
+                               <input type="hidden" name="audience[]" 
value="{.}" />
+                       </xsl:for-each>
+                       <xsl:for-each select="booking/resources">
+                               <input type="hidden" name="resources[]" 
value="{.}" />
+                       </xsl:for-each>
+                       <xsl:for-each select="booking/agegroups">
+                               <xsl:variable name="id"><xsl:value-of 
select="id"/></xsl:variable>
+                               <input type="hidden">
+                                       <xsl:attribute 
name="name">male[<xsl:value-of select="agegroup_id"/>]</xsl:attribute>
+                                       <xsl:attribute 
name="value"><xsl:value-of select="male"/></xsl:attribute>
+                               </input>
+                               <input type="hidden">
+                                       <xsl:attribute 
name="name">female[<xsl:value-of select="agegroup_id"/>]</xsl:attribute>
+                                       <xsl:attribute 
name="value"><xsl:value-of select="female"/></xsl:attribute>
+                               </input>
+                       </xsl:for-each>
+
+
+                       <h4><xsl:value-of select="php:function('lang', 
'Bookings to be deleted')" /></h4>
+                       <div class="allocation-list">
+                               <xsl:for-each select="valid_dates">
+                                       <li>
+                                               <xsl:value-of select="from_"/> 
- <xsl:value-of select="to_"/>
+                                       </li>
+                               </xsl:for-each>
+                       </div>
+            <xsl:if test="delete_allocation='on'">
+                       <h4><xsl:value-of select="php:function('lang', 
'Allocations that is going to be deleted')" /></h4>
+                       <div class="allocation-list">
+                               <xsl:for-each select="allocation_delete">
+                                       <li>
+                                               <xsl:value-of select="from_"/> 
- <xsl:value-of select="to_"/>
+                                       </li>
+                               </xsl:for-each>
+                       </div>
+
+                       <h4><xsl:value-of select="php:function('lang', 
'Allocations with still existing bookings (%1)', 
count(allocation_keep[from_]))" /></h4>
+                       <div class="allocation-list">
+                               <xsl:for-each select="allocation_keep">
+                                       <li>
+                                               <xsl:value-of select="from_"/> 
- <xsl:value-of select="to_"/>
+                                       </li>
+                               </xsl:for-each>
+                       </div>
+            </xsl:if>
+               <div class="form-buttons">
+                   <input type="submit" name="delete">
+                               <xsl:attribute name="value"><xsl:value-of 
select="php:function('lang', 'Delete')" /></xsl:attribute>
+                               </input>
+                   <a class="cancel">
+                       <xsl:attribute name="href"><xsl:value-of 
select="season/wtemplate_link"/></xsl:attribute>
+                       <xsl:value-of select="php:function('lang', 'Cancel')" />
+                   </a>
+               </div>
+               </form>
+
+    </div>
+    <script type="text/javascript">
+        YAHOO.booking.season_id = '<xsl:value-of select="booking/season_id"/>';
+        YAHOO.booking.group_id = '<xsl:value-of select="booking/group_id"/>';
+        YAHOO.booking.initialSelection = <xsl:value-of 
select="booking/resources_json"/>;
+               var lang = <xsl:value-of select="php:function('js_lang', 
'Resource Type')"/>;
+    </script>
+</xsl:template>
+<xsl:template name="xmlsource">
+  NODE <xsl:value-of select="name()"/>
+  ATTR { <xsl:for-each select="attribute::*"><xsl:value-of 
select="name()"/>=<xsl:value-of select="."/> </xsl:for-each> }
+  CHILDREN: { <xsl:for-each select="*"><xsl:call-template 
name="xmlsource"/></xsl:for-each> }
+  TEXT <xsl:value-of select="text()"/>
+  <br/>
+</xsl:template>

Modified: trunk/booking/templates/base/booking_info.xsl
===================================================================
--- trunk/booking/templates/base/booking_info.xsl       2011-05-03 08:22:51 UTC 
(rev 7245)
+++ trunk/booking/templates/base/booking_info.xsl       2011-05-03 08:58:45 UTC 
(rev 7246)
@@ -20,6 +20,7 @@
        <xsl:if test="booking/edit_link">
                <div class="actions">
                        <button 
onclick="location.href='{booking/edit_link}'"><xsl:value-of 
select="php:function('lang', 'Edit booking')"/></button>
+                       <button 
onclick="location.href='{booking/delete_link}'"><xsl:value-of 
select="php:function('lang', 'Delete booking')"/></button>
                </div>
        </xsl:if>
 </xsl:template>

Modified: trunk/bookingfrontend/inc/class.uiallocation.inc.php
===================================================================
--- trunk/bookingfrontend/inc/class.uiallocation.inc.php        2011-05-03 
08:22:51 UTC (rev 7245)
+++ trunk/bookingfrontend/inc/class.uiallocation.inc.php        2011-05-03 
08:58:45 UTC (rev 7246)
@@ -6,6 +6,7 @@
                public $public_functions = array
                (
                        'info'                          =>      true,
+                       'cancel'                                =>      true,
                );
 
                public function __construct()
@@ -14,8 +15,51 @@
                        $this->org_bo = CreateObject('booking.boorganization');
                        $this->resource_bo = CreateObject('booking.boresource');
                        $this->building_bo = CreateObject('booking.bobuilding');
+                       $this->system_message_bo = 
CreateObject('booking.bosystem_message');
                }
-               
+               public function cancel()
+               {
+               $allocation = 
$this->bo->read_single(intval(phpgw::get_var('allocation_id', 'GET')));
+
+                       $errors = array();
+                       if($_SERVER['REQUEST_METHOD'] == 'POST')
+            {
+            
+                $from = $_POST['from_'];
+                $to =  $_POST['to_'];
+                $organization_id = $_POST['organization_id'];
+                $outseason = $_POST['outseason'];
+                $recurring = $_POST['recurring'];
+                $repeat_until = $_POST['repeat_until'];
+                $field_interval = $_POST['field_interval'];
+                    
+                               date_default_timezone_set("Europe/Oslo");
+                               $date = new DateTime(phpgw::get_var('date'));
+                               $system_message = array();
+                               $system_message['building_id'] = 
intval($allocation['building_id']);
+                               $system_message['building_name'] = 
$this->bo->so->get_building($system_message['building_id']);
+                               $system_message['created'] =  
$date->format('Y-m-d  H:m');
+                               $system_message = array_merge($system_message, 
extract_values($_POST, array('message')));
+                $system_message['type'] = 'cancelation';
+                               $system_message['status'] = 'NEW';
+                               $system_message['name'] = ' ';
+                               $system_message['phone'] = ' ';
+                               $system_message['email'] = ' ';
+                               $system_message['title'] = lang('Cancelation of 
allocation from')." ".$allocation['organization_name'];
+                 
+                $system_message['message'] = 
$system_message['message']."\n\n".lang('To cancel allocation use this link')." 
- <a href='".self::link(array('menuaction' => 
'booking.uiallocation.delete','allocation_id' => $allocation['id'], 'outseason' 
=> $outseason, 'recurring' => $recurring, 'repeat_until' => $repeat_until, 
'field_interval' => $field_interval))."'>".lang('Delete')."</a>";
+
+                               $receipt = 
$this->system_message_bo->add($system_message);
+                               $this->redirect(array('menuaction' =>  
'bookingfrontend.uibuilding.schedule', 'id' => $system_message['building_id']));
+
+            }
+            $this->flash_form_errors($errors);
+                       $allocation['cancel_link'] = 
self::link(array('menuaction' => 'bookingfrontend.uibuilding.schedule', 'id' => 
$allocation['building_id']));
+
+                       $this->use_yui_editor();
+                       self::render_template('allocation_cancel', 
array('allocation'=>$allocation));
+        }              
+
                public function info()
                {
                        $allocation = 
$this->bo->read_single(intval(phpgw::get_var('id', 'GET')));
@@ -31,8 +75,10 @@
                        $allocation['building_link'] = 
self::link(array('menuaction' => 'bookingfrontend.uibuilding.show', 'id' => 
$allocation['resources'][0]['building_id']));
                        $allocation['org_link'] = self::link(array('menuaction' 
=> 'bookingfrontend.uiorganization.show', 'id' => 
$allocation['organization_id']));
                        $bouser = CreateObject('bookingfrontend.bouser');
-                       
if($bouser->is_organization_admin($allocation['organization_id']))
+                       
if($bouser->is_organization_admin($allocation['organization_id'])) {
                                $allocation['add_link'] = 
self::link(array('menuaction' => 'bookingfrontend.uibooking.add', 
'allocation_id'=>$allocation['id'], 'from_'=>$allocation['from_'], 
'to_'=>$allocation['to_'], 'resource'=>$allocation['resource']));
+                               $allocation['cancel_link'] = 
self::link(array('menuaction' => 'bookingfrontend.uiallocation.cancel', 
'allocation_id'=>$allocation['id'], 'from_'=>$allocation['from_'], 
'to_'=>$allocation['to_'], 'resource'=>$allocation['resource']));
+            }
                        $allocation['when'] = 
pretty_timestamp($allocation['from_']).' - 
'.pretty_timestamp($allocation['to_']);
                        self::render_template('allocation_info', 
array('allocation'=>$allocation));
                        $GLOBALS['phpgw']->xslttpl->set_output('wml'); // Evil 
hack to disable page chrome

Modified: trunk/bookingfrontend/inc/class.uibooking.inc.php
===================================================================
--- trunk/bookingfrontend/inc/class.uibooking.inc.php   2011-05-03 08:22:51 UTC 
(rev 7245)
+++ trunk/bookingfrontend/inc/class.uibooking.inc.php   2011-05-03 08:58:45 UTC 
(rev 7246)
@@ -13,6 +13,7 @@
                        'edit' =>                               true,
                        'report_numbers' =>             true,
                        'massupdate' =>                 true,
+                       'cancel' =>                     true,
                );
 
                public function __construct()
@@ -23,6 +24,7 @@
                        $this->allocation_bo = 
CreateObject('booking.boallocation');
                        $this->season_bo = CreateObject('booking.boseason');
                        $this->building_bo = CreateObject('booking.bobuilding');
+                       $this->system_message_bo = 
CreateObject('booking.bosystem_message');
                }
 
                private function item_link(&$item, $key)
@@ -560,6 +562,50 @@
                                        );
                }
 
+               public function cancel()
+               {
+               $booking = $this->bo->read_single(intval(phpgw::get_var('id', 
'GET')));
+
+                       $errors = array();
+                       if($_SERVER['REQUEST_METHOD'] == 'POST')
+            {
+            
+                $from = $_POST['from_'];
+                $to =  $_POST['to_'];
+                $organization_id = $_POST['organization_id'];
+                $outseason = $_POST['outseason'];
+                $recurring = $_POST['recurring'];
+                $repeat_until = $_POST['repeat_until'];
+                $field_interval = $_POST['field_interval'];
+                $delete_allocation = $_POST['delete_allocation'];
+
+                               date_default_timezone_set("Europe/Oslo");
+                               $date = new DateTime(phpgw::get_var('date'));
+                               $system_message = array();
+                               $system_message['building_id'] = 
intval($booking['building_id']);
+                               $system_message['building_name'] = 
$this->bo->so->get_building($system_message['building_id']);
+                               $system_message['created'] =  
$date->format('Y-m-d  H:m');
+                               $system_message = array_merge($system_message, 
extract_values($_POST, array('message')));
+                $system_message['type'] = 'cancelation';
+                               $system_message['status'] = 'NEW';
+                               $system_message['name'] = ' ';
+                               $system_message['phone'] = ' ';
+                               $system_message['email'] = ' ';
+                               $system_message['title'] = lang('Cancelation of 
booking from')." ".$booking['group_name'];
+                 
+                $system_message['message'] = 
$system_message['message']."\n\n".lang('To cancel booking use this link')." - 
<a href='".self::link(array('menuaction' => 'booking.uibooking.delete','id' => 
$boooking['id'], 'outseason' => $outseason, 'recurring' => $recurring, 
'repeat_until' => $repeat_until, 'field_interval' => $field_interval, 
'delete_allocation' => $delete_allocation))."'>".lang('Delete')."</a>";
+
+                               $receipt = 
$this->system_message_bo->add($system_message);
+                               $this->redirect(array('menuaction' =>  
'bookingfrontend.uibuilding.schedule', 'id' => $system_message['building_id']));
+
+            }
+            $this->flash_form_errors($errors);
+                       $allocation['cancel_link'] = 
self::link(array('menuaction' => 'bookingfrontend.uibuilding.schedule', 'id' => 
$allocation['building_id']));
+
+                       $this->use_yui_editor();
+                       self::render_template('booking_cancel', 
array('booking'=>$booking));
+        }              
+
                public function info()
                {
                        $booking = 
$this->bo->read_single(intval(phpgw::get_var('id', 'GET')));
@@ -578,8 +624,10 @@
                        
                        $bouser = CreateObject('bookingfrontend.bouser');
                        if($bouser->is_group_admin($booking['group_id']))
+            {
                                $booking['edit_link'] = 
self::link(array('menuaction' => 'bookingfrontend.uibooking.edit', 'id' => 
$booking['id']));
-                               
+                               $booking['cancel_link'] = 
self::link(array('menuaction' => 'bookingfrontend.uibooking.cancel', 'id' => 
$booking['id']));
+            }
                        $booking['when'] = 
pretty_timestamp($booking['from_']).' - '.pretty_timestamp($booking['to_']);
                        self::render_template('booking_info', 
array('booking'=>$booking));
                        $GLOBALS['phpgw']->xslttpl->set_output('wml'); // Evil 
hack to disable page chrome

Modified: trunk/bookingfrontend/setup/phpgw_no.lang
===================================================================
--- trunk/bookingfrontend/setup/phpgw_no.lang   2011-05-03 08:22:51 UTC (rev 
7245)
+++ trunk/bookingfrontend/setup/phpgw_no.lang   2011-05-03 08:58:45 UTC (rev 
7246)
@@ -324,3 +324,5 @@
 Agegroups kan not be larger than 9999 peoples  bookingfrontend no      
Estimert antall deltakere kan ikke være større en 9999 personer
 Contact information name is to long. max 50 characters bookingfrontend no      
Navn i kontakt informasjon er for langt. Maks 50 tegn
 Unable to fill report  bookingfrontend no      Greide ikke å fylle ut rapport
+Cancel booking bookingfrontend no      Avbestill booking
+Cancel allocation      bookingfrontend no      Avbestill tildeling

Added: trunk/bookingfrontend/templates/base/allocation_cancel.xsl
===================================================================
--- trunk/bookingfrontend/templates/base/allocation_cancel.xsl                  
        (rev 0)
+++ trunk/bookingfrontend/templates/base/allocation_cancel.xsl  2011-05-03 
08:58:45 UTC (rev 7246)
@@ -0,0 +1,153 @@
+<xsl:template match="data" xmlns:php="http://php.net/xsl";>
+    <div id="content">
+
+       <dl class="form">
+       <dt class="heading"><xsl:value-of select="php:function('lang', 'Cancel 
allocation')"/></dt>
+       </dl>
+    <xsl:call-template name="msgbox"/>
+       <xsl:call-template name="yui_booking_i18n"/>
+
+    <form action="" method="POST">
+               <input type="hidden" name="application_id" 
value="{allocation/application_id}"/>
+        <input id="field_org_id" name="organization_id" type="hidden" 
value="{allocation/organization_id}" />
+        <input id="field_building_id" name="building_id" type="hidden" 
value="{allocation/building_id}" />
+        <input id="field_from" name="from_" type="hidden" 
value="{allocation/from_}" />
+        <input id="field_to" name="to_" type="hidden" value="{allocation/to_}" 
/>
+
+        <dl class="form-col">
+
+            <dt><label for="field_building"><xsl:value-of 
select="php:function('lang', 'Building')" /></label></dt>
+            <dd>
+                <div class="autocomplete">
+                        <xsl:value-of select="allocation/building_name"/>
+                </div>
+            </dd>
+
+
+            <dt><label for="field_from"><xsl:value-of 
select="php:function('lang', 'From')" /></label></dt>
+            <dd>
+                <div>
+                    <xsl:value-of select="allocation/from_"/>
+                </div>
+            </dd>
+                       <dd>
+                <div> </div>
+                       </dd>
+                       <dt><label for="field_repeat_until"><xsl:value-of 
select="php:function('lang', 'Recurring allocation deletion')" /></label></dt>
+                       <dd>
+                               <label>
+                                       <input type="checkbox" name="outseason" 
id="outseason">
+                                               <xsl:if test="outseason='on'">
+                                                       <xsl:attribute 
name="checked">checked</xsl:attribute>
+                                               </xsl:if>
+                                       </input>
+                                       <xsl:value-of 
select="php:function('lang', 'Out season')" />
+                               </label>
+                       </dd>
+                       <dd>
+                               <label>
+                                       <input type="checkbox" name="recurring" 
id="recurring">
+                                               <xsl:if test="recurring='on'">
+                                                       <xsl:attribute 
name="checked">checked</xsl:attribute>
+                                               </xsl:if>
+                                       </input>
+                                       <xsl:value-of 
select="php:function('lang', 'Delete until')" />
+                               </label>
+                       </dd>
+                       <dd class="date-picker">
+                               <input id="field_repeat_until" 
name="repeat_until" type="text">
+                                       <xsl:attribute 
name="value"><xsl:value-of select="repeat_until"/></xsl:attribute>
+                               </input>
+                       </dd>
+                       <dt><xsl:value-of select="php:function('lang', 
'Interval')" /></dt>
+                       <dd>
+                               <xsl:value-of select="../field_interval" />
+                               <select id="field_interval" 
name="field_interval">
+                                       <option value="1">
+                                               <xsl:if test="interval=1">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '1 week')" />
+                                       </option>
+                                       <option value="2">
+                                               <xsl:if test="interval=2">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '2 weeks')" />
+                                       </option>
+                                       <option value="3">
+                                               <xsl:if test="interval=3">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '3 weeks')" />
+                                       </option>
+                                       <option value="4">
+                                               <xsl:if test="interval=4">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '4 weeks')" />
+                                       </option>
+                               </select>
+                       </dd>
+        </dl>
+        <dl class="form-col">
+            <dt><label for="field_org"><xsl:value-of 
select="php:function('lang', 'Organization')" /></label></dt>
+            <dd>
+                <div class="autocomplete">
+                        <xsl:value-of select="allocation/organization_name"/>
+                </div>
+            </dd>
+            <dt><label for="field_to"><xsl:value-of 
select="php:function('lang', 'To')" /></label></dt>
+            <dd>
+                <div>
+                    <xsl:value-of select="allocation/to_"/>
+                </div>
+            </dd>
+        </dl>
+
+               <div style='clear:left; padding:0; margin:0'/>
+
+        <dl class="form-col">
+               <dt><label for="field_message"><xsl:value-of 
select="php:function('lang', 'Message')" /></label></dt>
+               <dd class="yui-skin-sam">
+               <textarea id="field-message" name="message" 
type="text"><xsl:value-of select="system_message/message"/></textarea>
+               </dd>
+        </dl>
+
+        <div class="form-buttons">
+            <input type="submit">
+                               <xsl:attribute name="value"><xsl:value-of 
select="php:function('lang', 'Cancel allocation')"/></xsl:attribute>
+                       </input>
+            <a class="cancel">
+                <xsl:attribute name="href"><xsl:value-of 
select="allocation/cancel_link"/></xsl:attribute>
+                <xsl:value-of select="php:function('lang', 'Cancel')" />
+            </a>
+        </div>
+    </form>
+    </div>
+    <script type="text/javascript">
+        YAHOO.booking.season_id = '<xsl:value-of 
select="allocation/season_id"/>';
+        <![CDATA[
+        var descEdit = new YAHOO.widget.SimpleEditor('field-message', {
+            height: '300px',
+            width: '522px',
+            dompath: true,
+            animate: true,
+           handleSubmit: true,
+            toolbar: {
+                titlebar: '',
+                buttons: [
+                   { group: 'textstyle', label: ' ',
+                        buttons: [
+                            { type: 'push', label: 'Bold', value: 'bold' },
+                            { type: 'separator' },
+                            { type: 'push', label: 'HTML Link CTRL + SHIFT + 
L', value: 'createlink'}
+                        ]
+                    }
+                ]
+            }
+        });
+        descEdit.render();
+        ]]>
+</script>
+</xsl:template>

Modified: trunk/bookingfrontend/templates/base/allocation_info.xsl
===================================================================
--- trunk/bookingfrontend/templates/base/allocation_info.xsl    2011-05-03 
08:22:51 UTC (rev 7245)
+++ trunk/bookingfrontend/templates/base/allocation_info.xsl    2011-05-03 
08:58:45 UTC (rev 7246)
@@ -17,6 +17,7 @@
        <xsl:if test="allocation/add_link">
                <div class="actions">
                        <button 
onclick="location.href='{allocation/add_link}'"><xsl:value-of 
select="php:function('lang', 'Create new booking')"/></button>
+                       <button 
onclick="location.href='{allocation/cancel_link}'"><xsl:value-of 
select="php:function('lang', 'Cancel allocation')"/></button>
                </div>
        </xsl:if>
-</xsl:template>
\ No newline at end of file
+</xsl:template>

Added: trunk/bookingfrontend/templates/base/booking_cancel.xsl
===================================================================
--- trunk/bookingfrontend/templates/base/booking_cancel.xsl                     
        (rev 0)
+++ trunk/bookingfrontend/templates/base/booking_cancel.xsl     2011-05-03 
08:58:45 UTC (rev 7246)
@@ -0,0 +1,161 @@
+<xsl:template match="data" xmlns:php="http://php.net/xsl";>
+    <div id="content">
+
+       <dl class="form">
+       <dt class="heading"><xsl:value-of select="php:function('lang', 'Cancel 
Booking')"/></dt>
+       </dl>
+    <xsl:call-template name="msgbox"/>
+       <xsl:call-template name="yui_booking_i18n"/>
+
+    <form action="" method="POST">
+               <input type="hidden" name="application_id" 
value="{booking/application_id}"/>
+        <input type="hidden" name="group_id" value="{booking/group_id}" />
+        <input type="hidden" name="building_id" value="{booking/building_id}" 
/>
+        <input type="hidden" name="season_id" value="{booking/season_id}" />
+        <input type="hidden" name="from_" value="{booking/from_}" />
+        <input type="hidden" name="to_" value="{booking/to_}" />
+
+        <dl class="form-col">
+            <dt><label for="field_building"><xsl:value-of 
select="php:function('lang', 'Building')" /></label></dt>
+            <dd>
+                <div>
+                        <xsl:value-of select="booking/building_name"/>
+                </div>
+            </dd>
+            <dt><label for="field_from"><xsl:value-of 
select="php:function('lang', 'From')" /></label></dt>
+            <dd>
+                <div>
+                    <xsl:value-of select="booking/from_"/>
+                </div>
+            </dd>
+            <dt><label for="field_to"><xsl:value-of 
select="php:function('lang', 'To')"/></label></dt>
+            <dd>
+                <div>
+                    <xsl:value-of select="booking/to_"/>
+                </div>
+            </dd>
+                       <dt><label for="field_repeat_until"><xsl:value-of 
select="php:function('lang', 'Recurring allocation deletion')" /></label></dt>
+                       <dd>
+                               <label>
+                                       <input type="checkbox" name="outseason" 
id="outseason">
+                                               <xsl:if test="outseason='on'">
+                                                       <xsl:attribute 
name="checked">checked</xsl:attribute>
+                                               </xsl:if>
+                                       </input>
+                                       <xsl:value-of 
select="php:function('lang', 'Out season')" />
+                               </label>
+                       </dd>
+                       <dd>
+                               <label>
+                                       <input type="checkbox" name="recurring" 
id="recurring">
+                                               <xsl:if test="recurring='on'">
+                                                       <xsl:attribute 
name="checked">checked</xsl:attribute>
+                                               </xsl:if>
+                                       </input>
+                                       <xsl:value-of 
select="php:function('lang', 'Delete until')" />
+                               </label>
+                       </dd>
+                       <dd class="date-picker">
+                               <input id="field_repeat_until" 
name="repeat_until" type="text">
+                                       <xsl:attribute 
name="value"><xsl:value-of select="repeat_until"/></xsl:attribute>
+                               </input>
+                       </dd>
+                       <dt><xsl:value-of select="php:function('lang', 
'Interval')" /></dt>
+                       <dd>
+                               <xsl:value-of select="../field_interval" />
+                               <select id="field_interval" 
name="field_interval">
+                                       <option value="1">
+                                               <xsl:if test="interval=1">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '1 week')" />
+                                       </option>
+                                       <option value="2">
+                                               <xsl:if test="interval=2">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '2 weeks')" />
+                                       </option>
+                                       <option value="3">
+                                               <xsl:if test="interval=3">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '3 weeks')" />
+                                       </option>
+                                       <option value="4">
+                                               <xsl:if test="interval=4">
+                                                       <xsl:attribute 
name="selected">selected</xsl:attribute>
+                                               </xsl:if>
+                                               <xsl:value-of 
select="php:function('lang', '4 weeks')" />
+                                       </option>
+                               </select>
+                       </dd>
+        </dl>
+        <dl class="form-col">
+            <dt><label for="field_group"><xsl:value-of 
select="php:function('lang', 'Group')"/></label></dt>
+            <dd>
+                        <xsl:value-of select="booking/group_name"/>
+            </dd>
+            <dt><label for="field_season"><xsl:value-of 
select="php:function('lang', 'Season')"/></label></dt>
+            <dd>
+                        <xsl:value-of select="booking/season_name"/>
+            </dd>
+                       <dt><label for="field_repeat_until"><xsl:value-of 
select="php:function('lang', 'Delete allocation also')" /></label></dt>
+                       <dd>
+                               <label>
+                                       <input type="checkbox" 
name="delete_allocation" id="delete_allocation">
+                                               <xsl:if 
test="delete_allocation='on'">
+                                                       <xsl:attribute 
name="checked">checked</xsl:attribute>
+                                               </xsl:if>
+                                       </input>
+                                       <xsl:value-of 
select="php:function('lang', 'Delete allocations')" />
+                               </label>
+                       </dd>
+        </dl>
+               <div style='clear:left; padding:0; margin:0'/>
+
+        <dl class="form-col">
+               <dt><label for="field_message"><xsl:value-of 
select="php:function('lang', 'Message')" /></label></dt>
+               <dd class="yui-skin-sam">
+               <textarea id="field-message" name="message" 
type="text"><xsl:value-of select="system_message/message"/></textarea>
+               </dd>
+        </dl>
+
+        <div class="form-buttons">
+            <input type="submit">
+                               <xsl:attribute name="value"><xsl:value-of 
select="php:function('lang', 'Cancel booking')"/></xsl:attribute>
+                       </input>
+            <a class="cancel">
+                <xsl:attribute name="href"><xsl:value-of 
select="booking/cancel_link"/></xsl:attribute>
+                <xsl:value-of select="php:function('lang', 'Cancel')"/>
+            </a>
+        </div>
+    </form>
+    </div>
+    <script type="text/javascript">
+        YAHOO.booking.season_id = '<xsl:value-of select="booking/season_id"/>';
+        YAHOO.booking.group_id = '<xsl:value-of select="booking/group_id"/>';
+        <![CDATA[
+        var descEdit = new YAHOO.widget.SimpleEditor('field-message', {
+            height: '300px',
+            width: '522px',
+            dompath: true,
+            animate: true,
+           handleSubmit: true,
+            toolbar: {
+                titlebar: '',
+                buttons: [
+                   { group: 'textstyle', label: ' ',
+                        buttons: [
+                            { type: 'push', label: 'Bold', value: 'bold' },
+                            { type: 'separator' },
+                            { type: 'push', label: 'HTML Link CTRL + SHIFT + 
L', value: 'createlink'}
+                        ]
+                    }
+                ]
+            }
+        });
+        descEdit.render();
+        ]]>
+</script>
+</xsl:template>

Modified: trunk/bookingfrontend/templates/base/booking_info.xsl
===================================================================
--- trunk/bookingfrontend/templates/base/booking_info.xsl       2011-05-03 
08:22:51 UTC (rev 7245)
+++ trunk/bookingfrontend/templates/base/booking_info.xsl       2011-05-03 
08:58:45 UTC (rev 7246)
@@ -20,6 +20,7 @@
        <xsl:if test="booking/edit_link">
                <div class="actions">
                        <button 
onclick="location.href='{booking/edit_link}'"><xsl:value-of 
select="php:function('lang', 'Edit booking')"/></button>
+                       <button 
onclick="location.href='{booking/cancel_link}'"><xsl:value-of 
select="php:function('lang', 'Cancel booking')"/></button>
                </div>
        </xsl:if>
-</xsl:template>
\ No newline at end of file
+</xsl:template>




reply via email to

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