TEL:400-8793-956
当前位置:程序、服务器

覆盖odoo V8中的属性字段

提问者: 近期获赞: 浏览人数: 发布时间:2020-12-26 13:37:00

 问:大家好,我被困在覆盖属性字段中,实际上,我的问题是,当成本计算方法从自定义字段设置为平均值时,我想计算成本汇率(standard_price),而不是从采购订单中的line.price.unit(price)计算。在此先感谢您的帮助。

 
 
答:这正是我要创建的另一个解决方案...希望能对其他人有所帮助...在此代码中,当成本计算方法设置为购买时的其他字段的平均价格(如checke_tax)时,我计算了“ standard_price”(也称为成本价)订购...
 
采购订单类(osv.osv):
    _inherit ='购买顺序'
def _prepare_order_line_move(自己,cr,uid,order,order_line,picking_id,group_id,context = None):
        '''准备来自PO行的库存移动数据。该函数返回准备在stock中使用的字典列表.move的create()'''
        product_uom = self.pool.get('product.uom')
        checke_tax = order_line.checke_tax
        如果order_line.product_uom.id!= order_line.product_id.uom_id.id:
            checke_tax * = order_line.product_uom.factor / order_line.product_id.uom_id.factor
        如果order.currency_id.id!= order.company_id.currency_id.id:
            #我们不对price_unit进行四舍五入,因为我们可能希望以比货币允许的位数更多的位数来存储标准价格
            checke_tax = self.pool.get('res.currency')。compute(cr,uid,order.currency_id.id,order.company_id.currency_id.id,checke_tax,round = False,context = context)
        res = []
        move_template = {
            '名称':order_line.name或'',
            'product_id':order_line.product_id.id,
            'product_uom':order_line.product_uom.id,
            'product_uos':order_line.product_uom.id,
            “日期”:order.date_order,
            'date_expected':fields.date.date_to_datetime(自身,cr,uid,order_line.date_planned,上下文),
            'location_id':order.partner_id.property_stock_supplier.id,
            'location_dest_id':order.location_id.id,
            'picking_id':picking_id,
            'partner_id':order.dest_address_id.id,
            'move_dest_id':错误,
            '状态':'草稿',
            “ purchase_line_id”:order_line.id,
            'company_id':order.company_id.id,
            'checke_tax':checke_tax,
            'picking_type_id':order.picking_type_id.id,
            'group_id':group_id,
            'procurement_id':错误,
            'origin':order.name,
            'route_ids':order.picking_type_id.warehouse_id和[[6,0,[x.id for order.picking_type_id.warehouse_id.route_ids])]或[],
            'warehouse_id':order.picking_type_id.warehouse_id.id,
            'invoice_state':order.invoice_method =='picking'和'2binvoiced'或'none',
        }
diff_quantity = order_line.product_qty
        用于在order_line.procurement_ids中进行采购:
            sourcing_qty = product_uom._compute_qty(cr,uid,purchase.product_uom.id,purchase.product_qty,to_uom_id = order_line.product_uom.id)
            tmp = move_template.copy()
            tmp.update({
                'product_uom_qty':min(采购数量,差异数量),
                'product_uos_qty':min(采购数量,差异数量),
                'move_dest_id':采购.move_dest_id.id,#move目的地与采购目的地相同
                'group_id':purchase.group_id.id或group_id,#move组与采购组相同(如果存在),否则请使用另一个组
                'procurement_id':采购编号,
                'invoice_state':采购.rule_id.invoice_state或(procurement.location_id和purchase.location_id.usage =='customer'和采购.invoice_state =='2binvoiced'和'2binvoiced')或(order.invoice_method =='picking'和'2binvoiced')或'none',#dropship案例取自销售
                'propagate':采购.rule_id.propagate,
            })
            diff_quantity-= min(采购数量,diff_quantity)
            res.append(tmp)
        #如果订单行的数量大于采购的数量(手动更改或最小数量),则
        #将未来库存移动分成两部分,因为遵循的路线可能不同。
        如果float_compare(diff_quantity,0.0,precision_rounding = order_line.product_uom.rounding)> 0:
            move_template ['product_uom_qty'] = diff_quantity
            move_template ['product_uos_qty'] = diff_quantity
            res.append(move_template)
        返回资源
    _columns = {
    'order_line':fields.one2many('purchase.order.line','order_id','Order Lines,
                                      States = {'approved':[('readonly',True)],
                                              'done':[('readonly',True)]},
                                              copy = True),
    }
 
 
从openerp.osv导入字段,osv
从openerp.tools.translate导入_
从openerp导入SUPERUSER_ID,api
导入日志
_logger = logging.getLogger(__ name__)
stock_move类(osv.osv):
    _inherit =“ stock.move”
    def action_done(self,cr,uid,ids,context = None):
        self.product_price_update_before_done(cr,uid,id,context = context)
        res =超级(stock_move,self).action_done(cr,uid,ids,context = context)
        返回资源
def product_price_update_before_done(self,cr,uid,ids,context = None):
        product_obj = self.pool.get('product.product')
        tmpl_dict = {}
        对于self.browse(cr,uid,ids,context = context)的移动:
            如果产品cost_method为“平均”,则#adapt传入移动的标准价格
            如果(move.location_id.usage =='供应商')和(move.product_id.cost_method =='平均'):
                产品= move.product_id
                prod_tmpl_id = move.product_id.product_tmpl_id.id
                qty_available = move.product_id.product_tmpl_id.qty_available
                如果tmpl_dict.get(prod_tmpl_id):
                    product_avail =可用数量+ tmpl_dict [prod_tmpl_id]
                其他:
                    tmpl_dict [prod_tmpl_id] = 0
                    product_avail =数量可用
                如果product_avail <= 0:
                    new_std_price = move.checke_tax
                其他:
                    #获取标准价格
                    数量单位= product.standard_price
                    new_std_price =((数量单位* product_avail)+(move.checke_tax * move.product_qty))/(product_avail + move.product_qty)
                tmpl_dict [prod_tmpl_id] + = move.product_qty
                #将标准价格写为SUPERUSER_ID,因为仓库经理可能无权写产品
                ctx = dict(上下文或{},force_company = move.company_id.id)
                product_obj.write(cr,SUPERUSER_ID,[product.id],{'standard_price':new_std_price},context = ctx)
    _columns = {
    'checke_tax':fields.float('Unit Price',help =“用于记录用户在领料确认期间设置的产品成本的技术字段(当使用的成本核算方法为“平均价格”或“实际”时)。给定值以公司货币和产品单位表示。”),#,因为它是技术领域,所以我们故意不提供digits属性
  }
上一篇: 地图有争议地刷新
下一篇: 如何在URL中传递2个或更多变量