openerp学习笔记 对象调用(创建、修改),用于后台代码创建和更新对象
#服务卡创建,自动更新服务卡为开卡状态
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学习笔记 对象调用(创建、修改),用于后台代码创建和更新对象的更多相关文章
- openerp学习笔记 跟踪状态,记录日志,发送消息
跟踪状态基础数据: kl_qingjd/kl_qingjd_data.xml <?xml version="1.0"?><openerp> <d ...
- 多线程编程学习笔记——异步调用WCF服务
接上文 多线程编程学习笔记——使用异步IO 接上文 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端 接上文 多线程编程学习笔记——异步操作数据库 本示例描述了如何创建一个WCF服务,并宿主 ...
- python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值
三种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,类名就是类对象,city就是类变量, #coding=utf-8 class empl ...
- 【转】Pandas学习笔记(三)修改&添加值
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型
C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ...
- iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- Swift学习笔记(一)搭配环境以及代码运行成功
原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...
- amazeui学习笔记--css(HTML元素2)--代码Code
amazeui学习笔记--css(HTML元素2)--代码Code 一.总结 1.行内代码:code标签<code> 2.代码片段:pre标签<pre> 3.限制代码块高度:添 ...
- openerp学习笔记 数据合法性约束(对象约束+数据库约束)
#检测同一时间段内是否存在相同的请假单,False 是存在,不允许创建 def _check_date(self, cr, uid, ids): for rec in self.b ...
随机推荐
- postman安装时提示打不开
安装postman6.6.1时,提示打不开,如下图: 解决办法: 1.找到以下两个路径直接删除文件,注安装路径不同有可能不同 C:\Users\Administrator\AppData\Roamin ...
- beego中获取url以及参数的方式
以下都全默认在controller下执行 获取当前请求的referer fmt.Println(this.Ctx.Request.Referer()) 输出:http://localhost:8080 ...
- python面向编程: 常用模块补充与面向对象
一.常用模块 1.模块 的用用法 模块的相互导入 绝对导入 从sys.path (项目根目录)开始的完整路径 相对导入 是指相对于当前正在执行的文件开始的路径 只能用于包内模块相互间导入 不能超过顶层 ...
- 自动匹配输入的内容(AutoCompleteTextView及MultiAutoCompleteTextView)
自动匹配输入的内容 AutoCompleteTextView 1.功能动态匹配输入的内容,如百度搜索引擎当输入文本时,可以根据内容显示匹配的热门信息 2.属性:android:completionTh ...
- WebClient HttpWebRequest 下载文件到本地
处理方式: 第一种: 我们需要获取文件,但是我们不需要保存源文件的名称 public void DownFile(string uRLAddress, string localPath, str ...
- Mike and Feet CodeForces - 548D (单调栈)
Mike is the president of country What-The-Fatherland. There are n bears living in this country besid ...
- Hdu 1564 1*2矩阵覆盖棋局博弈
n*n的矩阵如果n为偶数 则可被1*2的矩形完全覆盖 如果n为奇数 则除起点外 其他各自可被1*2矩形完全覆盖 所以当n为偶数 先手赢 n为奇数 后手赢 #include<bits/stdc++ ...
- static和assets的区别
assets和static两个都是用于存放静态资源文件. 放在static中的文件不会进行构建编译处理,也就不会压缩体积,在打包时效率会更高,但体积更大在服务器中就会占据更大的空间 放在assets中 ...
- 题解 【NOIP2016】魔法阵
[NOIP2016]魔法阵 Description 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法量. 大魔法师有m个魔法物品,编号分别为1,2,...,m.每个物品具有一个魔法 ...
- table 表格
标签 <table> 标签定义HTML中的表格 <tr> 标签定义表格中的行. <th> 标签定义表格中表头的每一项.元素内部的文本通常会呈现为居中的粗体文本. ...