python里面 循环明细对比 相同人员明细,生成同一订单里面
#2018-04-16
def action_create_purc(self,cr,uid,ids,context=None):
mrp_origin_obj=self.browse(cr,uid,ids,context)
mod_obj = self.pool.get('ir.model.data')
purchaseobj=self.pool('purchase.origin')
date_now=mrp_origin_obj.date
origin=mrp_origin_obj.name
#变量初始化
record=[]
var_part_name=0
i=1
for pro_line_id in mrp_origin_obj.pro_mate_id:
# 变量赋值,供应商的id
part_name=pro_line_id.partner_id.id
#第一条数据判断 如果是第一条
if var_part_name==0:
record.append((0,0,{'sequence':i,'product_id':pro_line_id.product_id.id,'product_qty':pro_line_id.qty,'product_uom':pro_line_id.uom_id.id,'date_planned':date_now,
'price_unit':pro_line_id.price, }))
#明细加数据,供应商重新赋值
var_part_name=part_name
#第2、3、4.。。。。N条数据判断,如果与第一条相同,数据就直接加入明细中
elif part_name==var_part_name :
#当供应商相等时,直接添加明细+1
record.append((0,0,{'sequence':i,'product_id':pro_line_id.product_id.id,'product_qty':pro_line_id.qty,'product_uom':pro_line_id.uom_id.id,'date_planned':date_now,
'price_unit':pro_line_id.price, }))
else: #part_name!=firstvar_part_name :当他不相等时
# 1、首先把之前的record创建成采购订单
ctx={'partner_id':var_part_name,'ref_sale_name':origin,'order_type':'rawmaterial','location_id':19,'date_planned':date_now,'pricelist_id':1,'picking_type_id':8,'line_id':record}
purchase_new_id= purchaseobj.create(cr,uid,ctx,context=context)
#2、把record变成空,重新添加一条
record=[]
ctx={}
record.append((0,0,{'product_id':pro_line_id.product_id.id,'product_qty':pro_line_id.qty,'product_uom':pro_line_id.uom_id.id,'date_planned':date_now,
'price_unit':pro_line_id.price }))
var_part_name=part_name
#当最后一条,相等或不等时都要执行这一句。
ctx={'partner_id':var_part_name,'ref_sale_name':origin,'order_type':'rawmaterial','location_id':19,'date_planned':date_now,'pricelist_id':1,'picking_type_id':8,'line_id':record}
purchase_new_id= purchaseobj.create(cr,uid,ctx,context=context)
return purchase_new_id
def action_pro_mate(self,cr,uid,ids,context=None):
result={}
assert len(ids)==1
id=ids[0] #生产单有保存销售单id
pro_mateobj=self.pool.get('sale.product.material')
mrpobj=self.pool.get('mrp.production')
mrpobj_ids=mrpobj.search(cr,uid,[('sale_origin_id','=',id)],context=context) #查询有关的生产单
mrpobjres=mrpobj.browse(cr,uid,mrpobj_ids,context=context)
seq=1
vals={}
sql=" select feeding_name,partner_id,COALESCE(SUM(feeding_number),0) product_qty,COALESCE (price_unit,0) price_unit,(COALESCE(SUM(feeding_number),0)*COALESCE( price_unit,0)) as je from feeding_order where production_id in (select id from mrp_production where sale_origin_id=%d) GROUP BY feeding_name,partner_id,price_unit ORDER BY partner_id"%(id)
cr.execute(sql)
dict=cr.dictfetchall()
num=len(dict)
pro_mate_ids=[]
i=0
#将查询好的数据,添加到表中,通过sql语句查询分组汇总
for i in range(num):
print i
pro_mate_ids.append((0,0,{ 'sale_origin_id':id,
'sequence':i+1,
'product_id':dict[i]['feeding_name'],
'partner_id':dict[i]['partner_id'],
'price':dict[i]['price_unit'],
'qty':dict[i]['product_qty'],
'je':dict[i]['je'],
}))
i+=1
vals={'pro_mate_id':pro_mate_ids}
最后添加进去
self.write(cr,uid,[id],vals,context=context)
return True #排序 record= sorted(record, key=lambda record : record[2]['product_id'])
python里面 循环明细对比 相同人员明细,生成同一订单里面的更多相关文章
- Linq DataTable Group By 分组显示人员明细
实现功能: 多个字段分组源码样例: 原始数据: 分组后的输出结果: 源代码: public static void PrintPersons() { //准备数据 DataTable dt ...
- Python的循环
循环是一个结构,导致一个程序要重复一定的次数 条件循环也一样,当条件变为假,循环结束 For循环 在python for循环遍历序列,如一个列表或一个字符. for循环语法: ——for iter ...
- python基础-循环
循环 循环 要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 6 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+10000,直 ...
- python的循环和选择
一.python的选择结构: python的选择结构有两种选择结构一种是单选择(if...else)另一种则是多选择结构(if ...elif...elif) 下面用代码来实现: 1.if....el ...
- 在oj中Python的循环输入问题解决
在oj中Python的循环输入问题解决 在makefile中定义逗号字符串和空格字符串 在linux服务器上面部署javaweb项目jar包 数据结构与算法之栈(Java与Python实现) 在oj中 ...
- python 之 循环语句
python提供了for循环和while循环以及嵌套循环(在python中没有do..while循环) while 循环语法: while 判断条件: 执行语句...... 实际案例: numbers ...
- Python while 循环使用实例
while循环是在Python中的循环结构之一. while循环继续,直到表达式变为假.表达的是一个逻辑表达式,必须返回一个true或false值,本文章向码农介绍Python while 循环使用方 ...
- Python学习-7.Python的循环语句-for语句
Python中循环可以使用for语句来实现 list = ['Tom','Lucy','Mary'] for name in list: print(name) 则将会依次输出Tom Lucy Mar ...
- Python for 循环语句
Python for 循环语句 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串. 语法: for循环的语法格式如下: for iterating_var in sequenc ...
随机推荐
- Ansible--原理
什么是Ansible Ansible是一种IT自动化运维工具,它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署或者是零停机滚动更新Ansible是新出现的自动化运维工具,基于Python ...
- loadrunner 运行脚本-Run-time Settings-ContentCheck简单设置
运行脚本-Run-time Settings-ContentCheck简单设置 by:授客 QQ:1033553122 ContentCheck的设置可用来让VuGen检测存在错误的站点页面.如果被测 ...
- Android Color颜色代码
常用颜色代码 <?xml version="1.0" encoding="utf-8"?> <resources> <color ...
- python txt文件数据转excel
txt content: perf.txt 2018-11-12 16:48:58 time: 16:48:58 load average: 0.62, 0.54, 0.56 mosquitto CP ...
- Expo大作战(三十六)--expo sdk api之 ImagePicker,ImageManipulator,Camera
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- (网页)angular js 终极购物车(转)
转自CSDN: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- InnoDB中锁的模式,锁的查看,算法
InnoDB中锁的模式 Ⅰ.总览 S行级共享锁lock in share mode X行级排它锁增删改 IS意向共享锁 IX意向排他锁 AI自增锁 Ⅱ.锁之间的兼容性 兼 X IX S IS X ...
- 基于CoreText的基础排版引擎之不带图片的排版引擎
- (void)drawRect:(CGRect)rect { [super drawRect:rect]; //步骤一:得到当前绘制画布上下文,用于后续将内容绘制在画布上 CGContextRef ...
- zk理解(转载自邬兴亮---www.cnblogs.com/wuxl360/p/5817471.html)
一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的 ...
- apply 和call 的区别,apply实用小技巧
Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...