diff --git a/addons/delivery/delivery.py b/addons/delivery/delivery.py index aceee36e0a2..031fdeeeb92 100644 --- a/addons/delivery/delivery.py +++ b/addons/delivery/delivery.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2010 Tiny SPRL (). # @@ -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 . +# along with this program. If not, see . # ############################################################################## @@ -40,6 +40,7 @@ class delivery_carrier(osv.osv): currency = order.pricelist_id.currency_id.name or '' res = [(r['id'], r['name']+' ('+(str(r['price']))+' '+currency+')') for r in self.read(cr, uid, ids, ['name', 'price'], context)] return res + def get_price(self, cr, uid, ids, field_name, arg=None, context=None): res={} if context is None: @@ -58,17 +59,27 @@ class delivery_carrier(osv.osv): price = 0.0 res[carrier.id]=price return res + _columns = { 'name': fields.char('Carrier', size=64, required=True), 'partner_id': fields.many2one('res.partner', 'Carrier Partner', required=True), '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'), + 'free_if_more_than': fields.boolean('Free If More Than'), + 'amount': fields.float('Amount'), + 'use_detailed_pricelist': fields.boolean('Use Detailed Pricelist'), + 'pricelist_ids': fields.one2many('delivery.grid', 'carrier_id', 'Price List'), + } + _defaults = { - 'active': lambda *args:1 + 'active': 1, + 'free_if_more_than': 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,6 +97,63 @@ 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] + + #delete all existing grid lines + grid_lines = [line.id for line in grid_pool.browse(cr, uid, grid_id[0]).line_ids if line.type == 'price'] + grid_line_pool.unlink(cr, uid, grid_lines, context=context) + + #create the grid lines + if record.free_if_more_than: + 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) + + 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): + 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): + 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_grid(osv.osv): @@ -151,7 +219,9 @@ 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')],\ + '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), @@ -167,7 +237,6 @@ class delivery_grid_line(osv.osv): } _order = 'list_price' - delivery_grid_line() diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml index 1e3fb6b2a1d..c1796214126 100644 --- a/addons/delivery/delivery_view.xml +++ b/addons/delivery/delivery_view.xml @@ -4,9 +4,6 @@ - - - delivery.carrier.tree delivery.carrier @@ -25,10 +22,46 @@ form
- - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -40,6 +73,15 @@ tree,form 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. + + + Delivery Method + ir.actions.act_window + delivery.carrier + form + form + + @@ -98,13 +140,17 @@ form
- - - - + + + + + + + + - + @@ -118,7 +164,7 @@ - + @@ -286,6 +332,12 @@ + + + 10 + normal + skip + diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 839c635c896..31d4aa50a1d 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -80,7 +80,7 @@ class hr_holidays_status(osv.osv): 'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the leave type without removing it."), 'max_leaves': fields.function(_user_left_days, method=True, string='Maximum Allowed', help='This value is given by the sum of all holidays requests with a positive value.', multi='user_left_days'), 'leaves_taken': fields.function(_user_left_days, method=True, string='Leaves Already Taken', help='This value is given by the sum of all holidays requests with a negative value.', multi='user_left_days'), - 'remaining_leaves': fields.function(_user_left_days, method=True, string='Remaining Leaves', help='Maximum Leaves Allowed - Leaves Already Taken', multi='user_left_days'), + 'remaining_leaves': fields.function(_user_left_days, method=True, string='Remaining Legal Leaves', help='Maximum Leaves Allowed - Leaves Already Taken', multi='user_left_days'), 'double_validation': fields.boolean('Apply Double Validation', help="If its True then its Allocation/Request have to be validated by second validator") } _defaults = { @@ -334,7 +334,7 @@ class hr_employee(osv.osv): # Find for holidays status status_ids = type_obj.search(cr, uid, [('limit', '=', False)], context=context) if len(status_ids) != 1 : - raise osv.except_osv(('Warning !'),_("To use this feature, you must have only one leave type without the option 'Allow to Override Limit' set. (%s Found).") % (len(status_ids))) + raise osv.except_osv(_('Warning !'),_("To use this feature, you must have only one leave type without the option 'Allow to Override Limit' set. (%s Found).") % (len(status_ids))) status_id = status_ids and status_ids[0] or False if not status_id: return False @@ -349,6 +349,10 @@ class hr_employee(osv.osv): return True def _get_remaining_days(self, cr, uid, ids, name, args, context=None): + type_obj = self.pool.get('hr.holidays.status') + status_ids = type_obj.search(cr, uid, [('limit', '=', False)], context=context) + if len(status_ids) != 1 : + raise osv.except_osv(_('Warning !'),_("You should have only one leave type without the option 'Allow to Override Limit' set. (%s Found).") % (len(status_ids))) cr.execute("SELECT sum(h.number_of_days_temp) as days, h.employee_id from hr_holidays h join hr_holidays_status s on (s.id=h.holiday_status_id) where h.type='add' and h.state='validate' and s.limit=False group by h.employee_id") res = cr.dictfetchall() remaining = {} @@ -361,7 +365,7 @@ class hr_employee(osv.osv): _columns = { - 'remaining_leaves': fields.function(_get_remaining_days, method=True, string='Remaining Leaves', fnct_inv=_set_remaining_days, type="float", help='Total number of legal leaves allocated to this employee, change this value to create allocation request.', store=True), + 'remaining_leaves': fields.function(_get_remaining_days, method=True, string='Remaining Leaves', fnct_inv=_set_remaining_days, type="float", help='Total number of legal leaves allocated to this employee, change this value to create allocation/leave requests.', store=True), } hr_employee() diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index a9a05a410c6..ca753bcee27 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -346,6 +346,7 @@ hr.recruitment.stage form + Check if the following stages are matching your recruitment process. Don't forget to specify the department if your recruitment process is different according to the job position. 30.0 - Service on Timesheet + Consultant service diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_installer_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_installer_view.xml index 652a7421f83..780444ea3be 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_installer_view.xml +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_installer_view.xml @@ -8,7 +8,7 @@
- + diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml index 20573316915..a8f546810e0 100644 --- a/addons/lunch/lunch_view.xml +++ b/addons/lunch/lunch_view.xml @@ -24,15 +24,19 @@ lunch.order - - - - - - - - + + + + + + + + + + +