Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
董杰
/
my_addons
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit c3a273c8
由
董杰
编写于
2021-09-07 14:33:07 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
待确认询价单按bom分开,报价单权限修改
1 个父辈
018e0b7f
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
157 行增加
和
94 行删除
acct_base/models/acc_tools.py
acct_purchase/models/before_purchase.py
acct_purchase/views/before_purchase_view.xml
acct_sale/models/acc_sale.py
acct_sale/views/acc_sale_view.xml
acct_base/models/acc_tools.py
查看文件 @
c3a273c
...
...
@@ -40,7 +40,8 @@ class AccTools(models.Model):
toaddrs
=
toaddrs
# subject = "最新消息"
subject
=
subjects
password
=
"Acc@0113"
# password = "Acc@0113"
password
=
"Acc@011"
# msg = "测试"
msg
=
message
mail_msg
=
MIMEMultipart
()
...
...
acct_purchase/models/before_purchase.py
查看文件 @
c3a273c
...
...
@@ -35,6 +35,7 @@ class BeforePurchase(models.Model):
purchase_order_ids
=
fields
.
Many2many
(
'purchase.order'
,
'before_purchase_rel'
,
'before_id'
,
'purchase_id'
,
string
=
'关联采购单'
,
readonly
=
True
)
purchase_company
=
fields
.
Many2one
(
'acc.company'
,
string
=
'采购公司'
,
required
=
True
)
delivery_address
=
fields
.
Many2one
(
'delivery.address'
,
string
=
'交货地址'
)
mrp_bom_id
=
fields
.
Many2one
(
'mrp.bom'
,
string
=
'关联BOM'
,
readonly
=
True
)
state
=
fields
.
Selection
([(
'draft'
,
'待确认'
),
(
'done'
,
'已确认'
),(
'cancel'
,
'已取消'
)],
'状态'
,
default
=
'draft'
,
track_visibility
=
'onchange'
)
order_line
=
fields
.
One2many
(
'before.purchase.line'
,
'order_id'
,
'Order Lines'
)
recreate_line
=
fields
.
One2many
(
'recreate.purchase.line'
,
'before_id'
,
'recreate Lines'
)
...
...
acct_purchase/views/before_purchase_view.xml
查看文件 @
c3a273c
...
...
@@ -34,6 +34,7 @@
<field
name=
"gen_datetime"
readonly=
"1"
/>
<field
name=
"charge_person"
/>
<field
name=
"purchase_company"
/>
<field
name=
"mrp_bom_id"
/>
</group>
</group>
<notebook
colspan=
"4"
>
...
...
@@ -101,6 +102,7 @@
<field
name=
"name"
/>
<field
name=
"sale_order_id"
/>
<field
name=
"demand_purchase_id"
/>
<field
name=
"mrp_bom_id"
/>
<field
name=
"charge_person"
/>
<field
name=
"gen_datetime"
/>
<field
name=
"is_excipients"
/>
...
...
@@ -138,6 +140,7 @@
<field
name=
"sale_order_id"
/>
<field
name=
"demand_purchase_id"
/>
<field
name=
"charge_person"
/>
<field
name=
"mrp_bom_id"
/>
</search>
</field>
</record>
...
...
acct_sale/models/acc_sale.py
查看文件 @
c3a273c
...
...
@@ -266,18 +266,26 @@ class AccSaleOrder(models.Model):
bom_line
=
self
.
env
[
'sale.bom.line'
]
.
create
(
vals
)
return
True
# @api.multi
# def update_bom_record(self,mrp_eco,sale_bom_line):
# mrp_bom = self.env['mrp.bom'].search([('product_tmpl_id', '=', mrp_eco.product_tmpl_id),('active', '=', True)])
# sale_bom_line.write({'mrp_bom_id':mrp_bom.id})
@api.multi
def
check_eco_products
(
self
):
res_line
=
[]
mrp_ecos
=
[]
# add_ids = []
remove_ids
=
[]
# res_line = []
# mrp_ecos = []
# remove_ids = []
if
self
.
bom_line
:
for
bom
in
self
.
bom_line
:
res_line
=
[]
# mrp_ecos = []
remove_ids
=
[]
mrp_eco
=
self
.
env
[
'mrp.eco'
]
.
search
([(
'bom_id'
,
'='
,
bom
.
mrp_bom_id
.
id
),(
'state'
,
'='
,
'done'
)])
if
mrp_eco
:
mrp_eco
.
write
({
'is_use'
:
'on'
})
mrp_ecos
.
append
(
mrp_eco
.
id
)
#
mrp_ecos.append(mrp_eco.id)
for
change
in
mrp_eco
.
bom_change_ids
:
if
change
.
change_type
==
'add'
:
# add_ids.append(change.product_id.id)
...
...
@@ -325,23 +333,25 @@ class AccSaleOrder(models.Model):
remove_ids
.
append
(
remove_vals
)
# if not res_line[0]:
# raise ValidationError('没有需要增补的物料!!!')
self
.
add_new_bp
(
res_line
,
mrp_eco
,
remove_ids
)
mrp_bom
=
self
.
env
[
'mrp.bom'
]
.
search
([(
'product_tmpl_id'
,
'='
,
mrp_eco
.
product_tmpl_id
.
id
),(
'active'
,
'='
,
True
)])
bom
.
write
({
'mrp_bom_id'
:
mrp_bom
.
id
})
if
not
self
.
bom_line
:
raise
ValidationError
(
'因之前版本(6.28号之前的单据)未做bom记录,无法进行自动增补!!!'
)
# products["add"] = res_line
# products["remove"] = remove_ids
return
res_line
,
remove_ids
,
mrp_ecos
# return res_line,remove_ids,mrp_ecos
return
True
@api.multi
def
add_new_bom
(
self
):
before_purchase
=
self
.
env
[
'before.purchase'
]
.
search
([(
'id'
,
'='
,
self
.
before_purchase_id
.
id
)])
res_line
,
remove_ids
,
mrp_ecos
=
self
.
check_eco_products
()
def
add_new_bp
(
self
,
res_line
,
mrp_eco
,
remove_ids
):
if
remove_ids
:
remove_products
=
[]
for
p
in
remove_ids
:
po_name
=
self
.
get_poname
(
p
)
p_str
=
'物料名称:'
+
p
[
'product_id'
]
+
' '
+
'型号:'
+
p
[
'product_model'
]
+
' '
+
'品牌:'
+
p
[
'brand'
]
+
' '
+
'编码:'
+
p
[
'acc_code'
]
+
' '
+
'移除数量:'
+
str
(
p
[
'qty'
])
+
'采购单号:'
+
po_name
+
'<br>'
p_str
=
'物料名称:'
+
p
[
'product_id'
]
+
' '
+
'型号:'
+
p
[
'product_model'
]
+
' '
+
'品牌:'
+
p
[
'brand'
]
+
' '
+
'编码:'
+
p
[
'acc_code'
]
+
' '
+
'移除数量:'
+
str
(
p
[
'qty'
])
+
'采购单号:'
+
po_name
+
'
变更单号'
+
mrp_eco
.
name
+
'
<br>'
remove_products
.
append
(
p_str
)
toaddrs
=
[
'luna.zhang@neotel-technology.com'
,
'xue.zhang@neotel.tech'
,
'fiona.wu@neotel-technology.com'
,
'tina.dong@neotel.tech'
]
toaddrs
.
append
(
self
.
purchase_charge_person
.
login
)
...
...
@@ -351,45 +361,102 @@ class AccSaleOrder(models.Model):
self
.
env
[
'acc.tools'
]
.
send_report_email
(
subjects
,
message
,
toaddrs
)
# self.check_res(res_line)
if
res_line
:
if
before_purchase
and
before_purchase
.
state
==
'draft'
:
raise
ValidationError
(
'该销售订单所关联待确认询价单尚未完成,请完成后再进行物料清单变动操作'
)
if
before_purchase
and
before_purchase
.
state
==
'done'
:
new_res_line
=
[]
for
line
in
res_line
:
new_line_vals
=
{
'product_id'
:
line
[
'product_id'
],
'product_model'
:
line
[
'product_model'
],
'qty'
:
line
[
'qty'
],
'acc_purchase_price'
:
line
[
'acc_purchase_price'
],
'brand'
:
line
[
'brand'
],
'acc_code'
:
line
[
'acc_code'
],
'partner_code'
:
line
[
'partner_code'
],
}
new_res_line
.
append
((
0
,
0
,
new_line_vals
))
vals
=
{
'sale_order_id'
:
self
.
id
,
'purchase_company'
:
self
.
sale_company
.
id
,
'charge_person'
:
self
.
purchase_charge_person
.
id
,
'delivery_address'
:
self
.
delivery_address
.
id
,
'order_line'
:
new_res_line
# if before_purchase and before_purchase.state == 'draft':
# raise ValidationError('该销售订单所关联待确认询价单尚未完成,请完成后再进行物料清单变动操作')
# if before_purchase and before_purchase.state == 'done':
new_res_line
=
[]
for
line
in
res_line
:
new_line_vals
=
{
'product_id'
:
line
[
'product_id'
],
'product_model'
:
line
[
'product_model'
],
'qty'
:
line
[
'qty'
],
'acc_purchase_price'
:
line
[
'acc_purchase_price'
],
'brand'
:
line
[
'brand'
],
'acc_code'
:
line
[
'acc_code'
],
'partner_code'
:
line
[
'partner_code'
],
}
bp_obj
=
self
.
env
[
'before.purchase'
]
.
create
(
vals
)
toaddrs
=
[
'luna.zhang@neotel-technology.com'
,
'xue.zhang@neotel.tech'
]
# toaddrs.append(bp_obj.charge_person.login)
subjects
=
"待确认询价单{}"
.
format
(
bp_obj
.
name
)
message
=
"待确认询价单{}已生成,请及时处理"
.
format
(
bp_obj
.
name
)
self
.
env
[
'acc.tools'
]
.
send_report_email
(
subjects
,
message
,
toaddrs
)
if
mrp_ecos
:
for
ecoid
in
mrp_ecos
:
eco_obj
=
self
.
env
[
'mrp.eco'
]
.
browse
(
ecoid
)
eco_obj
.
write
({
'before_purchase_id'
:
bp_obj
.
id
})
# for remove_id in remove_ids:
# 删除的东西怎么处理?
self
.
change_bom_record
()
new_res_line
.
append
((
0
,
0
,
new_line_vals
))
mrp_bom
=
self
.
env
[
'mrp.bom'
]
.
search
([(
'product_tmpl_id'
,
'='
,
mrp_eco
.
product_tmpl_id
.
id
),(
'active'
,
'='
,
True
)])
vals
=
{
'sale_order_id'
:
self
.
id
,
'mrp_bom_id'
:
mrp_bom
.
id
,
'purchase_company'
:
self
.
sale_company
.
id
,
'charge_person'
:
self
.
purchase_charge_person
.
id
,
'delivery_address'
:
self
.
delivery_address
.
id
,
'order_line'
:
new_res_line
}
bp_obj
=
self
.
env
[
'before.purchase'
]
.
create
(
vals
)
toaddrs
=
[
'luna.zhang@neotel-technology.com'
,
'xue.zhang@neotel.tech'
]
# toaddrs.append(bp_obj.charge_person.login)
subjects
=
"待确认询价单{}"
.
format
(
bp_obj
.
name
)
message
=
"待确认询价单{}已生成,请及时处理"
.
format
(
bp_obj
.
name
)
self
.
env
[
'acc.tools'
]
.
send_report_email
(
subjects
,
message
,
toaddrs
)
# if mrp_ecos:
# for ecoid in mrp_ecos:
# eco_obj = self.env['mrp.eco'].browse(ecoid)
# eco_obj.write({'before_purchase_id':bp_obj.id})
if
mrp_eco
:
eco_obj
=
self
.
env
[
'mrp.eco'
]
.
browse
(
mrp_eco
.
id
)
eco_obj
.
write
({
'before_purchase_id'
:
bp_obj
.
id
})
# self.update_bom_record(mrp_eco,bom)
# self.change_bom_record()
# self.env.user.notify_success(message='变更成功')
@api.multi
def
add_new_bom
(
self
):
before_purchase
=
self
.
env
[
'before.purchase'
]
.
search
([(
'id'
,
'='
,
self
.
before_purchase_id
.
id
)])
self
.
check_eco_products
()
# if remove_ids:
# remove_products = []
# for p in remove_ids:
# po_name = self.get_poname(p)
# p_str = '物料名称:' + p['product_id'] + ' ' + '型号:' + p['product_model'] + ' ' + '品牌:' + p['brand'] + ' ' + '编码:' + p['acc_code'] + ' ' + '移除数量:' + str(p['qty']) + '采购单号:' + po_name + '<br>'
# remove_products.append(p_str)
# toaddrs = ['luna.zhang@neotel-technology.com','xue.zhang@neotel.tech','fiona.wu@neotel-technology.com','tina.dong@neotel.tech']
# toaddrs.append(self.purchase_charge_person.login)
# # toaddrs = ['jie.dong@acctronics.cn']
# subjects = "源单据{}所申请物料清单有变动,请及时处理".format(self.name)
# message = "源单据{}所申请物料清单,有以下物料从物料清单中移除<br><br>{}".format(self.name,remove_products)
# self.env['acc.tools'].send_report_email(subjects,message,toaddrs)
# if res_line:
# if before_purchase and before_purchase.state == 'draft':
# raise ValidationError('该销售订单所关联待确认询价单尚未完成,请完成后再进行物料清单变动操作')
# if before_purchase and before_purchase.state == 'done':
# new_res_line = []
# for line in res_line:
# new_line_vals = {
# 'product_id':line['product_id'],
# 'product_model':line['product_model'],
# 'qty':line['qty'],
# 'acc_purchase_price':line['acc_purchase_price'],
# 'brand':line['brand'],
# 'acc_code':line['acc_code'],
# 'partner_code':line['partner_code'],
# }
# new_res_line.append((0,0,new_line_vals))
# vals = {
# 'sale_order_id':self.id,
# 'purchase_company':self.sale_company.id,
# 'charge_person':self.purchase_charge_person.id,
# 'delivery_address':self.delivery_address.id,
# 'order_line':new_res_line
# }
# bp_obj = self.env['before.purchase'].create(vals)
# toaddrs = ['luna.zhang@neotel-technology.com','xue.zhang@neotel.tech']
# # toaddrs.append(bp_obj.charge_person.login)
# subjects = "待确认询价单{}".format(bp_obj.name)
# message = "待确认询价单{}已生成,请及时处理".format(bp_obj.name)
# self.env['acc.tools'].send_report_email(subjects,message,toaddrs)
# if mrp_ecos:
# for ecoid in mrp_ecos:
# eco_obj = self.env['mrp.eco'].browse(ecoid)
# eco_obj.write({'before_purchase_id':bp_obj.id})
# self.change_bom_record()
now_time
=
fields
.
Datetime
.
now
()
self
.
write
({
'bomupdate_time'
:
now_time
,
'wait_change'
:
'yes'
})
self
.
env
.
user
.
notify_success
(
message
=
'变更成功'
)
# self.write({'before_purchase_id':bp_obj.id})
#
#
@api.multi
def
check_res
(
self
,
res_line
):
line
=
res_line
...
...
@@ -410,32 +477,6 @@ class AccSaleOrder(models.Model):
taget_poname
=
'无'
return
taget_poname
# @api.multi
# def _fresh_now_qty(self):
# excipients = self.env['excipients.product'].search([('is_active', '=', True)])
# for line in excipients:
# p_id = line.product_id.id
# location_id = line.location_id.id
# cr = self.env.cr
# # location_ids = []
# now_qty_sql = """ SELECT
# SUM (quantity-reserved_quantity) AS theory_qty
# FROM
# stock_quant
# WHERE
# location_id = %s
# AND product_id = %s """%(location_id, p_id)
# # now_qty = cr.execute(now_qty_sql, (location_id,p_id))
# cr.execute(now_qty_sql)
# result = request.cr.dictfetchall()
# if result[0]['theory_qty']:
# now_qty = result[0]['theory_qty']
# else:
# now_qty = 0.00
# onway_qty = line.onway_qty()
# line.write({'now_qty':now_qty,'purchase_qty':onway_qty})
# return True
...
...
@@ -476,8 +517,10 @@ class AccSaleOrder(models.Model):
@api.multi
def
create_before_po
(
self
):
res_line
=
[]
# res_line = []
regular_line
=
[]
for
line
in
self
.
order_line
:
res_line
=
[]
mrp_bom
=
self
.
check_bom
(
line
)
if
mrp_bom
:
qty
=
line
.
product_uom_qty
...
...
@@ -494,24 +537,39 @@ class AccSaleOrder(models.Model):
'acc_code'
:
line
.
product_id
.
product_tmpl_id
.
acc_code
,
'partner_code'
:
line
.
product_id
.
product_tmpl_id
.
partner_code
}
res_line
.
append
((
0
,
0
,
line_vals
))
vals
=
{
'sale_order_id'
:
self
.
id
,
'charge_person'
:
self
.
purchase_charge_person
.
id
,
'delivery_address'
:
self
.
delivery_address
.
id
,
'purchase_company'
:
self
.
sale_company
.
id
,
'order_line'
:
res_line
}
bp_obj
=
self
.
env
[
'before.purchase'
]
.
create
(
vals
)
self
.
write
({
'before_purchase_id'
:
bp_obj
.
id
})
# toaddrs = ['jie.dong@acctronics.cn','cissy.shen@acctronics.cn','yuanyuan.lu@acctronics.cn']
# toaddrs = []
# toaddrs.append(bp_obj.charge_person.login)
toaddrs
=
[]
toaddrs
.
append
(
bp_obj
.
charge_person
.
login
)
subjects
=
"待确认询价单{}"
.
format
(
bp_obj
.
name
)
message
=
"待确认询价单{}已生成,请及时处理"
.
format
(
bp_obj
.
name
)
self
.
env
[
'acc.tools'
]
.
send_report_email
(
subjects
,
message
,
toaddrs
)
regular_line
.
append
((
0
,
0
,
line_vals
))
if
res_line
:
vals
=
{
'sale_order_id'
:
self
.
id
,
'mrp_bom_id'
:
mrp_bom
.
id
,
'charge_person'
:
self
.
purchase_charge_person
.
id
,
'delivery_address'
:
self
.
delivery_address
.
id
,
'purchase_company'
:
self
.
sale_company
.
id
,
'order_line'
:
res_line
}
bp_obj
=
self
.
env
[
'before.purchase'
]
.
create
(
vals
)
self
.
write
({
'before_purchase_id'
:
bp_obj
.
id
})
toaddrs
=
[]
toaddrs
.
append
(
bp_obj
.
charge_person
.
login
)
subjects
=
"待确认询价单{}"
.
format
(
bp_obj
.
name
)
message
=
"待确认询价单{}已生成,请及时处理"
.
format
(
bp_obj
.
name
)
self
.
env
[
'acc.tools'
]
.
send_report_email
(
subjects
,
message
,
toaddrs
)
if
regular_line
:
vals
=
{
'sale_order_id'
:
self
.
id
,
# 'mrp_bom_id':mrp_bom.id,
'charge_person'
:
self
.
purchase_charge_person
.
id
,
'delivery_address'
:
self
.
delivery_address
.
id
,
'purchase_company'
:
self
.
sale_company
.
id
,
'order_line'
:
regular_line
}
bp_obj
=
self
.
env
[
'before.purchase'
]
.
create
(
vals
)
self
.
write
({
'before_purchase_id'
:
bp_obj
.
id
})
toaddrs
=
[]
toaddrs
.
append
(
bp_obj
.
charge_person
.
login
)
subjects
=
"待确认询价单{}"
.
format
(
bp_obj
.
name
)
message
=
"待确认询价单{}已生成,请及时处理"
.
format
(
bp_obj
.
name
)
self
.
env
[
'acc.tools'
]
.
send_report_email
(
subjects
,
message
,
toaddrs
)
return
True
# def log_field(self):
...
...
acct_sale/views/acc_sale_view.xml
查看文件 @
c3a273c
...
...
@@ -365,7 +365,7 @@
</tree>
</field>
<group
class=
"oe_subtotal_footer oe_right"
groups=
"purchase.group_purchase_user"
>
<group
class=
"oe_subtotal_footer oe_right"
>
<field
name=
"amount_untaxed"
widget=
"monetary"
options=
"{'currency_field': 'currency_id'}"
/>
<field
name=
"amount_tax"
widget=
"monetary"
options=
"{'currency_field': 'currency_id'}"
/>
<field
name=
"discount"
widget=
"monetary"
options=
"{'currency_field': 'currency_id'}"
/>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论