diff --git a/jikimo_account_process/__manifest__.py b/jikimo_account_process/__manifest__.py index 0c1b521c..637e74b0 100644 --- a/jikimo_account_process/__manifest__.py +++ b/jikimo_account_process/__manifest__.py @@ -20,7 +20,7 @@ 'version': '0.1', # any module necessary for this one to work correctly - 'depends': ['base', 'account'], + 'depends': ['base', 'account', 'l10n_cn'], # always loaded 'data': [ diff --git a/jikimo_account_process/models/account_move.py b/jikimo_account_process/models/account_move.py index e85d4e16..94242570 100644 --- a/jikimo_account_process/models/account_move.py +++ b/jikimo_account_process/models/account_move.py @@ -1,4 +1,4 @@ -from odoo import models, fields, api +from odoo import models, fields, api, _ from odoo.exceptions import ValidationError @@ -7,6 +7,14 @@ class CustomAccountMoveLine(models.Model): _inherit = 'account.move' _description = "account move line" + fapiao = fields.Char(string='发票号', size=20, copy=False, tracking=True, required=True) + + @api.constrains('fapiao') + def _check_fapiao(self): + for record in self: + if record.fapiao and (len(record.fapiao) != 20 or not record.fapiao.isdecimal()): + raise ValidationError(_("Fapiao number is an 20-digit number. Please enter a correct one.")) + @api.model_create_multi def create(self, vals): for val in vals: diff --git a/jikimo_frontend/__manifest__.py b/jikimo_frontend/__manifest__.py index c3598323..b8b77eb1 100644 --- a/jikimo_frontend/__manifest__.py +++ b/jikimo_frontend/__manifest__.py @@ -21,8 +21,8 @@ 'web.assets_qweb': [ ], 'web.assets_backend': [ - 'jikimo_frontend/static/src/fields/custom_many2many_checkboxes/*', - 'jikimo_frontend/static/src/fields/Many2OneRadioField/*', + # 'jikimo_frontend/static/src/fields/custom_many2many_checkboxes/*', + # 'jikimo_frontend/static/src/fields/Many2OneRadioField/*', # 移除odoo相关标识 'jikimo_frontend/static/src/bye_odoo/*', 'jikimo_frontend/static/src/scss/custom_style.scss', diff --git a/jikimo_frontend/static/src/css/list_border_styles.css b/jikimo_frontend/static/src/css/list_border_styles.css index bca5499e..35fc8099 100644 --- a/jikimo_frontend/static/src/css/list_border_styles.css +++ b/jikimo_frontend/static/src/css/list_border_styles.css @@ -1,3 +1,8 @@ .o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector):not(.o_handle_cell):not(.o_list_button):not(.o_list_record_remove){ border:1px solid #dee2e6 !important; +} + +.custom_required_add::before{ + content: '*'; + color: red; } \ No newline at end of file diff --git a/jikimo_frontend/static/src/fields/Many2OneRadioField/many2one_radio_field.css b/jikimo_frontend/static/src/fields/Many2OneRadioField/many2one_radio_field.css deleted file mode 100644 index 72d877a0..00000000 --- a/jikimo_frontend/static/src/fields/Many2OneRadioField/many2one_radio_field.css +++ /dev/null @@ -1,3 +0,0 @@ -.many2one_radio_field { - display: inline-block; -} \ No newline at end of file diff --git a/jikimo_frontend/static/src/fields/Many2OneRadioField/many2one_radio_field.js b/jikimo_frontend/static/src/fields/Many2OneRadioField/many2one_radio_field.js deleted file mode 100644 index 8c2be97f..00000000 --- a/jikimo_frontend/static/src/fields/Many2OneRadioField/many2one_radio_field.js +++ /dev/null @@ -1,53 +0,0 @@ -/** @odoo-module **/ - -import { RadioField } from "@web/views/fields/radio/radio_field"; // 导入单选按钮组件 -import { registry } from "@web/core/registry"; - -export class Many2OneRadioField extends RadioField { - // 你可以重写或者添加一些方法和属性 - // 例如,你可以重写setup方法来添加一些事件监听器或者初始化一些变量 - setup() { - super.setup(); // 调用父类的setup方法 - // 你自己的代码 - } - - onImageClick(event) { - // 放大图片逻辑 - // 获取图片元素 - const img = event.target; - const close = img.nextSibling; - // 实现放大图片逻辑 - // 比如使用 CSS 放大 - img.parentElement.classList.add('zoomed'); - close.classList.add('img_close'); - } - - onCloseClick(event) { - const close = event.target; - const img = close.previousSibling; - img.parentElement.classList.remove('zoomed'); - close.classList.remove('img_close'); - } - - get items() { - return Many2OneRadioField.getItems(this.props.name, this.props.record); - } - - static getItems(fieldName, record) { - switch (record.fields[fieldName].type) { - case "selection": - return record.fields[fieldName].selection; - case "many2one": { - const value = record.preloadedData[fieldName] || []; - return value.map((item) => [item.id, item.display_name, item.image]); - } - default: - return []; - } - } -} - -Many2OneRadioField.template = "jikimo_frontend.Many2OneRadioField"; -// MyCustomWidget.supportedTypes = ['many2many']; - -registry.category("fields").add("many2one_radio", Many2OneRadioField); diff --git a/jikimo_frontend/static/src/fields/Many2OneRadioField/many2one_radio_field.xml b/jikimo_frontend/static/src/fields/Many2OneRadioField/many2one_radio_field.xml deleted file mode 100644 index 3d797eb0..00000000 --- a/jikimo_frontend/static/src/fields/Many2OneRadioField/many2one_radio_field.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - -
- -
- -
-
-
-
- -
diff --git a/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.css b/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.css deleted file mode 100644 index 20cb4c7e..00000000 --- a/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.css +++ /dev/null @@ -1,100 +0,0 @@ - -.processing-capabilities-grid { - display: grid; - grid-template-columns: repeat(6, 1fr); - gap: 10px; - width: 100%; -} - -.grid-item { - display: flex; - align-items: center; -} - -.item-content { - display: flex; - flex-direction: column; - align-items: center; - text-align: center; -} -/*控制图片大小*/ -.item-icon { - width: 50px; - height: 50px; - margin-bottom: 5px; - margin-top: 15px; -} - -.item-label { - font-size: 12px; - word-break: break-word; -} - -@media (max-width: 1200px) { - .processing-capabilities-grid { - grid-template-columns: repeat(4, 1fr); - } -} - -@media (max-width: 768px) { - .processing-capabilities-grid { - grid-template-columns: repeat(3, 1fr); - } -} - -@media (max-width: 480px) { - .processing-capabilities-grid { - grid-template-columns: repeat(2, 1fr); - } -} -.image-preview-container { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.9); - display: flex; - justify-content: center; - align-items: center; - z-index: 1000; - opacity: 0; - transition: opacity 0.3s ease; -} - -.image-preview-container.show { - opacity: 1; -} - -.image-preview { - max-width: 90%; - max-height: 90%; - object-fit: contain; - box-shadow: 0 0 20px rgba(255, 255, 255, 0.2); - border-radius: 5px; - transform: scale(0.9); - transition: transform 0.3s ease; -} - -.image-preview-container.show .image-preview { - transform: scale(1); -} - -.image-preview-close { - position: absolute; - top: 20px; - right: 30px; - color: #fff; - font-size: 40px; - font-weight: bold; - transition: 0.3s; - cursor: pointer; - opacity: 0.7; -} - -.image-preview-close:hover, -.image-preview-close:focus { - opacity: 1; - text-decoration: none; - cursor: pointer; -} \ No newline at end of file diff --git a/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.js b/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.js deleted file mode 100644 index dee78c5f..00000000 --- a/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.js +++ /dev/null @@ -1,60 +0,0 @@ -/** @odoo-module **/ - -import {Many2ManyCheckboxesField} from "@web/views/fields/many2many_checkboxes/many2many_checkboxes_field"; -import {registry} from "@web/core/registry"; - -export class MyCustomWidget extends Many2ManyCheckboxesField { - setup() { - super.setup(); - } - - onImageClick(event, src) { - event.preventDefault(); - event.stopPropagation(); - - // 创建预览框 - const previewContainer = document.createElement('div'); - previewContainer.className = 'image-preview-container'; - - const previewImg = document.createElement('img'); - previewImg.src = src; - previewImg.className = 'image-preview'; - // 设置放大的预览图片大小 - previewImg.style.width = '600px'; - previewImg.style.height = 'auto'; // 保持宽高比 - - const closeButton = document.createElement('span'); - closeButton.innerHTML = '×'; - closeButton.className = 'image-preview-close'; - - previewContainer.appendChild(previewImg); - previewContainer.appendChild(closeButton); - document.body.appendChild(previewContainer); - - // 添加关闭预览的事件监听器 - const closePreview = () => { - previewContainer.classList.remove('show'); - setTimeout(() => { - document.body.removeChild(previewContainer); - }, 300); - }; - - closeButton.addEventListener('click', closePreview); - - // 点击预览框外部也可以关闭 - previewContainer.addEventListener('click', (e) => { - if (e.target === previewContainer) { - closePreview(); - } - }); - - // 使用 setTimeout 来触发过渡效果 - setTimeout(() => { - previewContainer.classList.add('show'); - }, 10); - } -} - -MyCustomWidget.template = "jikimo_frontend.MyCustomWidget"; - -registry.category("fields").add("custom_many2many_checkboxes", MyCustomWidget); \ No newline at end of file diff --git a/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.xml b/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.xml deleted file mode 100644 index 9bb8797d..00000000 --- a/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - -
- -
- -
- - -
-
-
-
-
-
- -
\ No newline at end of file diff --git a/jikimo_frontend/static/src/js/custom_form_status_indicator.js b/jikimo_frontend/static/src/js/custom_form_status_indicator.js index 0b6a6b50..5d8b2fbf 100644 --- a/jikimo_frontend/static/src/js/custom_form_status_indicator.js +++ b/jikimo_frontend/static/src/js/custom_form_status_indicator.js @@ -6,8 +6,9 @@ import {_t} from "@web/core/l10n/translation"; import {FormStatusIndicator} from "@web/views/form/form_status_indicator/form_status_indicator"; import {ListRenderer} from "@web/views/list/list_renderer"; // import {StatusBarField} from "@web/views/fields/statusbar/statusbar_field"; +import {FormLabel} from "@web/views/form/form_label"; +import { fieldVisualFeedback } from "@web/views/fields/field"; -import {Field} from "@web/views/fields/field"; var Dialog = require('web.Dialog'); // var {patch} = require("web.utils") 这句话也行 @@ -51,7 +52,6 @@ const tableRequiredList = [ 'product_template_id', 'product_uom_qty', 'price_unit','product_id','product_qty', 'name', 'fault_type', 'maintenance_standards', 'Period' ] - patch(FormStatusIndicator.prototype, 'jikimo_frontend.FormStatusIndicator', { setup() { owl.onMounted(() => { @@ -107,33 +107,7 @@ patch(FormStatusIndicator.prototype, 'jikimo_frontend.FormStatusIndicator', { } ); -patch(Field.prototype, 'jikimo_frontend.Field', { - setup() { - owl.onMounted(this.setRequired); - return this._super(...arguments); - }, - setRequired() { - const id = this.props.id - const isRequired = filedRequiredList[id] - if(id == 'number_of_axles') { - console.log(isRequired) - } - if(isRequired) { - let dom; - dom = $(`label[for=${id}]`) - if(isRequired.multiple && dom.length > 1) { - dom = dom.eq(-1) - dom = dom.parent().parent().next().find('label') - } - if(isRequired.noLabel) { - dom = dom.parent().parent() - } - let t = dom.html() - t = '*' + t - dom.html(t) - } - } -}) + patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { setup(){ owl.onMounted(() => { @@ -191,7 +165,33 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { } } }) - +patch(FormLabel.prototype, 'jikimo_frontend.FormLabel', { + get className() { + + const { invalid, empty, readonly } = fieldVisualFeedback( + this.props.fieldInfo.FieldComponent, + this.props.record, + this.props.fieldName, + this.props.fieldInfo + ); + const classes = this.props.className ? [this.props.className] : []; + const otherRequired = filedRequiredList[this.props.fieldName] + + if(this.props.fieldInfo?.rawAttrs?.class?.indexOf('custom_required') >= 0 || otherRequired) { + classes.push('custom_required_add') + } + if (invalid) { + classes.push("o_field_invalid"); + } + if (empty) { + classes.push("o_form_label_empty"); + } + if (readonly) { + classes.push("o_form_label_readonly"); + } + return classes.join(" "); + } +}) // 根据进度条设置水印 // const statusbar_params = { @@ -231,7 +231,6 @@ $(function () { clearInterval(timer) timer = setInterval(() => { timer_count++ - const dom = $('.custom_required') let tableDom = $('.table_custom_required') if (tableDom.length) { tableDom = tableDom.eq(0).parents('tr').children('.table_custom_required') @@ -243,17 +242,6 @@ $(function () { }) clearInterval(timer) } - if (dom.length) { - dom.each(function () { - const requiredDom = $(this).parent().prev().find('label') - let t = requiredDom.html() - if (t && t.indexOf('c*') < 0) { - t = '*' + t - } - requiredDom.html(t) - }) - clearInterval(timer) - } if (timer_count == 20) { clearInterval(timer) } diff --git a/jikimo_purchase_tier_validation/__init__.py b/jikimo_purchase_tier_validation/__init__.py index 40c32597..f553d8ff 100644 --- a/jikimo_purchase_tier_validation/__init__.py +++ b/jikimo_purchase_tier_validation/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from . import controllers from . import models from . import wizards diff --git a/jikimo_purchase_tier_validation/__manifest__.py b/jikimo_purchase_tier_validation/__manifest__.py index a7bdbddf..4d676d8f 100644 --- a/jikimo_purchase_tier_validation/__manifest__.py +++ b/jikimo_purchase_tier_validation/__manifest__.py @@ -24,9 +24,6 @@ # always loaded 'data': [ - 'security/ir.model.access.csv', - 'data/documents_data.xml', - 'wizards/upload_file_wizard_view.xml', 'views/views.xml', ], # only loaded in demonstration mode diff --git a/jikimo_purchase_tier_validation/controllers/__init__.py b/jikimo_purchase_tier_validation/controllers/__init__.py deleted file mode 100644 index 457bae27..00000000 --- a/jikimo_purchase_tier_validation/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import controllers \ No newline at end of file diff --git a/jikimo_purchase_tier_validation/controllers/controllers.py b/jikimo_purchase_tier_validation/controllers/controllers.py deleted file mode 100644 index 6bbe5e40..00000000 --- a/jikimo_purchase_tier_validation/controllers/controllers.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# from odoo import http - - -# class JikimoPurchaseTierValidation(http.Controller): -# @http.route('/jikimo_purchase_tier_validation/jikimo_purchase_tier_validation', auth='public') -# def index(self, **kw): -# return "Hello, world" - -# @http.route('/jikimo_purchase_tier_validation/jikimo_purchase_tier_validation/objects', auth='public') -# def list(self, **kw): -# return http.request.render('jikimo_purchase_tier_validation.listing', { -# 'root': '/jikimo_purchase_tier_validation/jikimo_purchase_tier_validation', -# 'objects': http.request.env['jikimo_purchase_tier_validation.jikimo_purchase_tier_validation'].search([]), -# }) - -# @http.route('/jikimo_purchase_tier_validation/jikimo_purchase_tier_validation/objects/', auth='public') -# def object(self, obj, **kw): -# return http.request.render('jikimo_purchase_tier_validation.object', { -# 'object': obj -# }) diff --git a/jikimo_purchase_tier_validation/data/documents_data.xml b/jikimo_purchase_tier_validation/data/documents_data.xml deleted file mode 100644 index 990a6418..00000000 --- a/jikimo_purchase_tier_validation/data/documents_data.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - 采购合同 - 存放采购合同相关文件 - 10 - - - \ No newline at end of file diff --git a/jikimo_purchase_tier_validation/demo/demo.xml b/jikimo_purchase_tier_validation/demo/demo.xml deleted file mode 100644 index cbba42ce..00000000 --- a/jikimo_purchase_tier_validation/demo/demo.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - \ No newline at end of file diff --git a/jikimo_purchase_tier_validation/models/models.py b/jikimo_purchase_tier_validation/models/models.py index 34d33d32..018766eb 100644 --- a/jikimo_purchase_tier_validation/models/models.py +++ b/jikimo_purchase_tier_validation/models/models.py @@ -21,12 +21,8 @@ class jikimo_purchase_tier_validation(models.Model): def button_confirm(self): for record in self: - # if record.need_validation and record.validation_status != 'validated': - # raise ValidationError(_('此操作需要至少对一条记录进行审批。\n请发起审批申请。')) if record.state in ['to approve']: raise ValidationError(_('请先完成审批。')) - # if record.state == 'approved': - # record.state = 'purchase' res = super(jikimo_purchase_tier_validation, self).button_confirm() for record in self: if record.state == 'approved': @@ -39,45 +35,8 @@ class jikimo_purchase_tier_validation(models.Model): record.message_subscribe([record.partner_id.id]) return res - # def button_confirm(self): - # self = self.with_context(skip_validation=True) - # return super().button_confirm() - # - # def _check_state_conditions(self, vals): - # self.ensure_one() - # if self._context.get('skip_validation'): - # return False - # return ( - # self._check_state_from_condition() - # and vals.get(self._state_field) in self._state_to - # ) - def request_validation(self): for record in self: - error_messages = [] - - # 检查必填字段 - required_fields = { - 'partner_ref': '合同名称', - 'contract_number': '合同编号' - } - - missing_fields = [ - name for field, name in required_fields.items() - if not record[field] - ] - - if missing_fields: - error_messages.append('* 如下字段要求必须填写:%s' % '、'.join(missing_fields)) - - # 检查合同文件 - if not record.contract_document_id: - error_messages.append('* 必须点击上传合同文件') - - # 如果有任何错误,一次性显示所有错误信息 - if error_messages: - raise ValidationError('\n'.join(error_messages)) - # 添加通知消息 if hasattr(record, 'message_post'): current_user = self.env.user.name diff --git a/jikimo_purchase_tier_validation/security/ir.model.access.csv b/jikimo_purchase_tier_validation/security/ir.model.access.csv deleted file mode 100644 index 09ba96bc..00000000 --- a/jikimo_purchase_tier_validation/security/ir.model.access.csv +++ /dev/null @@ -1,2 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_ir_attachment_wizard,ir.attachment.wizard,model_ir_attachment_wizard,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/jikimo_purchase_tier_validation/views/templates.xml b/jikimo_purchase_tier_validation/views/templates.xml deleted file mode 100644 index cea6b39a..00000000 --- a/jikimo_purchase_tier_validation/views/templates.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - \ No newline at end of file diff --git a/jikimo_purchase_tier_validation/views/views.xml b/jikimo_purchase_tier_validation/views/views.xml index b651e914..fdfd52c1 100644 --- a/jikimo_purchase_tier_validation/views/views.xml +++ b/jikimo_purchase_tier_validation/views/views.xml @@ -23,76 +23,10 @@ - -