[MERGE]Merge with trunk-configuration-rework-delivery-improvement-rha
bzr revid: mma@tinyerp.com-20110516125404-va7munk90aqe3alj
This commit is contained in:
+133
-5
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
@@ -15,7 +15,7 @@
|
||||
# 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/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
@@ -64,11 +64,22 @@ class delivery_carrier(osv.osv):
|
||||
'product_id': fields.many2one('product.product', 'Delivery Product', required=True),
|
||||
'grids_id': fields.one2many('delivery.grid', 'carrier_id', 'Delivery Grids'),
|
||||
'price' : fields.function(get_price, method=True,string='Price'),
|
||||
'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the delivery carrier without removing it.")
|
||||
'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the delivery carrier without removing it."),
|
||||
'normal_price': fields.float('Normal Price'),
|
||||
'international_price': fields.boolean('International Price'),
|
||||
'free_if_more_than': fields.boolean('Free If More Than'),
|
||||
'delivery_country_ids': fields.one2many('delivery.carrier.country',\
|
||||
'delivery_carrier_id', 'Delivery Country'),
|
||||
'amount': fields.float('Amount'),
|
||||
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'active': lambda *args:1
|
||||
'active': lambda *args:1,
|
||||
'international_price': lambda *args: False,
|
||||
'free_if_more_than': lambda *args: False
|
||||
}
|
||||
|
||||
def grid_get(self, cr, uid, ids, contact_id, context=None):
|
||||
contact = self.pool.get('res.partner.address').browse(cr, uid, contact_id, context=context)
|
||||
for carrier in self.browse(cr, uid, ids, context=context):
|
||||
@@ -86,8 +97,116 @@ class delivery_carrier(osv.osv):
|
||||
continue
|
||||
return grid.id
|
||||
return False
|
||||
|
||||
def create_grid_lines(self, cr, uid, ids, vals, context=None):
|
||||
if context == None:
|
||||
context = {}
|
||||
grid_line_pool = self.pool.get('delivery.grid.line')
|
||||
grid_pool = self.pool.get('delivery.grid')
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
grid_id = grid_pool.search(cr, uid, [('carrier_id', '=', record.id)], context=context)
|
||||
if not grid_id:
|
||||
record_data = {
|
||||
'name': vals.get('name', False),
|
||||
'carrier_id': record.id,
|
||||
'seqeunce': 10,
|
||||
}
|
||||
new_grid_id = grid_pool.create(cr, uid, record_data, context=context)
|
||||
grid_id = [new_grid_id]
|
||||
|
||||
if record.free_if_more_than:
|
||||
grid_lines = []
|
||||
for line in grid_pool.browse(cr, uid, grid_id[0]).line_ids:
|
||||
if line.type == 'price':
|
||||
grid_lines.append(line.id)
|
||||
grid_line_pool.unlink(cr, uid, grid_lines, context=context)
|
||||
data = {
|
||||
'grid_id': grid_id and grid_id[0],
|
||||
'name': _('Free if more than %d') % record.amount,
|
||||
'type': 'price',
|
||||
'operator': '>=',
|
||||
'max_value': record.amount,
|
||||
'standard_price': 0.0,
|
||||
'list_price': 0.0,
|
||||
}
|
||||
grid_line_pool.create(cr, uid, data, context=context)
|
||||
else:
|
||||
_lines = []
|
||||
for line in grid_pool.browse(cr, uid, grid_id[0], context=context).line_ids:
|
||||
if line.type == 'price':
|
||||
_lines.append(line.id)
|
||||
grid_line_pool.unlink(cr, uid, _lines, context=context)
|
||||
|
||||
if record.international_price:
|
||||
lines = []
|
||||
for line in grid_pool.browse(cr, uid, grid_id[0], context=context).line_ids:
|
||||
if line.type == 'country':
|
||||
lines.append(line.id)
|
||||
grid_line_pool.unlink(cr, uid, lines, context=context)
|
||||
for country_rec in record.delivery_country_ids:
|
||||
for country in country_rec.country:
|
||||
values = {
|
||||
'grid_id': grid_id[0],
|
||||
'name': _('Country is %s') %country.name,
|
||||
'country_id': country.id,
|
||||
'type': 'country',
|
||||
'standard_price': country_rec.price,
|
||||
'list_price': 0.0,
|
||||
'operator': '==',
|
||||
'max_value': 0.0
|
||||
}
|
||||
grid_line_pool.create(cr, uid, values, context=context)
|
||||
else:
|
||||
l = []
|
||||
for line in grid_pool.browse(cr, uid, grid_id[0]).line_ids:
|
||||
if line.type == 'country':
|
||||
l.append(line.id)
|
||||
grid_line_pool.unlink(cr, uid, l, context=context)
|
||||
|
||||
if record.normal_price:
|
||||
default_data = {
|
||||
'grid_id': grid_id and grid_id[0],
|
||||
'name': _('Default price'),
|
||||
'type': 'price',
|
||||
'operator': '>=',
|
||||
'max_value': 0.0,
|
||||
'standard_price': record.normal_price,
|
||||
'list_price': record.normal_price,
|
||||
}
|
||||
grid_line_pool.create(cr, uid, default_data, context=context)
|
||||
|
||||
return True
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
if context == None:
|
||||
context = {}
|
||||
res_id = super(delivery_carrier, self).write(cr, uid, ids, vals, context=context)
|
||||
self.create_grid_lines(cr, uid, ids, vals, context=context)
|
||||
return res_id
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
if context == None:
|
||||
context = {}
|
||||
res_id = super(delivery_carrier, self).create(cr, uid, vals, context=context)
|
||||
self.create_grid_lines(cr, uid, [res_id], vals, context=context)
|
||||
return res_id
|
||||
|
||||
delivery_carrier()
|
||||
|
||||
|
||||
class delivery_carrier_country(osv.osv):
|
||||
_name = "delivery.carrier.country"
|
||||
_description = "Delivery Carrier Country"
|
||||
|
||||
_columns = {
|
||||
'country' : fields.many2many('res.country', 'delivery_country_rel',\
|
||||
'delivery_id', 'country_id', 'Country'),
|
||||
'price': fields.float('Price'),
|
||||
'delivery_carrier_id': fields.many2one('delivery.carrier', 'Carrier'),
|
||||
}
|
||||
|
||||
delivery_carrier_country()
|
||||
|
||||
class delivery_grid(osv.osv):
|
||||
_name = "delivery.grid"
|
||||
_description = "Delivery Grid"
|
||||
@@ -151,13 +270,17 @@ class delivery_grid_line(osv.osv):
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=32, required=True),
|
||||
'grid_id': fields.many2one('delivery.grid', 'Grid',required=True),
|
||||
'type': fields.selection([('weight','Weight'),('volume','Volume'),('wv','Weight * Volume'), ('price','Price')], 'Variable', required=True),
|
||||
'type': fields.selection([('weight','Weight'),('volume','Volume'),\
|
||||
('wv','Weight * Volume'), ('price','Price'),\
|
||||
('country', 'Country')],\
|
||||
'Variable', required=True),
|
||||
'operator': fields.selection([('==','='),('<=','<='),('>=','>=')], 'Operator', required=True),
|
||||
'max_value': fields.float('Maximum Value', required=True),
|
||||
'price_type': fields.selection([('fixed','Fixed'),('variable','Variable')], 'Price Type', required=True),
|
||||
'variable_factor': fields.selection([('weight','Weight'),('volume','Volume'),('wv','Weight * Volume'), ('price','Price')], 'Variable Factor', required=True),
|
||||
'list_price': fields.float('Sale Price', required=True),
|
||||
'standard_price': fields.float('Cost Price', required=True),
|
||||
'country_id': fields.many2one('res.country', 'Country'),
|
||||
}
|
||||
_defaults = {
|
||||
'type': lambda *args: 'weight',
|
||||
@@ -167,6 +290,11 @@ class delivery_grid_line(osv.osv):
|
||||
}
|
||||
_order = 'list_price'
|
||||
|
||||
def on_change_type(self, cr, uid, ids, type):
|
||||
if type == 'country':
|
||||
return {'value': {'operator': '=='}}
|
||||
return {}
|
||||
|
||||
|
||||
delivery_grid_line()
|
||||
|
||||
|
||||
@@ -4,9 +4,6 @@
|
||||
<!-- Delivery Carriers -->
|
||||
<menuitem id="menu_delivery" name="Delivery" parent="stock.menu_stock_configuration" sequence="4"/>
|
||||
|
||||
|
||||
|
||||
|
||||
<record id="view_delivery_carrier_tree" model="ir.ui.view">
|
||||
<field name="name">delivery.carrier.tree</field>
|
||||
<field name="model">delivery.carrier</field>
|
||||
@@ -25,10 +22,28 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Carrier">
|
||||
<field name="name" select="1"/>
|
||||
<field name="active" select="1"/>
|
||||
<field name="partner_id" select="1"/>
|
||||
<field name="product_id" select="1"/>
|
||||
<group colspan="4" col="4" name="general">
|
||||
<field name="name" select="1"/>
|
||||
<field name="active" select="1"/>
|
||||
<field name="partner_id" select="1"/>
|
||||
<field name="product_id" select="1"/>
|
||||
<separator string="Pricing Information" colspan="6"/>
|
||||
<group colspan="2" col="4">
|
||||
<field name="normal_price" select="1" colspan="4"/>
|
||||
<newline/>
|
||||
<field name="free_if_more_than"/>
|
||||
<field name="amount" attrs="{'invisible':[('free_if_more_than','=',False)]}"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="international_price"/>
|
||||
</group>
|
||||
<field name="delivery_country_ids" nolabel="1" attrs="{'invisible':[('international_price','=',False)]}" mode="tree,form" colspan="6">
|
||||
<tree string="Delivery countries" editable="top">
|
||||
<field name="price"/>
|
||||
<field name="country"/>
|
||||
<field name="delivery_carrier_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
@@ -40,8 +55,32 @@
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help">Create and manage the delivery methods you need for your sales activities. Each delivery method can be assigned to a price list which computes the price of the delivery according to the products sold or delivered.</field>
|
||||
</record>
|
||||
|
||||
<record id="action_delivery_carrier_form1" model="ir.actions.act_window">
|
||||
<field name="name">Delivery Method</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">delivery.carrier</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_delivery_carrier_form" id="menu_action_delivery_carrier_form" parent="menu_delivery" groups="base.group_extended"/>
|
||||
|
||||
<record id="view_delivery_country_form" model="ir.ui.view">
|
||||
<field name="name">delivery.carrier.country.form</field>
|
||||
<field name="model">delivery.carrier.country</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Carrier Country">
|
||||
<group colspan="4" col="4">
|
||||
<field name="price"/>
|
||||
</group>
|
||||
<separator string="Countries" colspan="6"/>
|
||||
<field name="country" nolabel="1"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Delivery Grids -->
|
||||
<record id="view_delivery_grid_tree" model="ir.ui.view">
|
||||
<field name="name">delivery.grid.tree</field>
|
||||
@@ -98,13 +137,18 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Grid Lines">
|
||||
<field colspan="4" name="name" select="1"/>
|
||||
<field name="type" string="Condition"/>
|
||||
<field name="operator" nolabel="1"/>
|
||||
<field name="max_value" nolabel="1"/>
|
||||
<group colspan="5" col="5">
|
||||
<field colspan="4" name="name" select="1"/>
|
||||
<newline/>
|
||||
<field name="type" string="Condition" on_change="on_change_type(type)"/>
|
||||
<field name="operator" nolabel="1" attrs="{'readonly':[('type','=','country')]}"/>
|
||||
<field name="max_value" nolabel="1" attrs="{'invisible':[('type','=','country')]}"/>
|
||||
<field name="country_id" attrs="{'invisible':[('type','!=','country')], 'required':[('type','=','country')]}" nolabel="1"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="list_price"/>
|
||||
<field name="standard_price" groups="base.group_extended"/>
|
||||
<field name="price_type" />
|
||||
<field name="price_type"/>
|
||||
<field name="variable_factor" attrs="{'invisible':[('price_type','=','fixed')]}"/>
|
||||
</form>
|
||||
</field>
|
||||
@@ -118,7 +162,8 @@
|
||||
<field name="name"/>
|
||||
<field name="type"/>
|
||||
<field name="operator"/>
|
||||
<field name="max_value"/>
|
||||
<field name="country_id" nolabel="1" attrs="{'invisible':[('type','!=','country')]}"/>
|
||||
<field name="max_value" nolabel="1" attrs="{'invisible':[('type','=','country')]}"/>
|
||||
<field name="list_price"/>
|
||||
<field name="standard_price" groups="base.group_extended"/>
|
||||
</tree>
|
||||
@@ -286,6 +331,12 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="delivery_method_form_view_todo" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_delivery_carrier_form1"/>
|
||||
<field name="sequence">10</field>
|
||||
<field name="type">normal</field>
|
||||
<field name="state">skip</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -6,3 +6,5 @@
|
||||
"access_delivery_grid_manager","delivery.grid","model_delivery_grid","base.group_sale_manager",1,1,1,1
|
||||
"access_delivery_grid_line_manager","delivery.grid.line","model_delivery_grid_line","base.group_sale_manager",1,1,1,1
|
||||
"access_delivery_carrier_partner_manager","delivery.carrier partner_manager","model_delivery_carrier","base.group_partner_manager",1,0,0,0
|
||||
"access_delivery_carrier_country","delivery.carrier.country","model_delivery_carrier_country","base.group_sale_salesman",1,0,0,0
|
||||
"access_delivery_carrier_country_manager","delivery.carrier.country.manager","model_delivery_carrier_country","base.group_sale_manager",1,1,1,1
|
||||
|
||||
|
Reference in New Issue
Block a user