控制界面

OpenERP 物件可以从 PostgreSQL 的窗体创建产生。方式如下:

  1. 宣告你的栏位 _columns 定义。所有字段必须有 readonly=True. 的旗标。
  2. 对 OpenERP 物件指定参数 _auto=False ,所以不会自动产生对应到 _columns 定义的资料表。
  3. 增加一个方法 init(self, cr) 用来创建一个符合 _columns 栏位定义的 PostgreSQL 窗体 .

范例 report_crm_case_user 这个物件是依照以下模式创建的

class report_crm_case_user(osv.osv):
    _name = "report.crm.case.user"
    _description = "Cases by user and section"
    _auto = False
    _columns = {
        'name': fields.date('Month', readonly=True),
        'user_id':fields.many2one('res.users', 'User',
                                  readonly=True, relate=True),
        'section_id':fields.many2one('crm.case.section', 'Section',
                                     readonly=True, relate=True),
        'amount_revenue': fields.float('Est.Revenue',
                                       readonly=True),
        'amount_costs': fields.float('Est.Cost', readonly=True),
        'amount_revenue_prob': fields.float('Est. Rev*Prob.',
                                            readonly=True),
        'nbr': fields.integer('# of Cases', readonly=True),
        'probability': fields.float('Avg. Probability',
                                    readonly=True),
        'state': fields.selection(AVAILABLE_STATES, 'State',
                                  size=16, readonly=True),
        'delay_close': fields.integer('Delay to close',
                                      readonly=True),
        }
    _order = 'name desc, user_id, section_id'

    def init(self, cr):
        cr.execute("""
     CREATE OR REPLACE VIEW report_crm_case_user AS (
     SELECT
         min(c.id) as id,
         SUBSTRING(c.create_date for 7)||'-01' as name,
         c.state,
         c.user_id,
         c.section_id,
         COUNT(*) AS nbr,
         SUM(planned_revenue) AS amount_revenue,
         SUM(planned_cost) AS amount_costs,
         SUM(planned_revenue*probability)::decimal(16,2)
              AS amount_revenue_prob,
         avg(probability)::decimal(16,2) AS probability,
         TO_CHAR(avg(date_closed-c.create_date),
                 'DD"d" `HH24:MI:SS') AS delay_close
     FROM
         crm_case c
     GROUP BY SUBSTRING(c.create_date for 7), c.state,
              c.user_id, c.section_id
     )""")
report_crm_case_user()