Compare commits
5 Commits
release/re
...
feature/采购
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94bcfc0543 | ||
|
|
b4d31c7c4b | ||
|
|
95716c2e3e | ||
|
|
bf4add6b78 | ||
|
|
21d052e222 |
@@ -17,11 +17,6 @@ class JikimoPrinting(models.AbstractModel):
|
|||||||
"""
|
"""
|
||||||
打印二维码
|
打印二维码
|
||||||
"""
|
"""
|
||||||
printer = self.env['printing.printer'].get_default()
|
|
||||||
if not printer:
|
|
||||||
_logger.error("未找到默认打印机")
|
|
||||||
return False
|
|
||||||
|
|
||||||
# 生成二维码
|
# 生成二维码
|
||||||
qr = qrcode.QRCode(version=1, box_size=10, border=5)
|
qr = qrcode.QRCode(version=1, box_size=10, border=5)
|
||||||
qr.add_data(data)
|
qr.add_data(data)
|
||||||
@@ -50,23 +45,19 @@ class JikimoPrinting(models.AbstractModel):
|
|||||||
|
|
||||||
# 获取PDF内容并打印
|
# 获取PDF内容并打印
|
||||||
pdf_content = pdf_buffer.getvalue()
|
pdf_content = pdf_buffer.getvalue()
|
||||||
# _logger.info(f"打印内容: {pdf_content}")
|
printer = self.env['printing.printer'].get_default()
|
||||||
|
_logger.info(f"打印内容: {pdf_content}")
|
||||||
printer.print_document(report=None, content=pdf_content, doc_format='pdf')
|
printer.print_document(report=None, content=pdf_content, doc_format='pdf')
|
||||||
|
|
||||||
# 清理资源
|
# 清理资源
|
||||||
pdf_buffer.close()
|
pdf_buffer.close()
|
||||||
temp_image.close()
|
temp_image.close()
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def print_pdf(self, pdf_data):
|
def print_pdf(self, pdf_data):
|
||||||
"""
|
"""
|
||||||
打印PDF
|
打印PDF
|
||||||
"""
|
"""
|
||||||
printer = self.env['printing.printer'].get_default()
|
_logger.info("PDF打印开始")
|
||||||
if not printer:
|
|
||||||
_logger.error("未找到默认打印机")
|
|
||||||
return False
|
|
||||||
|
|
||||||
pdf_data_str = pdf_data.decode('ascii', errors='ignore')
|
pdf_data_str = pdf_data.decode('ascii', errors='ignore')
|
||||||
decoded_data = base64.b64decode(pdf_data_str)
|
decoded_data = base64.b64decode(pdf_data_str)
|
||||||
@@ -78,10 +69,15 @@ class JikimoPrinting(models.AbstractModel):
|
|||||||
|
|
||||||
# 获取PDF内容
|
# 获取PDF内容
|
||||||
pdf_content = pdf_buffer.getvalue()
|
pdf_content = pdf_buffer.getvalue()
|
||||||
|
_logger.info(f"处理后的内容前20字节: {pdf_content[:20]}")
|
||||||
|
|
||||||
|
# 获取默认打印机
|
||||||
|
printer = self.env['printing.printer'].get_default()
|
||||||
|
if not printer:
|
||||||
|
_logger.error("未找到默认打印机")
|
||||||
|
return
|
||||||
|
|
||||||
printer.print_document(report=None, content=pdf_content, doc_format='pdf')
|
printer.print_document(report=None, content=pdf_content, doc_format='pdf')
|
||||||
# 清理资源
|
# 清理资源
|
||||||
pdf_buffer.close()
|
pdf_buffer.close()
|
||||||
|
_logger.info("PDF打印结束")
|
||||||
_logger.info("成功打印PDF")
|
|
||||||
return True
|
|
||||||
@@ -21,6 +21,8 @@ class MrpWorkorder(models.Model):
|
|||||||
# 执行打印
|
# 执行打印
|
||||||
self.env['jikimo.printing'].print_pdf(pdf_data)
|
self.env['jikimo.printing'].print_pdf(pdf_data)
|
||||||
wo.production_id.product_id.is_print_program = True
|
wo.production_id.product_id.is_print_program = True
|
||||||
|
_logger.info(f"工单 {wo.name} 的PDF已成功打印")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
_logger.error(f"工单 {wo.name} 的PDF打印失败: {str(e)}")
|
_logger.error(f"工单 {wo.name} 的PDF打印失败: {str(e)}")
|
||||||
|
|
||||||
|
|||||||
@@ -12,12 +12,13 @@
|
|||||||
'views/mrp_production.xml',
|
'views/mrp_production.xml',
|
||||||
'views/purchase_request_view.xml',
|
'views/purchase_request_view.xml',
|
||||||
'wizard/purchase_request_line_make_purchase_order_view.xml',
|
'wizard/purchase_request_line_make_purchase_order_view.xml',
|
||||||
|
'views/purchase_request_line_view.xml',
|
||||||
],
|
],
|
||||||
# 'assets': {
|
'assets': {
|
||||||
# 'web.assets_backend': [
|
'web.assets_backend': [
|
||||||
# 'jikimo_purchase_request/static/src/**/*'
|
'jikimo_purchase_request/static/src/**/*'
|
||||||
# ],
|
],
|
||||||
# },
|
},
|
||||||
'application': True,
|
'application': True,
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
|
|||||||
@@ -1043,7 +1043,7 @@ msgstr "询价单"
|
|||||||
#. module: purchase_request
|
#. module: purchase_request
|
||||||
#: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__purchased_qty
|
#: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__purchased_qty
|
||||||
msgid "RFQ/PO Qty"
|
msgid "RFQ/PO Qty"
|
||||||
msgstr ""
|
msgstr "已订购数"
|
||||||
|
|
||||||
#. module: purchase_request
|
#. module: purchase_request
|
||||||
#. odoo-python
|
#. odoo-python
|
||||||
|
|||||||
@@ -47,6 +47,19 @@ class PurchaseRequestLine(models.Model):
|
|||||||
('outsourcing', "委外加工"),
|
('outsourcing', "委外加工"),
|
||||||
], string='供货方式', compute='_compute_supply_method', store=True)
|
], string='供货方式', compute='_compute_supply_method', store=True)
|
||||||
|
|
||||||
|
purchase_request_count = fields.Integer(string='采购申请数量', compute='_compute_purchase_request_count', readonly=True)
|
||||||
|
purchase_count = fields.Integer(string="采购订单数量", compute="_compute_purchase_count", readonly=True)
|
||||||
|
|
||||||
|
@api.depends("purchase_lines")
|
||||||
|
def _compute_purchase_count(self):
|
||||||
|
for rec in self:
|
||||||
|
rec.purchase_count = len(rec.mapped("purchase_lines.order_id"))
|
||||||
|
|
||||||
|
@api.depends('request_id')
|
||||||
|
def _compute_purchase_request_count(self):
|
||||||
|
for order in self:
|
||||||
|
order.purchase_request_count = len(order.request_id)
|
||||||
|
|
||||||
@api.depends('origin')
|
@api.depends('origin')
|
||||||
def _compute_supply_method(self):
|
def _compute_supply_method(self):
|
||||||
for prl in self:
|
for prl in self:
|
||||||
@@ -98,3 +111,36 @@ class PurchaseRequestLine(models.Model):
|
|||||||
else:
|
else:
|
||||||
record.part_number = record.product_id.part_number
|
record.part_number = record.product_id.part_number
|
||||||
record.part_name = record.product_id.part_name
|
record.part_name = record.product_id.part_name
|
||||||
|
|
||||||
|
def _compute_qty_to_buy(self):
|
||||||
|
for pr in self:
|
||||||
|
qty_to_buy = sum(pr.mapped("product_qty"))
|
||||||
|
if pr.purchase_count > 0:
|
||||||
|
qty_to_buy -= sum(pr.mapped("purchase_lines").filtered(lambda po: po.state != 'cancel').mapped(
|
||||||
|
"product_qty"))
|
||||||
|
pr.qty_to_buy = qty_to_buy > 0.0
|
||||||
|
pr.pending_qty_to_receive = qty_to_buy
|
||||||
|
|
||||||
|
def action_view_purchase_request(self):
|
||||||
|
action = self.env["ir.actions.actions"]._for_xml_id("purchase_request.purchase_request_form_action")
|
||||||
|
action.update({
|
||||||
|
'res_id': self.request_id.id,
|
||||||
|
'views': [[False, 'form']],
|
||||||
|
})
|
||||||
|
return action
|
||||||
|
|
||||||
|
def action_view_purchase_order(self):
|
||||||
|
action = self.env["ir.actions.actions"]._for_xml_id("purchase.purchase_rfq")
|
||||||
|
lines = self.mapped("purchase_lines.order_id")
|
||||||
|
if len(lines) > 1:
|
||||||
|
action["domain"] = [("id", "in", lines.ids)]
|
||||||
|
elif lines:
|
||||||
|
action["views"] = [
|
||||||
|
(self.env.ref("purchase.purchase_order_form").id, "form")
|
||||||
|
]
|
||||||
|
action["res_id"] = lines.id
|
||||||
|
origin_context = ast.literal_eval(action['context'])
|
||||||
|
if 'search_default_draft' in origin_context:
|
||||||
|
origin_context.pop('search_default_draft')
|
||||||
|
action['context'] = origin_context
|
||||||
|
return action
|
||||||
|
|||||||
3
jikimo_purchase_request/static/src/change.scss
Normal file
3
jikimo_purchase_request/static/src/change.scss
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
th[data-name=keep_description] {
|
||||||
|
min-width: 220px;
|
||||||
|
}
|
||||||
22
jikimo_purchase_request/views/purchase_request_line_view.xml
Normal file
22
jikimo_purchase_request/views/purchase_request_line_view.xml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<odoo>
|
||||||
|
<record id="purchase_request_line_form_sf" model="ir.ui.view">
|
||||||
|
<field name="name">purchase.request.line.sf.form</field>
|
||||||
|
<field name="model">purchase.request.line</field>
|
||||||
|
<field name="inherit_id" ref="purchase_request.purchase_request_line_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//h1" position="before">
|
||||||
|
<div class="oe_button_box" name="button_box">
|
||||||
|
<button type="object" name="action_view_purchase_request" class="oe_stat_button"
|
||||||
|
icon="fa-file">
|
||||||
|
<field name="purchase_request_count" widget="statinfo" string="采购申请"/>
|
||||||
|
</button>
|
||||||
|
<button type="object" name="action_view_purchase_order" class="oe_stat_button"
|
||||||
|
attrs="{'invisible': [('purchase_count', '=', 0)]}" icon="fa-shopping-cart">
|
||||||
|
<field name="purchase_count" widget="statinfo" string="采购订单"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</xpath>
|
||||||
|
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
@@ -104,9 +104,26 @@ class PurchaseRequestLineMakePurchaseOrder(models.TransientModel):
|
|||||||
# 去掉合并必须同一采购组的限制
|
# 去掉合并必须同一采购组的限制
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def get_items(self, request_line_ids):
|
||||||
|
request_line_obj = self.env["purchase.request.line"]
|
||||||
|
items = []
|
||||||
|
request_lines = request_line_obj.browse(request_line_ids).filtered(lambda line: line.pending_qty_to_receive > 0)
|
||||||
|
self._check_valid_request_line(request_line_ids)
|
||||||
|
self.check_group(request_lines)
|
||||||
|
for line in request_lines:
|
||||||
|
items.append([0, 0, self._prepare_item(line)])
|
||||||
|
return items
|
||||||
|
|
||||||
|
|
||||||
class PurchaseRequestLineMakePurchaseOrderItem(models.TransientModel):
|
class PurchaseRequestLineMakePurchaseOrderItem(models.TransientModel):
|
||||||
_inherit = "purchase.request.line.make.purchase.order.item"
|
_inherit = "purchase.request.line.make.purchase.order.item"
|
||||||
|
|
||||||
supply_method = fields.Selection(related='line_id.supply_method', string='供货方式')
|
supply_method = fields.Selection(related='line_id.supply_method', string='供货方式')
|
||||||
|
|
||||||
|
wiz_id = fields.Many2one(
|
||||||
|
comodel_name="purchase.request.line.make.purchase.order",
|
||||||
|
string="Wizard",
|
||||||
|
required=False,
|
||||||
|
ondelete="cascade",
|
||||||
|
readonly=True,
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user