Compare commits
9 Commits
feature/72
...
feature/72
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2347ed9cb3 | ||
|
|
e4c3435840 | ||
|
|
2a7048dafd | ||
|
|
2bb215f9df | ||
|
|
a2be3a0dbf | ||
|
|
1f4ceab377 | ||
|
|
94d727e8e0 | ||
|
|
42d9f894dd | ||
|
|
9416d1c1a0 |
@@ -35,7 +35,6 @@
|
|||||||
],
|
],
|
||||||
'web.assets_backend': [
|
'web.assets_backend': [
|
||||||
'sf_base/static/src/scss/*.scss',
|
'sf_base/static/src/scss/*.scss',
|
||||||
'sf_base/static/src/js/*.js',
|
|
||||||
],
|
],
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ class MrsMaterialModel(models.Model):
|
|||||||
materials_num = fields.Char("编码号")
|
materials_num = fields.Char("编码号")
|
||||||
name = fields.Char('型号名')
|
name = fields.Char('型号名')
|
||||||
need_h = fields.Boolean("热处理", default="false")
|
need_h = fields.Boolean("热处理", default="false")
|
||||||
|
need_m = fields.Boolean("是否磁吸", default="false")
|
||||||
mf_materia_post = fields.Char("热处理后密度")
|
mf_materia_post = fields.Char("热处理后密度")
|
||||||
density = fields.Float("密度(kg/m³)")
|
density = fields.Float("密度(kg/m³)")
|
||||||
materials_id = fields.Many2one('sf.production.materials', "材料名")
|
materials_id = fields.Many2one('sf.production.materials', "材料名")
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
/** @odoo-module **/
|
|
||||||
|
|
||||||
import { registry } from "@web/core/registry";
|
|
||||||
import { barcodeGenericHandlers } from '@barcodes/barcode_handlers';
|
|
||||||
import { patch } from "@web/core/utils/patch";
|
|
||||||
|
|
||||||
// 定义新的 clickOnButton 函数
|
|
||||||
function customClickOnButton(selector) {
|
|
||||||
console.log("This is the custom clickOnButton function!");
|
|
||||||
|
|
||||||
const buttons = document.body.querySelectorAll(selector);
|
|
||||||
|
|
||||||
let length = buttons.length;
|
|
||||||
if (length > 0) {
|
|
||||||
buttons[length - 1].click();
|
|
||||||
} else {
|
|
||||||
console.warn(`Button with selector ${selector} not found`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
patch(barcodeGenericHandlers, "start", {
|
|
||||||
start(env, { ui, barcode, notification }) {
|
|
||||||
// 使用新定义的 clickOnButton 函数
|
|
||||||
const COMMANDS = {
|
|
||||||
"O-CMD.EDIT": () => customClickOnButton(".o_form_button_edit"),
|
|
||||||
"O-CMD.DISCARD": () => customClickOnButton(".o_form_button_cancel"),
|
|
||||||
"O-CMD.SAVE": () => customClickOnButton(".o_form_button_save"),
|
|
||||||
"O-CMD.PREV": () => customClickOnButton(".o_pager_previous"),
|
|
||||||
"O-CMD.NEXT": () => customClickOnButton(".o_pager_next"),
|
|
||||||
"O-CMD.PAGER-FIRST": () => updatePager("first"),
|
|
||||||
"O-CMD.PAGER-LAST": () => updatePager("last"),
|
|
||||||
"O-CMD.CONFIRM": () => customClickOnButton(".jikimo_button_confirm"),
|
|
||||||
"O-CMD.FLUSHED": () => customClickOnButton(".jikimo_button_flushed"),
|
|
||||||
};
|
|
||||||
|
|
||||||
barcode.bus.addEventListener("barcode_scanned", (ev) => {
|
|
||||||
const barcode = ev.detail.barcode;
|
|
||||||
if (barcode.startsWith("O-BTN.")) {
|
|
||||||
let targets = [];
|
|
||||||
try {
|
|
||||||
targets = getVisibleElements(ui.activeElement, `[barcode_trigger=${barcode.slice(6)}]`);
|
|
||||||
} catch (_e) {
|
|
||||||
console.warn(`Barcode '${barcode}' is not valid`);
|
|
||||||
}
|
|
||||||
for (let elem of targets) {
|
|
||||||
elem.click();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (barcode.startsWith("O-CMD.")) {
|
|
||||||
const fn = COMMANDS[barcode];
|
|
||||||
if (fn) {
|
|
||||||
fn();
|
|
||||||
} else {
|
|
||||||
notification.add(env._t("Barcode: ") + `'${barcode}'`, {
|
|
||||||
title: env._t("Unknown barcode command"),
|
|
||||||
type: "danger"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
/** @odoo-module **/
|
|
||||||
|
|
||||||
import { registry } from '@web/core/registry';
|
|
||||||
|
|
||||||
import { formView } from '@web/views/form/form_view';
|
|
||||||
import { FormController } from '@web/views/form/form_controller';
|
|
||||||
|
|
||||||
import { listView } from '@web/views/list/list_view';
|
|
||||||
import { ListController } from '@web/views/list/list_controller'
|
|
||||||
|
|
||||||
import { onRendered, onMounted } from "@odoo/owl";
|
|
||||||
|
|
||||||
export class RemoveFocusFormController extends FormController {
|
|
||||||
setup() {
|
|
||||||
super.setup();
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
this.__owl__.bdom.el.querySelectorAll(':focus').forEach(element => element.blur());
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
registry.category('views').add('remove_focus_form_view', {
|
|
||||||
...formView,
|
|
||||||
Controller: RemoveFocusFormController,
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
export class RemoveFocusListController extends ListController {
|
|
||||||
setup() {
|
|
||||||
super.setup();
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
this.__owl__.bdom.el.querySelectorAll(':focus').forEach(element => element.blur());
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
registry.category('views').add('remove_focus_list_view', {
|
|
||||||
...listView,
|
|
||||||
Controller: RemoveFocusListController,
|
|
||||||
});
|
|
||||||
@@ -263,6 +263,7 @@
|
|||||||
<field name="materials_no" readonly="1" force_save="1"/>
|
<field name="materials_no" readonly="1" force_save="1"/>
|
||||||
<field name="gain_way" required="0"/>
|
<field name="gain_way" required="0"/>
|
||||||
<field name="density" readonly="1" required="1" class="custom_required"/>
|
<field name="density" readonly="1" required="1" class="custom_required"/>
|
||||||
|
<field name="need_m" default="false" readonly="1"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="rough_machining" required="1"/>
|
<field name="rough_machining" required="1"/>
|
||||||
@@ -306,6 +307,7 @@
|
|||||||
<field name="tensile_strength"/>
|
<field name="tensile_strength"/>
|
||||||
<field name="hardness" optional="show"/>
|
<field name="hardness" optional="show"/>
|
||||||
<field name="need_h"/>
|
<field name="need_h"/>
|
||||||
|
<field name="need_m"/>
|
||||||
<field name="apply" widget="many2many_tags" optional="show"/>
|
<field name="apply" widget="many2many_tags" optional="show"/>
|
||||||
<field name="density" optional="show"/>
|
<field name="density" optional="show"/>
|
||||||
<field name="rough_machining" optional="hide"/>
|
<field name="rough_machining" optional="hide"/>
|
||||||
@@ -352,6 +354,7 @@
|
|||||||
<field name="materials_no"/>
|
<field name="materials_no"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="need_h"/>
|
<field name="need_h"/>
|
||||||
|
<field name="need_m"/>
|
||||||
<field name="mf_materia_post"/>
|
<field name="mf_materia_post"/>
|
||||||
<field name="density"/>
|
<field name="density"/>
|
||||||
<field name='materials_id' default="default" invisible="1"/>
|
<field name='materials_id' default="default" invisible="1"/>
|
||||||
|
|||||||
@@ -222,10 +222,15 @@ class SfDemandPlan(models.Model):
|
|||||||
line_ids = self.line_ids.filtered(lambda p: p.status == '30')
|
line_ids = self.line_ids.filtered(lambda p: p.status == '30')
|
||||||
sum_product_uom_qty = sum(line_ids.mapped('plan_uom_qty'))
|
sum_product_uom_qty = sum(line_ids.mapped('plan_uom_qty'))
|
||||||
customer_location_id = self.env['ir.model.data']._xmlid_to_res_id('stock.stock_location_customers')
|
customer_location_id = self.env['ir.model.data']._xmlid_to_res_id('stock.stock_location_customers')
|
||||||
if not self.overdelivery_allowed and line_ids.filtered(lambda p: p.location_id.id == customer_location_id):
|
check_overdelivery_allowed = False
|
||||||
if float_compare(sum_product_uom_qty, self.product_uom_qty,
|
for line in line_ids:
|
||||||
precision_rounding=self.product_id.uom_id.rounding) == 1:
|
if line.location_id.id == customer_location_id:
|
||||||
raise ValidationError(f"已禁止向合作伙伴/客户超量发货,请更换“补货原因”或将“可超量发货”设置为“是”。")
|
if not self.overdelivery_allowed:
|
||||||
|
if float_compare(sum_product_uom_qty, self.product_uom_qty,
|
||||||
|
precision_rounding=line.product_id.uom_id.rounding) == 1:
|
||||||
|
check_overdelivery_allowed = True
|
||||||
|
if check_overdelivery_allowed:
|
||||||
|
raise ValidationError(f"已禁止向合作伙伴/客户超量发货,请更换“补货原因”或将“可超量发货”设置为“是”。")
|
||||||
elif float_compare(sum_product_uom_qty, self.product_uom_qty,
|
elif float_compare(sum_product_uom_qty, self.product_uom_qty,
|
||||||
precision_rounding=self.product_id.uom_id.rounding) == 1:
|
precision_rounding=self.product_id.uom_id.rounding) == 1:
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
'category': 'sf',
|
'category': 'sf',
|
||||||
'website': 'https://www.sf.jikimo.com',
|
'website': 'https://www.sf.jikimo.com',
|
||||||
'depends': ['sf_base', 'sf_maintenance', 'web_widget_model_viewer', 'sf_warehouse', 'jikimo_attachment_viewer',
|
'depends': ['sf_base', 'sf_maintenance', 'web_widget_model_viewer', 'sf_warehouse', 'jikimo_attachment_viewer',
|
||||||
'jikimo_sale_multiple_supply_methods', 'product'],
|
'jikimo_sale_multiple_supply_methods', 'product', 'jikimo_tree_header_buttons_always_visible'],
|
||||||
'data': [
|
'data': [
|
||||||
'data/cron_data.xml',
|
'data/cron_data.xml',
|
||||||
'data/stock_data.xml',
|
'data/stock_data.xml',
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ class sfMaterialModel(models.Model):
|
|||||||
materials_model.mf_materia_post = item['mf_materia_post']
|
materials_model.mf_materia_post = item['mf_materia_post']
|
||||||
materials_model.materials_id = materials.id
|
materials_model.materials_id = materials.id
|
||||||
materials_model.need_h = item['need_h']
|
materials_model.need_h = item['need_h']
|
||||||
|
materials_model.need_m = item['need_m']
|
||||||
materials_model.density = item['density']
|
materials_model.density = item['density']
|
||||||
materials_model.active = item['active']
|
materials_model.active = item['active']
|
||||||
else:
|
else:
|
||||||
@@ -192,6 +193,7 @@ class sfMaterialModel(models.Model):
|
|||||||
"active": item['active'],
|
"active": item['active'],
|
||||||
"materials_id": materials.id,
|
"materials_id": materials.id,
|
||||||
"need_h": item['need_h'],
|
"need_h": item['need_h'],
|
||||||
|
"need_m": item['need_m'],
|
||||||
"mf_materia_post": item['mf_materia_post'],
|
"mf_materia_post": item['mf_materia_post'],
|
||||||
"density": item['density'],
|
"density": item['density'],
|
||||||
})
|
})
|
||||||
@@ -228,6 +230,7 @@ class sfMaterialModel(models.Model):
|
|||||||
"standards_id": self.env['sf.international.standards'].search(
|
"standards_id": self.env['sf.international.standards'].search(
|
||||||
[("name", '=', item['standards_id'])]).id,
|
[("name", '=', item['standards_id'])]).id,
|
||||||
"need_h": item['need_h'],
|
"need_h": item['need_h'],
|
||||||
|
"need_m": item['need_m'],
|
||||||
"alloy_code": item['alloy_code'],
|
"alloy_code": item['alloy_code'],
|
||||||
"mf_materia_post": item['mf_materia_post'],
|
"mf_materia_post": item['mf_materia_post'],
|
||||||
"density": item['density'],
|
"density": item['density'],
|
||||||
@@ -248,6 +251,7 @@ class sfMaterialModel(models.Model):
|
|||||||
materials_model.mf_materia_post = item['mf_materia_post']
|
materials_model.mf_materia_post = item['mf_materia_post']
|
||||||
materials_model.materials_id = materials.id
|
materials_model.materials_id = materials.id
|
||||||
materials_model.need_h = item['need_h']
|
materials_model.need_h = item['need_h']
|
||||||
|
materials_model.need_m = item['need_m']
|
||||||
materials_model.density = item['density']
|
materials_model.density = item['density']
|
||||||
materials_model.active = item['active']
|
materials_model.active = item['active']
|
||||||
materials_model.materials_code= item['materials_code']
|
materials_model.materials_code= item['materials_code']
|
||||||
|
|||||||
@@ -45759,6 +45759,11 @@ msgstr ""
|
|||||||
msgid "热处理"
|
msgid "热处理"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: sf_base
|
||||||
|
#: model:ir.model.fields,field_description:sf_base.field_sf_materials_model__need_m
|
||||||
|
msgid "是否磁吸"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#. module: sf_base
|
#. module: sf_base
|
||||||
#: model:ir.model.fields,field_description:sf_base.field_sf_materials_model__mf_materia_post
|
#: model:ir.model.fields,field_description:sf_base.field_sf_materials_model__mf_materia_post
|
||||||
msgid "热处理后密度"
|
msgid "热处理后密度"
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ class ReSaleOrder(models.Model):
|
|||||||
'glb_url': item['glb_url'],
|
'glb_url': item['glb_url'],
|
||||||
'remark': item.get('remark'),
|
'remark': item.get('remark'),
|
||||||
'embryo_redundancy_id': item.get('embryo_redundancy_id'),
|
'embryo_redundancy_id': item.get('embryo_redundancy_id'),
|
||||||
'is_incoming_material': True if item.get('embryo_redundancy_id') else False,
|
'is_incoming_material': True if item.get('incoming_size') else False,
|
||||||
'manual_quotation': item.get('manual_quotation'),
|
'manual_quotation': item.get('manual_quotation'),
|
||||||
'model_id': item['model_id'],
|
'model_id': item['model_id'],
|
||||||
'delivery_end_date': item['delivery_end_date']
|
'delivery_end_date': item['delivery_end_date']
|
||||||
@@ -287,7 +287,7 @@ class ResaleOrderLine(models.Model):
|
|||||||
check_status = fields.Selection(related='order_id.check_status')
|
check_status = fields.Selection(related='order_id.check_status')
|
||||||
remark = fields.Char('备注')
|
remark = fields.Char('备注')
|
||||||
|
|
||||||
is_incoming_material = fields.Boolean('客供料', compute='_compute_is_incoming_material', store=True)
|
is_incoming_material = fields.Boolean('客供料', store=True)
|
||||||
embryo_redundancy_id = fields.Many2one('sf.embryo.redundancy', '坯料冗余')
|
embryo_redundancy_id = fields.Many2one('sf.embryo.redundancy', '坯料冗余')
|
||||||
manual_quotation = fields.Boolean('人工编程', default=False)
|
manual_quotation = fields.Boolean('人工编程', default=False)
|
||||||
model_url = fields.Char('模型文件地址')
|
model_url = fields.Char('模型文件地址')
|
||||||
|
|||||||
Reference in New Issue
Block a user