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 ...
随机推荐
- CloudSim源代码学习——云数据中心(Datacenter)
package org.cloudbus.cloudsim; import java.text.DecimalFormat;//十进制 import java.util.ArrayList; impo ...
- Android View 绘制流程
Android 中 Activity 是作为应用程序的载体存在,代表着一个完整的用户界面,提供了一个窗口来绘制各种视图,当 Activity 启动时,我们会通过 setContentView 方法来设 ...
- 自定义控件详解(四):Paint 画笔路径效果
Paint 画笔 ,即用来绘制图形的"笔" 前面我们知道了Paint的一些基本用法: paint.setAntiAlias(true);//抗锯齿功能 paint.setColo ...
- 编码最佳实践——Liskov替换原则
Liskov替换原则(Liskov Substitution Principle)是一组用于创建继承层次结构的指导原则.按照Liskov替换原则创建的继承层次结构中,客户端代码能够放心的使用它的任意类 ...
- npm与yarn常用命令对比
最近在用yarn,但是命令老是记不住,在此记录,方便日后翻看 图片截取自:http://yuanhehe.cn/2017/06/11/npm-%E4%B8%8E-Yarn-%E5%B8%B8%E7%9 ...
- Spring boot 之 dubbo 无xml 简单入门
Dubbo简介 Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层.图中左边淡蓝背景的为服务消费方使用的接口,右边淡 ...
- January 10th, 2018 Week 02nd Wednesday
No need to have a reason to love you. Anything can be a reason not to love you. 喜欢你,不需要什么理由:不喜欢你,什么都 ...
- 一道题引发的self和super
这个是那道题目,让写出输出的结果: 刚看到这一道题目的时候我的第一反应就是输出Son Father.但是输出的结果是Son Son. 下面是解析: 我首先建立了两个类,一个Fathe ...
- VRS——备忘
1.所有版本VRS,注释掉m_ChisauarePRN参数 2.注释掉所有的MODULE_GNSSMonitor_ID,暂时用不到.但是会造成basestation崩掉. n.RegisterStat ...
- Java设计模式之四 ----- 适配器模式和桥接模式
前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式.本篇则来学习下结构型模式的适配器模式和桥接模式. 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型 ...