#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里面 循环明细对比 相同人员明细,生成同一订单里面的更多相关文章

  1. Linq DataTable Group By 分组显示人员明细

    实现功能:       多个字段分组源码样例: 原始数据: 分组后的输出结果: 源代码: public static void PrintPersons() { //准备数据 DataTable dt ...

  2. Python的循环

    循环是一个结构,导致一个程序要重复一定的次数 条件循环也一样,当条件变为假,循环结束 For循环 在python for循环遍历序列,如一个列表或一个字符. for循环语法:   ——for iter ...

  3. python基础-循环

    循环 循环 要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 6 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+10000,直 ...

  4. python的循环和选择

    一.python的选择结构: python的选择结构有两种选择结构一种是单选择(if...else)另一种则是多选择结构(if ...elif...elif) 下面用代码来实现: 1.if....el ...

  5. 在oj中Python的循环输入问题解决

    在oj中Python的循环输入问题解决 在makefile中定义逗号字符串和空格字符串 在linux服务器上面部署javaweb项目jar包 数据结构与算法之栈(Java与Python实现) 在oj中 ...

  6. python 之 循环语句

    python提供了for循环和while循环以及嵌套循环(在python中没有do..while循环) while 循环语法: while 判断条件: 执行语句...... 实际案例: numbers ...

  7. Python while 循环使用实例

    while循环是在Python中的循环结构之一. while循环继续,直到表达式变为假.表达的是一个逻辑表达式,必须返回一个true或false值,本文章向码农介绍Python while 循环使用方 ...

  8. Python学习-7.Python的循环语句-for语句

    Python中循环可以使用for语句来实现 list = ['Tom','Lucy','Mary'] for name in list: print(name) 则将会依次输出Tom Lucy Mar ...

  9. Python for 循环语句

    Python for 循环语句 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串. 语法: for循环的语法格式如下: for iterating_var in sequenc ...

随机推荐

  1. 2017-12-22 日语编程语言"抚子"-第三版实现初探

    前文日语编程语言"抚子" - 第三版特色初探仅对语言的语法进行了初步了解. 之前的语言原型实现尝试(如编程语言试验之Antlr4+JavaScript实现"圈4" ...

  2. Android深入四大组件(八)广播的注册、发送和接收过程

    前言 我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册.接收和发送过程.建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分, ...

  3. 框架模式MVC在安卓中的实践

    我们采用ListView来演示我们的MVC模式,目录结构: 实体类:包含了书的名字和图片信息 public class Book { //书名 private String name; //书的图片 ...

  4. Python笔记(十四):操作excel openpyxl模块

    (一)  常遇到的情况 就我自己来说,常遇到的情况可能就下面几种: 读取excel整个sheet页的数据. 读取指定行.列的数据 往一个空白的excel文档写数据 往一个已经有数据的excel文档追加 ...

  5. BootStrap DateTimePicker的使用

    使用方法 1. 添加资源 2. 编写代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Conte ...

  6. 简单易懂的程序语言入门小册子(1):基于文本替换的解释器,lambda演算

    最近比较闲,打算整理一下之前学习的关于程序语言的知识.主要的内容其实就是一边设计程序语言一边写解释器实现它.这些知识基本上来自Programming Languages and Lambda Calc ...

  7. MySQL8.0——Resource Group(资源组)

    资源组介绍 简介 MySQL是单进程多线程的程序,MySQL线程包括后台线程(Master Thread.IO Thread.Purge Thread等),以及用户线程.在8.0之前,所有线程的优先级 ...

  8. V4L2 driver -整体架构

    我的uvc开源地址:gitee-uvc 字符设备驱动程序核心:V4L2本身就是一个字符设备,具有字符设备所有的特性,暴露接口给用户空间. V4L2 驱动核心:主要是构建一个内核中标准视频设备驱动的框架 ...

  9. Linux下内存查看命令

    在Linux下面,我们常用top命令来查看系统进程,top也能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. Linux下内存查看命令free详解: 在Linux下查看内存我们 ...

  10. Linux下如何杀死终端

    1.首先是使用who命令查看当前有多少个终端登陆了Linux系统 [root@:vg_adn_tidbCkhsTest /usr/local/redis/bin]#who mobdev pts : ( ...