2015-07-20 26 views
1

我创建了一个模块,可以在一天内计算早餐,午餐和晚餐的成本,我需要再次计算其他日期(第2天,第3天......),而无需再次复制代码,所以我们可以进入尽可能多的日子,因为我们希望,有没有suggession做 我模块如下所示:是否有一个函数可以再次生成代码,或者更好的想法?

from openerp.osv import fields, orm 

class daily_allowances(orm.Model): 

    def _compute_breakfast(self, cr, uid, ids, name, args, context=None): 
     x = {} 
     for record in self.browse(cr,uid,ids,context): 
      x[record.id] = record.breakfast_allowances - record.breakfast_cost 
     return x 

    def _compute_lunch(self, cr, uid, ids, name, args, context=None): 
     x = {} 
     for record in self.browse(cr,uid,ids,context): 
      x[record.id] = record.lunch_allowances - record.lunch_cost 
     return x 

    def _compute_dinner(self, cr, uid, ids, name, args, context=None): 
     x = {} 
     for record in self.browse(cr,uid,ids,context): 
      x[record.id] = record.dinner_allowances - record.dinner_cost 
     return x 


    _name = 'daily.allowances' 
    _columns = { 
     'employee_id': fields.many2one('hr.employee', string="Employee Name", required=True), 
     'trip_date': fields.date('date of the trip', required=False),  
     'daily_allowances': fields.float('Daily Allowances', required=False), 
     'breakfast_allowances': fields.float('Breakfast Allowances', required=False), 
     'breakfast_date': fields.datetime('Date', required=False), 
     'brekfast_cost': fields.float('Costed', required=False), 
     'breakfast_remaining': fields.function(_compute_breakfast, store=True,string='Breakfast Balance'), 
     'lunch_allowances': fields.float('Lunch Allowances', required=False), 
     'lunch_date': fields.datetime('Date', required=False), 
     'lunch_cost': fields.float('Costed', required=False), 
     'lunch_remaining': fields.function(_compute_breakfast, store=True,string='Breakfast Balance'), 
     'dinner_allowances': fields.float('Dinner Allowances', required=False), 
     'dinner_date': fields.datetime('Date', required=False), 
     'dinner_cost': fields.float('Costed', required=False), 
     'dinner_remaining': fields.function(_compute_breakfast, store=True,string='Breakfast Balance'), 
     } 
+1

您应该制定一个计划行动(克罗恩工作)并将间隔单位设置为“日”。这样系统将根据您安排的时间间隔单位自动调用您的功能。我认为这种方式更好地做你的工作 –

+0

感谢您的答案,你有一个很好的例子,如何创建cron工作? –

+0

@DaSaDiYaChaiTAnYa:使用预定作业不会有帮助,因为每个记录都必须具有实际的膳食成本。 –

回答

1

它看起来像你的模块设置为跟踪每日津贴的每天的基础。这意味着您需要为每位员工创建每天的新记录,并输入他们每餐所花费的金额。

这看起来很好。

一个观察:你有一个trip_date字段,所以你不需要breakfast_datelunch_datedinner_date字段 - 它们应该都是相同的。

如果您需要更多帮助,您将向我们展示如何调用此代码以及xml视图文件。

+0

感谢您的答案,但如果这次旅行是一个星期长,我需要计算整个行程的费用 –

+0

@RamiWafai:如果旅程是一周长,那么您将需要每天的记录(记录) - 除非你的员工在每次早餐中花费的金额完全相同,每次午餐的金额完全相同,每次晚餐的金额也完全一样? –

相关问题