python - Odoo python,仅当前订单中的产品价格历史
问题描述
我是一个没有开发技能的 odoo 用户。我有一个有问题的自定义模块。我解释了模块的工作原理:我可以通过在新扫描字段中扫描条形码来添加具有自定义价格和数量的采购订单产品行。如果我扫描更多时间相同的条形码,在相同的产品线中增加数量。在新的扫描条形码字段中,在扫描条形码之前,我可以输入新产品价格和扫描条形码后。将添加新价格的产品线。如果我扫描条形码 1 次,将添加数量为 1 的产品,并默认供应商价格。如果我输入新的扫描字段新价格并再次扫描条形码,将更新产品线,增加 1 个数量和新价格。如果没有 priceHistory 功能,如果我再次扫描条形码(不输入新价格),将增加 1 数量和先前更新的新价格,它将替换为默认供应商价格。使用 priceHistory,我可以保持(固定)更新的新价格,如果我再次扫描条形码,新价格将无法替代。问题是:新价格也适用于其他供应商的其他采购订单,而不仅仅是当前采购订单。我需要 priceHistory 仅在当前采购订单中修复价格历史。每个订单都有自己的 priceHistory 数据。目前代码工作,如果产品鞋我应用新价格 1 美元与供应商 A 订购 PO1,何时我将与其他供应商 B、供应商 C、D 等创建新订单(PO2、PO3 等)。何时添加product Shoes,priceHistory 始终适用 1$(供应商 A 的价格 PO1)。这就是问题所在,我只需要在供应商 A 的 PO1 中申请 1 美元,而不是按所有顺序(PO2,PO3,其他供应商)我不是开发人员,请任何人都可以帮助更正代码?并写给我修改做。非常感谢 我可以持有(固定)更新的新价格,如果我再次扫描条形码,新价格将无法替代。问题是:新价格也适用于其他供应商的其他采购订单,而不仅仅是当前采购订单。我需要 priceHistory 仅在当前采购订单中修复价格历史。每个订单都有自己的 priceHistory 数据。目前代码工作,如果产品鞋我应用新价格 1 美元与供应商 A 订购 PO1,何时我将与其他供应商 B、供应商 C、D 等创建新订单(PO2、PO3 等)。何时添加product Shoes,priceHistory 始终适用 1$(供应商 A 的价格 PO1)。这就是问题所在,我只需要在供应商 A 的 PO1 中申请 1 美元,而不是按所有顺序(PO2,PO3,其他供应商)我不是开发人员,请任何人都可以帮助更正代码?并写给我修改做。非常感谢 我可以持有(固定)更新的新价格,如果我再次扫描条形码,新价格将无法替代。问题是:新价格也适用于其他供应商的其他采购订单,而不仅仅是当前采购订单。我需要 priceHistory 仅在当前采购订单中修复价格历史。每个订单都有自己的 priceHistory 数据。目前代码工作,如果产品鞋我应用新价格 1 美元与供应商 A 订购 PO1,何时我将与其他供应商 B、供应商 C、D 等创建新订单(PO2、PO3 等)。何时添加product Shoes,priceHistory 始终适用 1$(供应商 A 的价格 PO1)。这就是问题所在,我只需要在供应商 A 的 PO1 中申请 1 美元,而不是按所有顺序(PO2,PO3,其他供应商)我不是开发人员,请任何人都可以帮助更正代码?并写给我修改做。非常感谢 新价格不能替代。问题是:新价格也适用于其他供应商的其他采购订单,而不仅仅是当前采购订单。我需要 priceHistory 仅在当前采购订单中修复价格历史。每个订单都有自己的 priceHistory 数据。目前代码工作,如果产品鞋我应用新价格 1 美元与供应商 A 订购 PO1,何时我将与其他供应商 B、供应商 C、D 等创建新订单(PO2、PO3 等)。何时添加product Shoes,priceHistory 始终适用 1$(供应商 A 的价格 PO1)。这就是问题所在,我只需要在供应商 A 的 PO1 中申请 1 美元,而不是按所有顺序(PO2,PO3,其他供应商)我不是开发人员,请任何人都可以帮助更正代码?并写给我修改做。非常感谢 新价格不能替代。问题是:新价格也适用于其他供应商的其他采购订单,而不仅仅是当前采购订单。我需要 priceHistory 仅在当前采购订单中修复价格历史。每个订单都有自己的 priceHistory 数据。目前代码工作,如果产品鞋我应用新价格 1 美元与供应商 A 订购 PO1,何时我将与其他供应商 B、供应商 C、D 等创建新订单(PO2、PO3 等)。何时添加product Shoes,priceHistory 始终适用 1$(供应商 A 的价格 PO1)。这就是问题所在,我只需要在供应商 A 的 PO1 中申请 1 美元,而不是按所有顺序(PO2,PO3,其他供应商)我不是开发人员,请任何人都可以帮助更正代码?并写给我修改做。非常感谢 不仅在当前的采购订单中。我需要 priceHistory 仅在当前采购订单中修复价格历史。每个订单都有自己的 priceHistory 数据。目前代码工作,如果产品鞋我应用新价格 1 美元与供应商 A 订购 PO1,何时我将与其他供应商 B、供应商 C、D 等创建新订单(PO2、PO3 等)。何时添加product Shoes,priceHistory 始终适用 1$(供应商 A 的价格 PO1)。这就是问题所在,我只需要在供应商 A 的 PO1 中申请 1 美元,而不是按所有顺序(PO2,PO3,其他供应商)我不是开发人员,请任何人都可以帮助更正代码?并写给我修改做。非常感谢 不仅在当前的采购订单中。我需要 priceHistory 仅在当前采购订单中修复价格历史。每个订单都有自己的 priceHistory 数据。目前代码工作,如果产品鞋我应用新价格 1 美元与供应商 A 订购 PO1,何时我将与其他供应商 B、供应商 C、D 等创建新订单(PO2、PO3 等)。何时添加product Shoes,priceHistory 始终适用 1$(供应商 A 的价格 PO1)。这就是问题所在,我只需要在供应商 A 的 PO1 中申请 1 美元,而不是按所有顺序(PO2,PO3,其他供应商)我不是开发人员,请任何人都可以帮助更正代码?并写给我修改做。非常感谢 当我将与其他供应商 B、供应商 C、D 等创建新订单(PO2、PO3 等)时。当我添加产品鞋时,priceHistory 始终适用 1 美元(供应商 A 的价格 PO1)。这就是问题所在,我只需要在供应商 A 的 PO1 中申请 1 美元,而不是按所有顺序(PO2,PO3,其他供应商)我不是开发人员,请任何人都可以帮助更正代码?并写给我修改做。非常感谢 当我将与其他供应商 B、供应商 C、D 等创建新订单(PO2、PO3 等)时。当我添加产品鞋时,priceHistory 始终适用 1 美元(供应商 A 的价格 PO1)。这就是问题所在,我只需要在供应商 A 的 PO1 中申请 1 美元,而不是按所有顺序(PO2,PO3,其他供应商)我不是开发人员,请任何人都可以帮助更正代码?并写给我修改做。非常感谢
在所有完整代码下方
# -*- coding: utf-8 -*-
from odoo import api, fields, models
from odoo.exceptions import Warning
import math
import dateutil.relativedelta
import datetime
import locale
# added the price history map
priceHistory = {}
class PurchaseOrder(models.Model):
"""Inherit Purchase Order."""
_inherit = "purchase.order"
barcode = fields.Char(string='Barcode', size=50)
def _add_product(self, product, qty, price):
corresponding_line = self.order_line.filtered(lambda r: r.product_id.id == product.id)
supplierinfo = product.mapped('seller_ids')[:1]
if corresponding_line:
corresponding_line[0].product_qty += float(qty)
corresponding_line[0].price_unit = float(price) or supplierinfo.price
else:
self.order_line += self.order_line.new({
'product_id': product.id,
'product_qty': qty,
'date_planned': fields.Datetime.to_string(datetime.datetime.now() - dateutil.relativedelta.relativedelta(months=1)),
'name': product.name,
'product_uom': product.uom_id.id,
'price_unit': float(price) or supplierinfo.price,
'taxes_id': product.supplier_taxes_id,
})
return True
@api.onchange('barcode')
def barcode_scanning(self):
"""Barcode decode."""
if self.barcode:
scan_barcode = self.barcode
barcode = scan_barcode
qty_position = scan_barcode.find('*')
price_position = scan_barcode.find('/')
if price_position > 0:
price = scan_barcode[:price_position].replace(',','.')
barcode = scan_barcode[price_position + 1:]
else:
price = 0
if qty_position > 0:
qty = scan_barcode[price_position + 1:qty_position].replace(',','.')
barcode = scan_barcode[qty_position + 1:]
else:
if float(price) > 0:
qty = 0
else:
qty = 1
#added, to search internal reference
product_id = self.env['product.product'].search([('default_code', '=ilike', barcode)], limit=1)
# product_id = self.env['product.product'].search([('default_code', '=', barcode)])
if barcode and not product_id:
product_id = self.env['product.product'].search([('barcode', '=', barcode)])
if barcode and not product_id:
self.barcode = barcode = None
raise Warning('Barcode sconosciuto')
if product_id:
# get the history price
if price_position == -1:
#if priceHistory.has_key(product_id.id):
if product_id.id in priceHistory.keys():
price = priceHistory[product_id.id]
self._add_product(product_id, qty, price)
self.barcode = barcode = None
#save the product price
priceHistory[product_id.id] = price
return
解决方案
def _add_product(self, product, qty, price):
corresponding_line = self.order_line.filtered(lambda r: r.product_id.id == product.id)
# Get all Vendor List
supplierinfo = product.mapped('seller_ids')
for supp_info in supplierinfo:
# Match with current PO Vendor with assign product Vendor
if self.partner_id.id == supp_info.id:
# Update the Pice
price = supp_info.price
if corresponding_line:
corresponding_line[0].product_qty += float(qty)
corresponding_line[0].price_unit = float(price)
else:
self.order_line += self.order_line.new({
'product_id': product.id,
'product_qty': qty,
'date_planned': fields.Datetime.to_string(datetime.datetime.now() - dateutil.relativedelta.relativedelta(months=1)),
'name': product.name,
'product_uom': product.uom_id.id,
'price_unit': float(price),
'taxes_id': product.supplier_taxes_id,
})
return True
推荐阅读
- java - 如何使用 .bat 文件中的特定 JRE 版本运行 .jar 文件?
- javascript - 如何通过电子执行操作系统粘贴操作
- php - php pdo where 子句
- html - 如果第二个 div 不存在,如何将两个 div 并排放置,第一个填充宽度为 100%?
- node.js - 一次更新猫鼬中的多个文档
- python - 如果我不知道 python os 脚本的名称,如何找到它的输出文件
- google-cloud-platform - 如何根据网络基础设施选择最佳区域 Google Cloud?
- javascript - D3 如何创建一个新的数组形式的多级对象?
- sparql - 限制每个类别的图表数据库响应
- rust - 消耗并分解一个向量?