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 ...
随机推荐
- 【代码笔记】Web-JavaScript-JavaScript 数据类型
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 消除2个按钮之间1px细节引起的冲突
1.代码 <!doctype html> <html lang="en"> <head> <meta charset="UTF- ...
- JMeter 检查点之响应断言(Response Assertion)
检查点之响应断言(Response Assertion) by:授客 QQ:1033553122 JMeter断言用于对sampler(采样器)进行额外检查,且在相同作用域中,每执行完一个samp ...
- Oracle 11gR2_database在Linux下的安装
Oracle 11gR2_database在Linux下的安装 by:授客 QQ:1033553122 由于篇幅问题,采用链接分享的形式,烦请复制以下网址,黏贴到浏览器中打开,下载 http://pa ...
- nginx 配置简单网站项目(linux下)
1.新建html2与html3两个网站项目测试,而html是本身就有,记得到/etc/hosts 添加dns记录 2.修改nginx.conf文件 3.测试访问 中间用到一些nginx的命令,就不截图 ...
- 通过日志过滤的方法,统计每天内容详情页面的PV数
1.目的: 每天凌晨0点1分统计用户点击进入内容详情页的次数,对内容点击量形成榜单. 2.分析: A./data/log/epg.access.log日志实时打印用户访问页面的日志,并且每天凌晨0点会 ...
- json数据 二级联动
<head> <link href="static/bootstrap-3.3.5-dist/css/bootstrap.css" rel="style ...
- iptable用法
一:添加屏蔽IP #禁止此IP访问服务器iptables -I INPUT -s 1.2.3.4 -j DROP或iptables -A INPUT -s 1.2.3.4 -j DROP#禁止服务器访 ...
- 非对称加密与GPG/PGP
最近浏览博客的时候,经常会看到博主展示出自己的公钥,于是对 GPG/PGP 产生兴趣.下面简单记录相关文章的链接,方便以后了解. 简介: 1991年,程序员Phil Zimmermann为了避开政府的 ...
- Linux 下查看系统当前登录用户信息
当你新登录一个主机,过着管理一个主机,这时候你就需要这些命令来进行查看了: 1. w : Show who is logged on and what they are doing. w [optio ...