Compare commits
8 Commits
feature/根据
...
feature/请购
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70113cb3c5 | ||
|
|
272e424975 | ||
|
|
1fd9900e41 | ||
|
|
a68d6d4d06 | ||
|
|
c630074f4a | ||
|
|
e2ddac4fb0 | ||
|
|
e52ec3982f | ||
|
|
160bd117b7 |
@@ -16,6 +16,7 @@ class PurchaseRequest(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
rule_new_add = fields.Boolean('采购请求为规则创建', default=False, compute='_compute_state', store=True)
|
rule_new_add = fields.Boolean('采购请求为规则创建', default=False, compute='_compute_state', store=True)
|
||||||
|
rule_purchase_to_request = fields.Boolean('采购单根据规则创建坯料采购申请', default=False)
|
||||||
|
|
||||||
@api.depends('state')
|
@api.depends('state')
|
||||||
def _compute_state(self):
|
def _compute_state(self):
|
||||||
|
|||||||
@@ -45,3 +45,14 @@ class StockPicking(models.Model):
|
|||||||
(4, x.id) for x in backorder_ids.move_ids if x.product_id.id in purchase_request_lines.mapped('product_id.id')
|
(4, x.id) for x in backorder_ids.move_ids if x.product_id.id in purchase_request_lines.mapped('product_id.id')
|
||||||
]
|
]
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def _subcontracted_produce(self, subcontract_details):
|
||||||
|
super()._subcontracted_produce(subcontract_details)
|
||||||
|
|
||||||
|
# 判断是否根据规则生成新的采购申请单据,如果生成则修改状态为 approved
|
||||||
|
if self:
|
||||||
|
pr_ids = self.env["purchase.request"].sudo().search(
|
||||||
|
[('origin', 'like', self.name), ('rule_purchase_to_request', '=', True), ('state', '=', 'draft')])
|
||||||
|
if pr_ids:
|
||||||
|
pr_ids.write({'need_validation': False})
|
||||||
|
pr_ids.write({"state": "approved", 'need_validation': True, 'rule_new_add': False})
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class StockRule(models.Model):
|
|||||||
request_data = rule._prepare_purchase_request(
|
request_data = rule._prepare_purchase_request(
|
||||||
procurement.origin, procurement.values
|
procurement.origin, procurement.values
|
||||||
)
|
)
|
||||||
request_data.update({'rule_new_add': True})
|
request_data = self._update_request_data(procurement, request_data)
|
||||||
pr = purchase_request_model.create(request_data)
|
pr = purchase_request_model.create(request_data)
|
||||||
cache[domain] = pr
|
cache[domain] = pr
|
||||||
elif (
|
elif (
|
||||||
@@ -44,6 +44,18 @@ class StockRule(models.Model):
|
|||||||
request_line_data.update({'origin': procurement.origin})
|
request_line_data.update({'origin': procurement.origin})
|
||||||
purchase_request_line_model.create(request_line_data)
|
purchase_request_line_model.create(request_line_data)
|
||||||
|
|
||||||
|
def _update_request_data(self, procurement, request_data):
|
||||||
|
sp = self.env['stock.picking'].sudo().search([('name', '=', procurement.origin)])
|
||||||
|
if len(sp) == 1:
|
||||||
|
po = self.env['purchase.order'].sudo().search(
|
||||||
|
[('name', '=', sp.origin), ('purchase_type', '=', 'outsourcing')])
|
||||||
|
if po:
|
||||||
|
request_data.update({'rule_purchase_to_request': True})
|
||||||
|
else:
|
||||||
|
request_data.update({'rule_new_add': True})
|
||||||
|
return request_data
|
||||||
|
|
||||||
|
|
||||||
def _run_buy(self, procurements):
|
def _run_buy(self, procurements):
|
||||||
# 如果补货组相同,并且产品相同,则合并
|
# 如果补货组相同,并且产品相同,则合并
|
||||||
procurements_dict = defaultdict()
|
procurements_dict = defaultdict()
|
||||||
|
|||||||
@@ -67,6 +67,16 @@
|
|||||||
<field name="part_number"/>
|
<field name="part_number"/>
|
||||||
<field name="part_name" invisible="1"/>
|
<field name="part_name" invisible="1"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
<xpath expr="//tree" position="inside">
|
||||||
|
<header>
|
||||||
|
<button
|
||||||
|
name="%(purchase_request.action_purchase_request_line_make_purchase_order)d"
|
||||||
|
string="创建询价单"
|
||||||
|
type="action"
|
||||||
|
class="btn-primary"
|
||||||
|
/>
|
||||||
|
</header>
|
||||||
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class ResProductMo(models.Model):
|
|||||||
model_volume = fields.Float('模型体积(m³)')
|
model_volume = fields.Float('模型体积(m³)')
|
||||||
model_area = fields.Float('模型表面积(m²)')
|
model_area = fields.Float('模型表面积(m²)')
|
||||||
model_machining_precision = fields.Selection(selection=_get_machining_precision, string='加工精度')
|
model_machining_precision = fields.Selection(selection=_get_machining_precision, string='加工精度')
|
||||||
model_processing_panel = fields.Char('模型加工面板')
|
model_processing_panel = fields.Char('模型加工面板', default='')
|
||||||
model_remark = fields.Char('模型备注说明')
|
model_remark = fields.Char('模型备注说明')
|
||||||
length = fields.Float('长(mm)', digits=(16, 3))
|
length = fields.Float('长(mm)', digits=(16, 3))
|
||||||
width = fields.Float('宽(mm)', digits=(16, 3))
|
width = fields.Float('宽(mm)', digits=(16, 3))
|
||||||
@@ -909,7 +909,7 @@ class ResProductMo(models.Model):
|
|||||||
(item['model_height'] + embryo_redundancy_id.height))) if not blank_bool else (
|
(item['model_height'] + embryo_redundancy_id.height))) if not blank_bool else (
|
||||||
item.get('blank_length') * item.get('blank_width') * item.get('blank_height')),
|
item.get('blank_length') * item.get('blank_width') * item.get('blank_height')),
|
||||||
'product_model_type_id': model_type.id,
|
'product_model_type_id': model_type.id,
|
||||||
'model_processing_panel': item['processing_panel_detail'],
|
'model_processing_panel': item['processing_panel_detail'] if item['processing_panel_detail'] else '',
|
||||||
'model_machining_precision': item['model_machining_precision'],
|
'model_machining_precision': item['model_machining_precision'],
|
||||||
'model_code': item['barcode'],
|
'model_code': item['barcode'],
|
||||||
'length': item['model_long'],
|
'length': item['model_long'],
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ from odoo.addons.sf_base.commons.common import Common
|
|||||||
from odoo.exceptions import UserError
|
from odoo.exceptions import UserError
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from odoo.exceptions import ValidationError
|
from odoo.exceptions import ValidationError
|
||||||
|
from dateutil.relativedelta import relativedelta
|
||||||
|
|
||||||
|
|
||||||
class stockWarehouse(models.Model):
|
class stockWarehouse(models.Model):
|
||||||
@@ -727,6 +728,33 @@ class StockPicking(models.Model):
|
|||||||
production.workorder_ids.write({'back_button_display': False})
|
production.workorder_ids.write({'back_button_display': False})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def _prepare_subcontract_mo_vals(self, subcontract_move, bom):
|
||||||
|
subcontract_move.ensure_one()
|
||||||
|
group = self.env['procurement.group'].sudo().search([('name', '=', self.name)])
|
||||||
|
if not group:
|
||||||
|
group = self.env['procurement.group'].create({
|
||||||
|
'name': self.name,
|
||||||
|
'partner_id': self.partner_id.id,
|
||||||
|
})
|
||||||
|
product = subcontract_move.product_id
|
||||||
|
warehouse = self._get_warehouse(subcontract_move)
|
||||||
|
vals = {
|
||||||
|
'company_id': subcontract_move.company_id.id,
|
||||||
|
'procurement_group_id': group.id,
|
||||||
|
'subcontractor_id': subcontract_move.picking_id.partner_id.commercial_partner_id.id,
|
||||||
|
'picking_ids': [subcontract_move.picking_id.id],
|
||||||
|
'product_id': product.id,
|
||||||
|
'product_uom_id': subcontract_move.product_uom.id,
|
||||||
|
'bom_id': bom.id,
|
||||||
|
'location_src_id': subcontract_move.picking_id.partner_id.with_company(subcontract_move.company_id).property_stock_subcontractor.id,
|
||||||
|
'location_dest_id': subcontract_move.picking_id.partner_id.with_company(subcontract_move.company_id).property_stock_subcontractor.id,
|
||||||
|
'product_qty': subcontract_move.product_uom_qty,
|
||||||
|
'picking_type_id': warehouse.subcontracting_type_id.id,
|
||||||
|
'date_planned_start': subcontract_move.date - relativedelta(days=product.produce_delay)
|
||||||
|
}
|
||||||
|
return vals
|
||||||
|
|
||||||
|
|
||||||
# 创建 外协出库入单
|
# 创建 外协出库入单
|
||||||
def create_outcontract_picking(self, workorders, item, sorted_workorders):
|
def create_outcontract_picking(self, workorders, item, sorted_workorders):
|
||||||
production = workorders[0].production_id
|
production = workorders[0].production_id
|
||||||
|
|||||||
@@ -40,7 +40,8 @@ class StockPicking(models.Model):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
out_quality_checks = self.env['quality.check'].search(
|
out_quality_checks = self.env['quality.check'].search(
|
||||||
[('picking_id', '=', self.id), ('test_type_id.name', '=', '出厂检验报告')])
|
[('picking_id', '=', self.id), ('test_type_id.name', '=', '出厂检验报告'),
|
||||||
|
('quality_state', '=', 'pass')])
|
||||||
# out_quality_checks 可能存在多个
|
# out_quality_checks 可能存在多个
|
||||||
if out_quality_checks:
|
if out_quality_checks:
|
||||||
for out_quality_check in out_quality_checks:
|
for out_quality_check in out_quality_checks:
|
||||||
|
|||||||
Reference in New Issue
Block a user