#服务卡创建,自动更新服务卡为开卡状态
   
def create(self, cr, uid, values,
context=None):
        values['state'] =
'1'
        values['times_limit'] =
values['remaining_times']
#保存时按设置的剩余次数给初始次数赋值
        cardid = 
super(dispatch_service_card, self).create(cr, uid, values,
context=context)
        #开卡记录  

       
service_card=self.pool.get("dispatch.service_card")
       
service_card_rec=service_card.browse(cr,uid,cardid)
       
# 自动记录服务卡增减记录(创建对象过程)
       
card_record =
self.pool.get('dispatch.service.card.recording')

       
card_record.create(cr, uid, {'customer': service_card_rec.customer.id,
'service_card': service_card_rec.id,

                                                     
'start_times': 0, 'increase_times': service_card_rec.remaining_times,
'end_times': service_card_rec.remaining_times,

                                                     
'action': "开卡"})

        return cardid

#服务单报工,验证并更新服务卡状态
   
def set_to_done(self, cr, uid, ids,
context=None):
        for rec in
self.browse(cr, uid, ids,
context=context):
           
if not rec.engineer:

               
raise
osv.except_osv(_(u'警告!'),_(u'服务单报工时必须指定服务工程师.'))
           
#判断是否已指定需要扣卡
           
if not
rec.state_use_card:
               
raise
osv.except_osv(_(u'警告!'),_(u'请首先指定是否需要扣卡.'))
           
if (rec.state_use_card ==
"1"):
               
if not rec.service_card:

                   
raise
osv.except_osv(_(u'警告!'),_(u'需要扣卡时必须指定服务卡.'))
               
service_card=self.pool.get("dispatch.service_card")
               
service_card_rec=service_card.browse(cr,uid,rec.service_card.id)
               
if rec.customer.id !=
service_card_rec.customer.id:
                   
raise
osv.except_osv(_(u'警告!'),_(u'当前服务卡所属客户与当前服务单对应客户不一致,请更换服务卡.'))
               
if service_card_rec.remaining_times <=
0:
                   
raise
osv.except_osv(_(u'警告!'),_(u'当前服务卡已经扣完,请更换新卡.'))
               
if rec.bill_date >
service_card_rec.due_date:
                   
raise
osv.except_osv(_(u'警告!'),_(u'当前服务卡已超期,请更换新卡.'))
               
if service_card_rec.state !=
'1':
                   
raise
osv.except_osv(_(u'警告!'),_(u'当前服务卡未处于开卡状态,请更换服务卡.'))
               
#扣卡
               
service_card.write(cr, uid, service_card_rec.id,
{'remaining_times':service_card_rec.remaining_times-1})
               
#更新服务卡为已完成状态
               
if service_card_rec.remaining_times ==
1:
                    
service_card.write(cr, uid, service_card_rec.id,
{'state':'2'}) #(更新对象过程)

               
#
自动记录服务卡增减记录
               
card_record =
self.pool.get('dispatch.service.card.recording')
               
card_record.create(cr, uid, {'customer': rec.customer.id, 'service_card':
service_card_rec.id,

                                                             
'start_times': service_card_rec.remaining_times, 'decrease_times': 1,
'end_times': service_card_rec.remaining_times-1,

                                                             
'work_order': rec.id, 'action':
"扣卡"})
               
return self.write(cr, uid, ids, {'state':'done', 'done_date':
datetime.datetime.now()})
           
else:
               
return self.write(cr, uid, ids, {'service_card':False,
'service_card_remaining_times':False, 'state':'done', 'done_date':
datetime.datetime.now()}) #(更新对象过程)

    #新增产品时,记录初始成本
    def
create(self, cr, uid, values,
context=None):
        productid =
super(dispatch_product, self).create(cr, uid, values,
context=context)
        costrecord =
self.pool.get('dispatch.product.cost.recording')
       
costrecord.create(cr, uid, {'dispatch_product': productid, 'cost':
values['cost']})
        return
productid
       

   
#修改产品时,判断成本是否修改并记录成本变更
    def write(self, cr, uid,
ids, vals, context=None):
        #
更新成本是自动记录
        if (vals != [])
and
vals.has_key('cost'): #(更新时判断对象中的字段是否被修改)
           
costrecord =
self.pool.get('dispatch.product.cost.recording')
           
for productid in
ids:
               
costrecord.create(cr, uid, {'dispatch_product': productid, 'cost':
vals['cost']})
        return
super(dispatch_product, self).write(cr, uid, ids, vals, context=context)

openerp学习笔记 对象调用(创建、修改),用于后台代码创建和更新对象的更多相关文章

  1. openerp学习笔记 跟踪状态,记录日志,发送消息

    跟踪状态基础数据: kl_qingjd/kl_qingjd_data.xml <?xml version="1.0"?><openerp>    <d ...

  2. 多线程编程学习笔记——异步调用WCF服务

    接上文 多线程编程学习笔记——使用异步IO 接上文 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端 接上文 多线程编程学习笔记——异步操作数据库 本示例描述了如何创建一个WCF服务,并宿主 ...

  3. python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值

    三种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,类名就是类对象,city就是类变量, #coding=utf-8 class empl ...

  4. 【转】Pandas学习笔记(三)修改&添加值

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  5. C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型

    C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ...

  6. iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比

    header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...

  7. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  8. amazeui学习笔记--css(HTML元素2)--代码Code

    amazeui学习笔记--css(HTML元素2)--代码Code 一.总结 1.行内代码:code标签<code> 2.代码片段:pre标签<pre> 3.限制代码块高度:添 ...

  9. openerp学习笔记 数据合法性约束(对象约束+数据库约束)

    #检测同一时间段内是否存在相同的请假单,False 是存在,不允许创建    def _check_date(self, cr, uid, ids):        for rec in self.b ...

随机推荐

  1. shell查询MySQL并将结果写入文件中

    背景 说下需求,自己搭建的一个接口开放平台,包含API文档和功能测试,部分内网地址需要修改hosts文件 准备 新建表 然后查看服务器中hosts文件 命令:cat /etc/hosts 我们要做的就 ...

  2. 怎么提高U盘传输文件的性能?

    U盘使用时间久了,其传输复制文件速度就可能会变得有些慢.出现这个问题的原因有很多,除了U盘本身的问题外,也可能会有电脑设置方面的因素在影响.好系统下面就来告诉大家解决U盘传输复制文件速度慢的几个小技巧 ...

  3. pv与pvc

    目的: 为了屏蔽底层存储实现的细节, 让用户方便使用同时让管理员方便管理, 引入了pv与pvc两种资源对象实现对存储的管理子系统 pv: 对底层网络共享存储的抽象, 将共享存储定义为一种资源 pvc: ...

  4. linux 计划任务超时控制和并发控制

    Linux crontab 的配置存放 /var/spool/cron 目录下. Linux crontab的日志文件存放再 /var/log/cron* timeout 命令 timeout 给脚本 ...

  5. 【获取url 问号后参数】防中文乱码

    function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...

  6. [工具] fierce--子域收集

    简介 fierce 是使用多种技术来扫描目标主机IP地址和主机名的一个DNS服务器枚举工具.运用递归的方式来工作.它的工作原理是先通过查询本地DNS服务器来查找目标DNS服务器,然后使用目标DNS服务 ...

  7. spring RestTemplate 出现 NoHttpResponseException 和 ConnectionTimeoutException

    使用 httpclient.4.5.6 springboot 2.0.8RELEASE RetryExec.java CloseableHttpResponse execute() try { ret ...

  8. win10 sql server2012 连接navicat 无法使用

    修改 连接navicat时报如下错误,按照网上办法,各种删除navicat的客户端,行不通. 点击sqlserver管理器,提示评估期已过.有关如何升级的测试版软件的信息,请访问http://www. ...

  9. BZOJ1491 [NOI2007]社交网络[最短路计数]

    $n$非常的小,结合题目计算式可以想到$O(n^3)$暴枚$s,t,v$,看$v$在不在$s\to t$最短路上($dis_{s,v}+dis_{v,t}=dis_{s,v}$是$v$在两点最短路上的 ...

  10. Storm实践(一):基础知识

    storm简介 Storm是一个分布式实时流式计算平台,支持水平扩展,通过追加机器就能提供并发数进而提高处理能力:同时具备自动容错机制,能自动处理进程.机器.网络等异常. 它可以很方便地对流式数据进行 ...