Atul Patel(OpenERP) has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-event_improvements-atp into 
lp:openobject-addons.

Requested reviews:
  OpenERP Core Team (openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-event_improvements-atp/+merge/104846

Hello,

1) Display Events image on Home Page Dashboard.
2) Add event_items one2many fields which contains product_id, qty, event price.
    Add last end date(sales end) dates.
3) Improve dates in demo so we can have some upcoming events in the list 
instead of all the past 
    events.
4) create event page view with google map on subscribe button.
5) Generate warning if more try to register 2 seats even if only 1 seat 
available.
6) Add a textbox in kanban view to enter number of tickets to subscribe, by 
default its value should 
   be 1.


-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-event_improvements-atp/+merge/104846
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/trunk-event_improvements-atp.
=== modified file 'event/__openerp__.py'
--- event/__openerp__.py	2012-03-06 06:49:02 +0000
+++ event/__openerp__.py	2012-05-05 17:45:26 +0000
@@ -53,7 +53,9 @@
     ],
     'demo_xml': ['event_demo.xml'],
     'test': ['test/process/event_draft2done.yml'],
-    'css': ['static/src/css/event.css'],
+    'css': ['static/src/css/*.css'],
+    'js': ['static/src/js/event.js'],
+    'qweb': ['static/src/xml/event_address.xml'],
     'installable': True,
     'application': True,
     'auto_install': False,

=== modified file 'event/event.py'
--- event/event.py	2012-03-30 09:08:37 +0000
+++ event/event.py	2012-05-05 17:45:26 +0000
@@ -102,6 +102,23 @@
             total_confirmed = self.event.register_current
             if total_confirmed < self.event.register_min or total_confirmed > self.event.register_max and self.event.register_max!=0:
                 raise osv.except_osv(_('Error!'),_("The total of confirmed registration for the event '%s' does not meet the expected minimum/maximum. You should maybe reconsider those limits before going further") % (self.event.name))
+            
+    def check_available_seats(self, cr, uid, ids, context=None):
+        if isinstance(ids, list):
+            ids = ids[0]
+        else:
+            ids = ids 
+        total_confirmed = self.browse(cr, uid, ids, context=context).register_current
+        register_max = self.browse(cr, uid, ids, context=context).register_max
+        available_seats = register_max - total_confirmed
+        return available_seats
+            
+    def check_registration_limits_before(self, cr, uid, ids, no_of_registration, context=None):
+        available_seats = self.check_available_seats(cr, uid, ids, context=context)
+        if available_seats and no_of_registration > available_seats:
+             raise osv.except_osv(_('Warning!'),_("Only %d Seats are Available!") % (available_seats))
+        elif available_seats == 0:
+            raise osv.except_osv(_('Warning!'),_("No Tickets Available!"))
 
     def confirm_event(self, cr, uid, ids, context=None):
         register_pool = self.pool.get('event.registration')
@@ -203,6 +220,7 @@
         'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}),
         'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}),
         'is_subscribed' : fields.function(_subscribe_fnc, type="boolean", string='Subscribed'),
+        'location_id': fields.many2one('res.partner','Organization Address', readonly=False, states={'done': [('readonly', True)]}),
     }
 
     _defaults = {
@@ -214,11 +232,15 @@
     def subscribe_to_event(self, cr, uid, ids, context=None):
         register_pool = self.pool.get('event.registration')
         user_pool = self.pool.get('res.users')
+        num_of_seats = int(context.get('ticket', 1))
+        self.check_registration_limits_before(cr, uid, ids, num_of_seats, context=context)
         user = user_pool.browse(cr, uid, uid, context=context)
         curr_reg_ids = register_pool.search(cr, uid, [('user_id', '=', user.id), ('event_id', '=' , ids[0])])
         #the subscription is done with UID = 1 because in case we share the kanban view, we want anyone to be able to subscribe
         if not curr_reg_ids:
-            curr_reg_ids = [register_pool.create(cr, 1, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id,})]
+            curr_reg_ids = [register_pool.create(cr, 1, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id, 'nb_register': num_of_seats})]
+        else:
+            register_pool.write(cr, uid, curr_reg_ids, {'nb_register': num_of_seats}, context=context)
         return register_pool.confirm_registration(cr, 1, curr_reg_ids, context=context)
 
     def unsubscribe_to_event(self, cr, uid, ids, context=None):
@@ -236,7 +258,6 @@
     _constraints = [
         (_check_closing_date, 'Error ! Closing Date cannot be set before Beginning Date.', ['date_end']),
     ]
-
     def onchange_event_type(self, cr, uid, ids, type_event, context=None):
         if type_event:
             type_info =  self.pool.get('event.type').browse(cr,uid,type_event,context)
@@ -295,6 +316,10 @@
     def registration_open(self, cr, uid, ids, context=None):
         """ Open Registration
         """
+        event_obj = self.pool.get('event.event')
+        event_id = self.browse(cr, uid, ids, context=context)[0].event_id.id
+        no_of_registration = self.browse(cr, uid, ids, context=context)[0].nb_register
+        event_obj.check_registration_limits_before(cr, uid, event_id, no_of_registration, context=context)
         res = self.confirm_registration(cr, uid, ids, context=context)
         self.mail_user(cr, uid, ids, context=context)
         return res
@@ -383,6 +408,5 @@
         return {'value': data}
 
 event_registration()
-
-
+    
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'event/event_demo.xml'
--- event/event_demo.xml	2012-03-29 13:00:46 +0000
+++ event/event_demo.xml	2012-05-05 17:45:26 +0000
@@ -38,16 +38,16 @@
 
     <record id="event_1" model="event.event">
         <field name="name">Opera of Verdi</field>
-        <field eval="time.strftime('%Y-%m-05 18:00:00')" name="date_begin"/>
-        <field eval="time.strftime('%Y-%m-05 21:00:00')" name="date_end"/>
+        <field eval="(DateTime.today()+ timedelta(days=1)).strftime('%Y-%m-%d 18:00:00')" name="date_begin"/>
+        <field eval="(DateTime.today()+ timedelta(days=2)).strftime('%Y-%m-%d 21:00:00')" name="date_end"/>
         <field name="type" ref="event_type_1"/>
         <field name="register_min">50</field>
         <field name="register_max">350</field>
     </record>
     <record id="event_2" model="event.event">
         <field name="name">Conference on ERP Business</field>
-        <field eval="time.strftime('%Y-%m-05 14:00:00')" name="date_begin"/>
-        <field eval="time.strftime('%Y-%m-05 16:30:00')" name="date_end"/>
+        <field eval="(DateTime.today()+ timedelta(days=2)).strftime('%Y-%m-%d 14:00:00')" name="date_begin"/>
+        <field eval="(DateTime.today()+ timedelta(days=2)).strftime('%Y-%m-%d 16:30:00')" name="date_end"/>
         <field name="type" ref="event_type_2"/>
         <field name="register_max">200</field>
     </record>

=== modified file 'event/event_view.xml'
--- event/event_view.xml	2012-04-25 14:35:28 +0000
+++ event/event_view.xml	2012-05-05 17:45:26 +0000
@@ -2,7 +2,9 @@
 <openerp>
     <data>
 
-        <menuitem  name="Events" id="event_main_menu"/>
+        <menuitem  name="Events" id="event_main_menu" 
+            web_icon="images/icon.png"
+            web_icon_hover="images/icon.png"/>
         <menuitem name="Events Organisation" id="base.menu_event_main" parent="event_main_menu" />
 
     <!-- EVENTS  -->
@@ -43,7 +45,7 @@
         <menuitem name="Configuration" id="base.menu_marketing_config_root" parent="event_main_menu" sequence="30"/>
         <menuitem name="Types of Events" id="menu_event_type" action="action_event_type" parent="base.menu_marketing_config_root" groups="base.group_no_one"/>
 
-    <!-- Events Organisation/CONFIGURATION/EVENTS -->
+<!-- Events Organisation/CONFIGURATION/EVENTS -->
 
         <record model="ir.ui.view" id="view_event_form">
             <field name="name">Events</field>
@@ -131,6 +133,69 @@
             </field>
         </record>
 
+
+    <!-- Events Organisation/CONFIGURATION/EVENTS PAGE VIEW -->
+
+        <record model="ir.ui.view" id="view_event_page">
+            <field name="name">Events</field>
+            <field name="model">event.event</field>
+            <field name="type">form</field>
+            <field name="arch" type="xml">
+                <form string="Events"  layout="manual">
+                <div class="oe_form_topbar" readonly="1">
+                	<button string="Cancel Event" name="button_cancel" states="draft,confirm" type="object" icon="gtk-cancel"/>
+               		<button string="Confirm Event" name="button_confirm" states="draft" type="object" icon="gtk-apply"/>
+               		<button string="Event Done" name="button_done" states="confirm" type="object" icon="gtk-jump-to"/>
+               		<button string="Set To Draft" name="button_draft" states="cancel,done" type="object" icon="gtk-convert"/>
+               		<div class="oe_right">
+                    	<field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/>
+               		</div>
+            	</div>
+            	<sheet string="Event Form" layout="auto">
+            		<group col="2">
+            			<group col="2">
+		                	<div class="oe_event_title">
+		                    	<field name="name" nolabel="1" readonly="1"/>
+		                    </div>
+		                    <newline/>
+		                    <group colspan="4" name="venue">
+                            	<div class="oe_sub1"> Venue   : </div> 
+                            	<field name="location_id" nolabel="1" readonly="1"/> 
+                        	</group>
+			             </group>	
+			             <group>
+			             	<div id = "oe_mapbox" class="oe_mapbox"> </div><newline/>
+		                    <table>
+			                   	<tr>
+			                    	<td width="70px" class="oe_td_border">
+			                            Where
+			                        </td>
+			                        <td width="auto">
+			                            <field name="address_id" widget ="geo_address" nolabel="1"/>
+			                        </td>
+			                        <td width="210px">
+	                             		<table align="right">
+											<tr>
+												<td class="oe_td_date_border">Start: </td><td><field name="date_begin" nolabel="1" readonly="1"/></td>
+											</tr>
+											<tr>
+												<td class="oe_td_date_border">End</td><td><field name="date_end" nolabel="1" readonly="1"/></td>
+											</tr>
+										</table>
+	                                 
+			                        </td>
+			                     </tr>
+		                     </table>   
+			             </group>
+                    </group>
+                    <separator string="" colspan="4"/>
+                    	<label string="Event Details:" colspan="4"/>
+                    	<field name="note" colspan="4" nolabel="1" readonly="1"/>
+                    </sheet>
+            </form>
+            </field>
+        </record>
+
         <!-- Event tree view -->
 
         <record model="ir.ui.view" id="view_event_tree">
@@ -203,7 +268,8 @@
                             </p>
                             <t t-if="record.register_avail.raw_value != 0">
                               <t t-if="!record.is_subscribed.raw_value">
-                                  <button type="object" name="subscribe_to_event" class="subscribe_button oe_event_button_subscribe">
+                                  <input t-att-id="record.id.raw_value" type="text" name="subscribe" class="no_of_seats" value="1"   onchange="document.getElementById('btn_sub' +this.id).setAttribute('data-context',JSON.stringify({'ticket':this.value}))"/>
+                                  <button t-att-id="'btn_sub'+record.id.raw_value" type="object" name="subscribe_to_event" class="subscribe_button oe_event_button_subscribe">
                                   <span >Subscribe</span>
                                   </button>
                               </t>

=== added file 'event/images/icon.png'
Binary files event/images/icon.png	1970-01-01 00:00:00 +0000 and event/images/icon.png	2012-05-05 17:45:26 +0000 differ
=== modified file 'event/static/src/css/event.css'
--- event/static/src/css/event.css	2012-03-20 10:38:46 +0000
+++ event/static/src/css/event.css	2012-05-05 17:45:26 +0000
@@ -64,6 +64,7 @@
     -webkit-font-smoothing: antialiased;
     outline: none;
 }
+
 .oe_event_button_unsubscribe {
   display: inline-block;
     border: 1px solid #AAA;
@@ -115,4 +116,40 @@
    display: inline;
    background-color: #DC5F59;
  }
-
+ .no_of_seats{
+    width:25px;    
+ }
+.oe_event_title{
+  font-size: 25px;
+}
+.oe_sub1
+{
+    float:left;
+    height:50px;
+    border-right: 1px solid black;
+    border-color: #DCDCDC;
+}
+.oe_mapbox
+{ 
+    width:auto;
+    height:200px;
+    margin-left:auto; 
+    margin-right:auto; 
+    text-align: right;
+    
+}
+.oe_td_border
+{
+	width: 5em;
+	padding: 2px;
+	border-right: 1px solid black;
+	text-align: center;
+	border-color: #DCDCDC;
+	
+	
+}
+.oe_td_date_border
+{
+	border-right:1px solid black;
+	border-color: #DCDCDC;
+}

=== added directory 'event/static/src/js'
=== added file 'event/static/src/js/event.js'
--- event/static/src/js/event.js	1970-01-01 00:00:00 +0000
+++ event/static/src/js/event.js	2012-05-05 17:45:26 +0000
@@ -0,0 +1,54 @@
+openerp.event = function(instance){
+	instance.web.form.widgets.add('geo_address', 'instance.event.GeoAddress');
+	instance.event.GeoAddress = instance.web.form.AbstractField.extend(_.extend({}, {
+
+		init : function(){
+			this._super.apply(this,arguments);
+		},
+
+		start:function(){
+		},
+		
+	 	set_input_id:function(id){
+	 	},
+	 	set_value:function(value){
+	 		var self = this;
+			this.get_address(value).done(function(value){
+				self.__parentedParent.$element.find(".oe_td_border").after(instance.web.qweb.render("address",{'record': value}));
+				var address = _.str.sprintf(' %(street)s, %(city)s, %(country_id[1])s', value);
+				return self.list_addresses(address);
+				
+			});
+			
+	 	},
+	 	get_address:function(value){
+	 		if (!value || value.length == 0){
+	 			return $.Deferred().reject();
+	 		}
+			return new instance.web.DataSet (this,this.field.relation, this.build_context()).read_ids(value[0],["street","city","country_id"]);
+	 	},
+
+	 	list_addresses: function(address){
+	 		var geocoder = new google.maps.Geocoder();
+			geocoder.geocode( { 'address': address}, function(results, status) 
+			{
+			if (status == google.maps.GeocoderStatus.OK){
+				var lat = results[0].geometry.location.lat(),lng =results[0].geometry.location.lng();
+				var myOptions = {       
+					zoom: 17,       
+					center:  new google.maps.LatLng(lat,lng),       
+					mapTypeId: google.maps.MapTypeId.ROADMAP     
+				}
+		    	return new google.maps.Marker({
+				    map : new google.maps.Map(document.getElementById("oe_mapbox"),myOptions),
+				    position: new google.maps.LatLng(lat,lng)
+			 	 });
+	 		}
+			});
+			
+	 	},
+	 	get_value:function(){
+	 	}
+		
+	}));
+};
\ No newline at end of file

=== added directory 'event/static/src/xml'
=== added file 'event/static/src/xml/event_address.xml'
--- event/static/src/xml/event_address.xml	1970-01-01 00:00:00 +0000
+++ event/static/src/xml/event_address.xml	2012-05-05 17:45:26 +0000
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+	
+	<template>
+		<td t-name="address">
+			<t t-esc="record.street"/> <br/>
+			<t t-esc="record.city"/> <br/>
+			<t t-esc="record.country_id[1]"/>
+		</td>
+	</template>
\ No newline at end of file

=== modified file 'event_sale/event_sale.py'
--- event_sale/event_sale.py	2012-02-28 16:38:23 +0000
+++ event_sale/event_sale.py	2012-05-05 17:45:26 +0000
@@ -19,6 +19,7 @@
 #
 ##############################################################################
 
+import time
 from osv import fields, osv
 from tools.translate import _
 
@@ -34,6 +35,7 @@
 
 product()
 
+
 class sale_order_line(osv.osv):
     _inherit = 'sale.order.line'
     _columns = {
@@ -70,7 +72,6 @@
     def button_confirm(self, cr, uid, ids, context=None):
         '''
         create registration with sale order
-
         '''
         registration_obj = self.pool.get('event.registration')
         sale_obj = self.pool.get('sale.order')
@@ -92,4 +93,108 @@
                 message = _("The registration %s has been created from the Sale Order %s.") % (registration_id, order_line.order_id.name)
                 registration_obj.log(cr, uid, registration_id, message)
         return super(sale_order_line, self).button_confirm(cr, uid, ids, context=context)
+  
+class event_event(osv.osv):
+    _inherit = 'event.event'
+    _columns = {
+                    'event_item_ids': fields.one2many('event.items','event_id', 'Event Items'),
+                }
+    
+    def order_now(self, cr, uid, ids, context=None):
+        res = {}
+        register_pool = self.pool.get('event.registration')
+        sale_order_line_pool = self.pool.get('sale.order.line')
+        sale_order = self.pool.get('sale.order')
+        partner_pool = self.pool.get("res.partner")
+        data_obj = self.pool.get("ir.model.data")
+        prod_pricelist_obj = self.pool.get('product.pricelist')
+        user = self.pool.get("res.users").browse(cr, uid, uid, context=context)
+        partner_ids = partner_pool.search(cr, uid, [('name', '=', user.name), ('email', '=', user.user_email)])
+        if not partner_ids:
+            # partner not found create new partner.....
+            new_partner_id = partner_pool.create(cr, uid, {'name': user.name, 'email': user.user_email})
+            partner_invoice_id = partner_pool.address_get(cr, uid, [new_partner_id], ['invoice'])['invoice']
+            partner_shipping_id = partner_pool.address_get(cr, uid, [new_partner_id], ['delivery'])['delivery']
+        else:
+            new_partner_id = partner_ids[0]
+            partner_invoice_id = partner_pool.address_get(cr, uid, [new_partner_id], ['invoice'])['invoice']
+            partner_shipping_id = partner_pool.address_get(cr, uid, [new_partner_id], ['delivery'])['delivery']
+        for event_id in self.browse(cr, uid, ids, context=context):
+            price_list = prod_pricelist_obj.search(cr,uid,[],context=context)[0]
+            new_sale_id = sale_order.create(cr, uid, {
+                'date_order': event_id.date_begin,
+                'pricelist_id': price_list,
+                 'partner_id': new_partner_id, 
+                  'partner_invoice_id': partner_invoice_id,
+                 'partner_shipping_id': partner_shipping_id
+                })  
+            if event_id.event_item_ids:
+                for items in event_id.event_item_ids:
+                    product = items.product_id.id
+                    sale_order_line = sale_order_line_pool.create(cr, uid, {
+                        'order_id': new_sale_id, 
+                        'name': items.product_id.name,
+                        'product_uom_qty': items.qty,
+                        'product_id': items.product_id.id,
+                        'price_unit': items.price,
+                        'date_planned': items.sales_end_date,
+                    }, context=context)
+            view_id = data_obj._get_id(cr, uid, 'sale', 'view_order_form')
+            if view_id:
+                res_id = data_obj.browse(cr, uid, view_id, context=context).res_id
+            res = {
+                    'name': _('Quotation'),
+                    'view_type': 'form',
+                    'view_mode': 'form',
+                    'res_model': 'sale.order',
+                    'res_id': new_sale_id,
+                    'views':[(res_id,'form'), (False, 'tree')],
+                    'type': 'ir.actions.act_window',
+                    'nodestroy': True,
+                    'target': 'current',
+            }
+        return res
+    
+    def subscribe_to_event(self, cr, uid, ids, context=None):
+        res = {}
+        data_obj = self.pool.get("ir.model.data")
+        view_id = data_obj._get_id(cr, uid, 'event', 'view_event_page')
+        if view_id:
+            res_id = data_obj.browse(cr, uid, view_id, context=context).res_id
+        res = {
+                'name': _('Event Page'),
+                'view_type': 'form',
+                'view_mode': 'form',
+                'views':[(res_id,'form'), (False, 'tree')],
+                'res_model': 'event.event',
+                'res_id': ids[0],
+                'type': 'ir.actions.act_window',
+                'nodestroy': True,
+                'target': 'current',
+        }
+        return res
+    
+class event_items(osv.osv):
+    _name = "event.items"
+    _columns = {
+        'product_id': fields.many2one('product.product', 'Product', required=True),
+        'price': fields.integer('Price'),
+        #Need to convert  this integer field in to dynamic selection.. TODO
+      #  'max_qty': fields.integer('Max.Quantity available'),
+        'qty': fields.integer('Quantity'),
+        'uom_id': fields.many2one('product.uom', 'UoM'),
+        'discount': fields.integer('Discount'),
+        'event_id': fields.many2one('event.event', 'Event'),
+        'sales_end_date': fields.date('Sales End')
+        }
 
+    def onchange_product_id(self, cr, uid, ids, product, context=None):
+        product_obj = self.pool.get('product.product')
+        data = {}
+        if not product:
+            return {'value': data}
+        price = product_obj.browse(cr, uid, product).list_price
+        uom = product_obj.browse(cr, uid, product).uom_id.id
+        data['price'] = price
+        data['uom_id'] = uom
+        return {'value': data}

=== modified file 'event_sale/event_sale_view.xml'
--- event_sale/event_sale_view.xml	2012-04-25 14:35:28 +0000
+++ event_sale/event_sale_view.xml	2012-05-05 17:45:26 +0000
@@ -29,5 +29,69 @@
                 </xpath>
              </field>
         </record>
+        
+		<record model="ir.ui.view" id="view_event_page_inherit">
+			<field name="name">Events Inherit</field>
+			<field name="model">event.event</field>
+			<field name="type">form</field>
+			<field name="inherit_id" ref="event.view_event_page"/>
+			<field name="arch" type="xml">
+				<xpath expr="//group[@name='venue']" position="after">
+					<field name="event_item_ids" nolabel="1">
+						 <tree editable="top" string="Event Items">
+							 <field name="product_id" readonly="1" />
+							 <field name="sales_end_date" readonly="1"/>
+							 <field name="price" readonly="1"/>
+							 <!--  <field name="max_qty" readonly="1" groups="event.group_event_manager"/>-->
+							 <field name="qty" attrs="{'readonly':[('product_id','=',False)]}" groups="event.group_event_user" />
+				 		</tree>
+					</field>
+					<newline/>
+					<div class="oe_right">
+						<button name="order_now" string="Order Now" type="object" icon="gtk-apply"/>
+					</div>
+				</xpath>
+			</field>
+		</record>
+
+
+		<record model="ir.ui.view" id="view_event_form_inherit">
+			<field name="name">Events Inherit</field>
+			<field name="model">event.event</field>
+			<field name="type">form</field>
+			<field name="inherit_id" ref="event.view_event_form"/>
+			<field name="arch" type="xml">
+				<xpath expr="//page[@string='Extra Info']" position="after">
+					<page string="Event Item">
+						<field name="event_item_ids" nolabel="1">
+							 <tree editable="top" string="Event Items">
+								 <field name="product_id" string="Ticket Type"  domain="[('event_ok','=',True)]" on_change="onchange_product_id(product_id)"/>
+								 <field name="sales_end_date" />
+								 <field name="price"/>
+								<!-- <field name="max_qty" groups="event.group_event_manager"/> --> 
+								 <field name="qty" attrs="{'readonly':[('product_id','=',False)]}" groups="event.group_event_user"/>
+				 			</tree>
+						</field>
+						<newline/>
+						<div class="oe_right">
+							<button name="order_now" string="Order Now" type="object" icon="gtk-apply"/>
+						</div>
+					</page>
+				</xpath>
+			</field>
+		</record>
+
+		<record id="view_event_kanban_inherit" model="ir.ui.view">
+            <field name="name">event.inherit.kanban</field>
+            <field name="model">event.event</field>
+            <field name="type">kanban</field>
+            <field name="inherit_id" ref="event.view_event_kanban"/>
+            <field name="arch" type="xml">
+            	<xpath expr="//div/t/t/input[@name='subscribe']" position="replace">
+            		<input type="hidden"/>
+                </xpath> 
+            </field>
+        </record>
+
     </data>
 </openerp>

=== added directory 'portal_event'
=== added file 'portal_event/__init__.py'
--- portal_event/__init__.py	1970-01-01 00:00:00 +0000
+++ portal_event/__init__.py	2012-05-05 17:45:26 +0000
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2011 OpenERP S.A (<http://www.openerp.com>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+import portal_event
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== added file 'portal_event/__openerp__.py'
--- portal_event/__openerp__.py	1970-01-01 00:00:00 +0000
+++ portal_event/__openerp__.py	2012-05-05 17:45:26 +0000
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2011 OpenERP S.A (<http://www.openerp.com>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+{
+    'name' : "Portal Event",
+    'version' : "1.0",
+    'depends' : ["portal", "event_sale"],
+    'author' : "OpenERP SA",
+    'category': 'Portal',
+    'description': """
+This module defines 'portals' to customize the access to your OpenERP database
+for external users.
+    """,
+    'update_xml': [
+        'security/portal_event_security.xml',
+        'security/ir.model.access.csv',
+    ],    
+    'website': 'http://www.openerp.com',
+    'installable': True,
+}
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== added file 'portal_event/portal_event.py'
--- portal_event/portal_event.py	1970-01-01 00:00:00 +0000
+++ portal_event/portal_event.py	2012-05-05 17:45:26 +0000
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import time
+from osv import fields, osv
+from tools.translate import _
+
+class event_event(osv.osv):
+    _inherit = 'event.event'
+
+    def make_quotation(self, cr, uid, ids, context=None):
+        event_pool = self.pool.get('event.event')
+        register_pool = self.pool.get('event.registration')
+        sale_order_line_pool = self.pool.get('sale.order.line')
+        sale_order = self.pool.get('sale.order')
+        partner_pool = self.pool.get('res.partner')
+        prod_pricelist_obj = self.pool.get('product.pricelist')
+        res_users_obj = self.pool.get('res.users')
+        user = res_users_obj.browse(cr, uid, uid, context=context)
+        partner_ids = partner_pool.search(cr, uid, [('name', '=', user.name), ('email', '=', user.user_email)])
+        if partner_ids:
+            res_users_obj.write(cr, uid, user.id, {'partner_id': partner_ids[0]})        
+        if not partner_ids:
+              raise osv.except_osv(_('Error !'),
+                                    _('There is no Partner defined ' \
+                                            'for this event:'))
+        res = super(event_event,self).make_quotation(cr, uid, ids, context)              
+
+        return res

=== added directory 'portal_event/security'
=== added file 'portal_event/security/ir.model.access.csv'
--- portal_event/security/ir.model.access.csv	1970-01-01 00:00:00 +0000
+++ portal_event/security/ir.model.access.csv	2012-05-05 17:45:26 +0000
@@ -0,0 +1,6 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_event,event,event.model_event_event,portal_event.group_event_portal,1,0,0,0
+access_registration,registration,event.model_event_registration,portal_event.group_event_portal,1,0,0,0
+access_event_items,event.items,event.model_event_event,portal_event.group_event_portal,1,1,1,0
+access_product_product,product.product,product.model_product_product,portal_event.group_event_portal,1,0,0,0
+access_product_uom,product.uom,product.model_product_uom,portal_event.group_event_portal,1,0,0,0
\ No newline at end of file

=== added file 'portal_event/security/portal_event_security.xml'
--- portal_event/security/portal_event_security.xml	1970-01-01 00:00:00 +0000
+++ portal_event/security/portal_event_security.xml	2012-05-05 17:45:26 +0000
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+    
+        <!-- Creating Portal Group -->
+        
+        <record id="group_event_portal" model="res.groups">
+            <field name="name">Event Portal Groups</field>
+            <field ref="event.module_category_event_management" name="category_id"/>
+        </record>
+        
+        <record id="portal_event" model="res.portal">
+            <field name="name">Portal User</field>
+            <field name="group_id" ref="group_event_portal"/>
+        </record>
+            
+        <!-- Sale Portal Access Rules -->
+        <record id="portal_event_rule" model="ir.rule">
+            <field name="name">Personal Events</field>
+            <field ref="event.model_event_event" name="model_id"/>
+            <field name="domain_force">[]</field>
+            <field name="groups" eval="[(4, ref('group_event_portal'))]"/>
+        </record>
+        
+        <record id="portal_registration_rule" model="ir.rule">
+            <field name="name">Personal Registrations</field>
+            <field ref="event.model_event_registration" name="model_id"/>
+            <field name="domain_force">[('partner_id.email','=',user.login)]</field>
+            <field name="groups" eval="[(4, ref('group_event_portal'))]"/>
+        </record>        
+        
+    </data>
+</openerp>
\ No newline at end of file

=== modified file 'sale/sale_view.xml'
--- sale/sale_view.xml	2012-05-03 10:29:10 +0000
+++ sale/sale_view.xml	2012-05-05 17:45:26 +0000
@@ -132,7 +132,7 @@
                     </group>
                     <notebook colspan="5">
                         <page string="Sales Order">
-                            <field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[('customer','=',True)]" context="{'search_default_customer':1}" required="1"/>
+                            <field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[('customer','=',True)]" context="{'search_default_customer':1}" />
                             <field domain="[('parent_id','=',partner_id)]" name="partner_invoice_id" groups="sale.group_delivery_invoice_address" options='{"quick_create": false}'/>
                             <field domain="[('parent_id','=',partner_id)]" name="partner_shipping_id" groups="sale.group_delivery_invoice_address" options='{"quick_create": false}'/>
                             <field domain="[('type','=','sale')]" name="pricelist_id" groups="product.group_sale_pricelist" on_change="onchange_pricelist_id(pricelist_id,order_line)"/>

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to