From fb6d3981932108e6538cb29ece8a81897511e872 Mon Sep 17 00:00:00 2001 From: zhouzhou <123@qq.com> Date: Sat, 7 Sep 2024 11:16:20 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yuthon_property/__manifest__.py | 18 +- yuthon_property/models/yuthon_property.py | 22 ++- yuthon_property/views/menuitem.xml | 42 ++--- .../views/yuthon_property_views.xml | 155 ++++++++++++++++++ 4 files changed, 210 insertions(+), 27 deletions(-) create mode 100644 yuthon_property/views/yuthon_property_views.xml diff --git a/yuthon_property/__manifest__.py b/yuthon_property/__manifest__.py index 65723f965..e0410b58d 100644 --- a/yuthon_property/__manifest__.py +++ b/yuthon_property/__manifest__.py @@ -1,11 +1,19 @@ +# -*- coding: utf-8 -*- { 'name': "yuthon property", 'summary': "物业管理", 'description': """""", + 'author': 'zhou', + 'website': 'https://www.pengyuthon.com', + 'version': '0.1', + 'license': 'LGPL-3', 'data': [ - 'security/ir.model.access.csv', # 模块的访问控制文件。这些文件通常包括 CSV 文件,用于定义模型、字段、组等的访问权限。 - 'views/menuitem.xml',], # 模块的数据文件列表。这些文件通常包括 XML 文件,用于定义模型、视图、菜单、动作等。 - 'demo': [], # 模块的演示数据文件列表。这些文件通常包括 XML 文件,用于定义演示数据。 - 'depends': [], # 模块所依赖的其他模块列表。这些模块必须先安装才能安装此模块。 + 'security/ir.model.access.csv', + 'views/yuthon_property_views.xml', + 'views/menuitem.xml', + ], + 'demo': [], + 'depends': ['mail'], + 'installable': True, + 'application': True, } - diff --git a/yuthon_property/models/yuthon_property.py b/yuthon_property/models/yuthon_property.py index f063fd882..549e7daa1 100644 --- a/yuthon_property/models/yuthon_property.py +++ b/yuthon_property/models/yuthon_property.py @@ -4,5 +4,25 @@ from odoo import models, fields, api class YuthonProperty(models.Model): _name = 'yuthon.property' _description = '物业管理' + _inherit = ['mail.thread.main.attachment', 'mail.activity.mixin'] + _rec_name = 'name' - name = fields.Char(string='名称') \ No newline at end of file + name = fields.Char(string="名称") + property_precinct = fields.Char(string="楼盘片区") + property_floor = fields.Integer(string="楼层") + property_room = fields.Char(string="区") + property_house = fields.Char(string="户型") + property_orientation = fields.Char(string="朝向") + property_use_id = fields.Integer(string="物业用途ID") + property_asset_type = fields.Selection([('plant', '厂房'), ('goods', '商品'), + ('office', '写字楼'), ('dormitory', '宿舍'), + ('rig','设备等管理用房')], string='资产类型') + property_asset_use = fields.Selection([('hire', '出租'), ('personal', '自用')], string='资产用途') + property_use_type = fields.Selection([('work', '办公'), ('dorm', '宿舍'), ('cater', '餐饮')], string='使用类型') + property_use_time = fields.Datetime(string="使用年限") + state = fields.Selection([('could', '可租'), ('done', '已租'), ('none', '空置')], string='状态') + property_source = fields.Selection([('cut', '划入'), ('self', '自建'), + ('replace', '置换'), ('buy', '购入'), + ('entrust','委托'),('Rent','租入')], string='来源') + image_1920 = fields.Image(string="图片") + description = fields.Html(string="描述") \ No newline at end of file diff --git a/yuthon_property/views/menuitem.xml b/yuthon_property/views/menuitem.xml index 0b614d0ad..b4fccbd1d 100644 --- a/yuthon_property/views/menuitem.xml +++ b/yuthon_property/views/menuitem.xml @@ -2,48 +2,48 @@ 物业管理 - yuthon.property - tree,form + yuthon.property + tree,form - - + - - - + + + + parent="yuthon_property_information_menu" + action="yuthon_property_could_action"/> + parent="yuthon_property_information_menu" + action="yuthon_property_done_action"/> - - + parent="yuthon_property_information_menu" + action="yuthon_property_none_action"/> + + + yuthon.property.tree + yuthon.property + + + + + + + + + + + + + + + + + + + yuthon.property.form + yuthon.property + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + + + + yuthon.property.search + yuthon.property + + + + + + + + + + + + + + yuthon.property.kanban + yuthon.property + + + + + + + +
+
+ Product +
+
+
+
+ + + +
+ +
+ + + + + + + + + + + + +
+
+
+ + + + + + + 物业 + yuthon.property + kanban,tree,form + + + + + 可租 + yuthon.property + tree,form + [('state','=','could')] + + + + 已租 + yuthon.property + tree,form + [('state','=','done')] + + + + 空置 + yuthon.property + tree,form + [('state','=','none')] + + + \ No newline at end of file From d574dd5ecb72eb18adbb83696b1036d0ea574b5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Sat, 7 Sep 2024 11:48:30 +0800 Subject: [PATCH 2/6] pengyuthon --- xw_kk_preview/__init__.py | 4 -- xw_kk_preview/__manifest__.py | 37 ----------- xw_kk_preview/controllers/__init__.py | 3 - xw_kk_preview/controllers/controllers.py | 21 ------ xw_kk_preview/models/__init__.py | 3 - xw_kk_preview/models/models.py | 50 --------------- xw_kk_preview/security/ir.model.access.csv | 2 - xw_kk_preview/static/css/style.scss | 18 ------ xw_kk_preview/static/description/icon.png | Bin 64413 -> 0 bytes xw_kk_preview/static/libs/base64.js | 8 --- .../src/binary_field/kk_binary_preview.js | 55 ---------------- .../src/binary_field/kk_binary_preview.xml | 17 ----- .../src/binary_field/kk_preview_dialog.js | 24 ------- .../src/binary_field/kk_preview_dialog.xml | 15 ----- xw_kk_preview/static/src/kk_dialog_patch.js | 14 ---- xw_kk_preview/views/templates.xml | 24 ------- xw_kk_preview/views/views.xml | 60 ------------------ xw_kk_preview_demo/__init__.py | 3 - xw_kk_preview_demo/__manifest__.py | 25 -------- xw_kk_preview_demo/models/__init__.py | 4 -- xw_kk_preview_demo/models/models.py | 19 ------ xw_kk_preview_demo/models/patch_attachment.py | 19 ------ .../security/ir.model.access.csv | 2 - .../static/description/icon.png | Bin 64413 -> 0 bytes xw_kk_preview_demo/views/views.xml | 59 ----------------- yuthon_property/views/menuitem.xml | 20 +++--- 26 files changed, 10 insertions(+), 496 deletions(-) delete mode 100644 xw_kk_preview/__init__.py delete mode 100644 xw_kk_preview/__manifest__.py delete mode 100644 xw_kk_preview/controllers/__init__.py delete mode 100644 xw_kk_preview/controllers/controllers.py delete mode 100644 xw_kk_preview/models/__init__.py delete mode 100644 xw_kk_preview/models/models.py delete mode 100644 xw_kk_preview/security/ir.model.access.csv delete mode 100644 xw_kk_preview/static/css/style.scss delete mode 100644 xw_kk_preview/static/description/icon.png delete mode 100644 xw_kk_preview/static/libs/base64.js delete mode 100644 xw_kk_preview/static/src/binary_field/kk_binary_preview.js delete mode 100644 xw_kk_preview/static/src/binary_field/kk_binary_preview.xml delete mode 100644 xw_kk_preview/static/src/binary_field/kk_preview_dialog.js delete mode 100644 xw_kk_preview/static/src/binary_field/kk_preview_dialog.xml delete mode 100644 xw_kk_preview/static/src/kk_dialog_patch.js delete mode 100644 xw_kk_preview/views/templates.xml delete mode 100644 xw_kk_preview/views/views.xml delete mode 100644 xw_kk_preview_demo/__init__.py delete mode 100644 xw_kk_preview_demo/__manifest__.py delete mode 100644 xw_kk_preview_demo/models/__init__.py delete mode 100644 xw_kk_preview_demo/models/models.py delete mode 100644 xw_kk_preview_demo/models/patch_attachment.py delete mode 100644 xw_kk_preview_demo/security/ir.model.access.csv delete mode 100644 xw_kk_preview_demo/static/description/icon.png delete mode 100644 xw_kk_preview_demo/views/views.xml diff --git a/xw_kk_preview/__init__.py b/xw_kk_preview/__init__.py deleted file mode 100644 index 511a0ca3a..000000000 --- a/xw_kk_preview/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import controllers -from . import models \ No newline at end of file diff --git a/xw_kk_preview/__manifest__.py b/xw_kk_preview/__manifest__.py deleted file mode 100644 index ccba0d429..000000000 --- a/xw_kk_preview/__manifest__.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -{ - 'name': "xw_kk_preview", - - 'summary': """ - kk file preview for odoo - """, - - 'description': """ - file preview, - kk file preview - """, - - 'author': "masterjmz", - 'website': "https://www.openerpnext.com", - - 'category': 'Apps/preview', - 'version': '16.0.0.1', - 'license': 'AGPL-3', - 'price': 9999, - - 'depends': ['base'], - - 'data': [ - 'security/ir.model.access.csv', - 'views/views.xml', - ], - - 'assets': { - 'web.assets_backend': [ - 'xw_kk_preview/static/src/binary_field/*.*', - 'xw_kk_preview/static/libs/*.*', - 'xw_kk_preview/static/src/kk_dialog_patch.js', - 'xw_kk_preview/static/css/*.*', - ] - }, -} diff --git a/xw_kk_preview/controllers/__init__.py b/xw_kk_preview/controllers/__init__.py deleted file mode 100644 index 457bae27e..000000000 --- a/xw_kk_preview/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import controllers \ No newline at end of file diff --git a/xw_kk_preview/controllers/controllers.py b/xw_kk_preview/controllers/controllers.py deleted file mode 100644 index 0d653c63c..000000000 --- a/xw_kk_preview/controllers/controllers.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# from odoo import http - - -# class XwKkPreview(http.Controller): -# @http.route('/xw_kk_preview/xw_kk_preview', auth='public') -# def index(self, **kw): -# return "Hello, world" - -# @http.route('/xw_kk_preview/xw_kk_preview/objects', auth='public') -# def list(self, **kw): -# return http.request.render('xw_kk_preview.listing', { -# 'root': '/xw_kk_preview/xw_kk_preview', -# 'objects': http.request.env['xw_kk_preview.xw_kk_preview'].search([]), -# }) - -# @http.route('/xw_kk_preview/xw_kk_preview/objects/', auth='public') -# def object(self, obj, **kw): -# return http.request.render('xw_kk_preview.object', { -# 'object': obj -# }) diff --git a/xw_kk_preview/models/__init__.py b/xw_kk_preview/models/__init__.py deleted file mode 100644 index 5305644df..000000000 --- a/xw_kk_preview/models/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import models \ No newline at end of file diff --git a/xw_kk_preview/models/models.py b/xw_kk_preview/models/models.py deleted file mode 100644 index 5a093005b..000000000 --- a/xw_kk_preview/models/models.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- - -from odoo import models, fields, api -import base64 - - -class XwKKPreview(models.AbstractModel): - """ - xw_kk_preview.xw_kk_preview - """ - _name = 'xw_kk_preview.xw_kk_preview' - _description = 'xw_kk_preview.xw_kk_preview' - - @api.model - def get_preview_url(self, res_model, res_id, field_name, file_name_field): - """ - get file info - """ - base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') - record = self.env[res_model].sudo().browse(res_id) - - file_name = None - if file_name_field: - file_name = record[file_name_field] - - if not file_name: - stream = None - try: - stream = self.env['ir.binary'].sudo()._get_stream_from( - record, field_name, False, file_name_field or 'name') - except Exception as e: - return { - 'status': 'error', - 'message': str(e), - } - file_name = stream.download_name - - # http://124.223.107.118:8012/onlinePreview - preivew_url = self.env['ir.config_parameter'].sudo().get_param('xw_kk_preview.preivew_url') - if not preivew_url: - return { - 'status': 'error', - 'message': 'please set preivew_url in system parameters', - } - - return { - 'status': 'success', - 'preview_url': preivew_url, - 'url': f'{base_url}/web/content/{res_model}/{res_id}/{field_name}/{file_name}?download=true', - } diff --git a/xw_kk_preview/security/ir.model.access.csv b/xw_kk_preview/security/ir.model.access.csv deleted file mode 100644 index 06372f500..000000000 --- a/xw_kk_preview/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_xw_kk_preview_xw_kk_preview,xw_kk_preview.xw_kk_preview,model_xw_kk_preview_xw_kk_preview,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/xw_kk_preview/static/css/style.scss b/xw_kk_preview/static/css/style.scss deleted file mode 100644 index 13b224c8c..000000000 --- a/xw_kk_preview/static/css/style.scss +++ /dev/null @@ -1,18 +0,0 @@ - -.modal-full { - width: 100% !important; - height: 100% !important; - max-width: 100%; - padding: 0 !important; - - .modal-content { - height: 100% !important; - max-height: 100% !important; - .modal-body { - > div { - height: 100% !important; - max-height: 100% !important; - } - } - } -} \ No newline at end of file diff --git a/xw_kk_preview/static/description/icon.png b/xw_kk_preview/static/description/icon.png deleted file mode 100644 index 30172b538508635b095ad78f124c7dc984a4d1f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64413 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
EqoSo* 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.Base64=r,o),e.Meteor&&(Base64=o),e.Base64=o}()}("undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:this,(function(){"use strict";const e="3.6.0",t="function"==typeof atob,r="function"==typeof btoa,o="function"==typeof Buffer,n="function"==typeof TextDecoder?new TextDecoder:void 0,a="function"==typeof TextEncoder?new TextEncoder:void 0,f=[..."ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="],i=(e=>{let t={};return e.forEach(((e,r)=>t[e]=r)),t})(f),c=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,u=String.fromCharCode.bind(String),s="function"==typeof Uint8Array.from?Uint8Array.from.bind(Uint8Array):(e,t=(e=>e))=>new Uint8Array(Array.prototype.slice.call(e,0).map(t)),d=e=>e.replace(/[+\/]/g,(e=>"+"==e?"-":"_")).replace(/=+$/m,""),l=e=>e.replace(/[^A-Za-z0-9\+\/]/g,""),h=e=>{let t,r,o,n,a="";const i=e.length%3;for(let i=0;i255||(o=e.charCodeAt(i++))>255||(n=e.charCodeAt(i++))>255)throw new TypeError("invalid character found");t=r<<16|o<<8|n,a+=f[t>>18&63]+f[t>>12&63]+f[t>>6&63]+f[63&t]}return i?a.slice(0,i-3)+"===".substring(i):a},p=r?e=>btoa(e):o?e=>Buffer.from(e,"binary").toString("base64"):h,y=o?e=>Buffer.from(e).toString("base64"):e=>{let t=[];for(let r=0,o=e.length;rt?d(y(e)):y(e),b=e=>{if(e.length<2)return(t=e.charCodeAt(0))<128?e:t<2048?u(192|t>>>6)+u(128|63&t):u(224|t>>>12&15)+u(128|t>>>6&63)+u(128|63&t);var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return u(240|t>>>18&7)+u(128|t>>>12&63)+u(128|t>>>6&63)+u(128|63&t)},g=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,B=e=>e.replace(g,b),x=o?e=>Buffer.from(e,"utf8").toString("base64"):a?e=>y(a.encode(e)):e=>p(B(e)),C=(e,t=!1)=>t?d(x(e)):x(e),m=e=>C(e,!0),U=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,F=e=>{switch(e.length){case 4:var t=((7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3))-65536;return u(55296+(t>>>10))+u(56320+(1023&t));case 3:return u((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return u((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},w=e=>e.replace(U,F),S=e=>{if(e=e.replace(/\s+/g,""),!c.test(e))throw new TypeError("malformed base64.");e+="==".slice(2-(3&e.length));let t,r,o,n="";for(let a=0;a>16&255):64===o?u(t>>16&255,t>>8&255):u(t>>16&255,t>>8&255,255&t);return n},E=t?e=>atob(l(e)):o?e=>Buffer.from(e,"base64").toString("binary"):S,v=o?e=>s(Buffer.from(e,"base64")):e=>s(E(e),(e=>e.charCodeAt(0))),D=e=>v(z(e)),R=o?e=>Buffer.from(e,"base64").toString("utf8"):n?e=>n.decode(v(e)):e=>w(E(e)),z=e=>l(e.replace(/[-_]/g,(e=>"-"==e?"+":"/"))),T=e=>R(z(e)),Z=e=>({value:e,enumerable:!1,writable:!0,configurable:!0}),j=function(){const e=(e,t)=>Object.defineProperty(String.prototype,e,Z(t));e("fromBase64",(function(){return T(this)})),e("toBase64",(function(e){return C(this,e)})),e("toBase64URI",(function(){return C(this,!0)})),e("toBase64URL",(function(){return C(this,!0)})),e("toUint8Array",(function(){return D(this)}))},I=function(){const e=(e,t)=>Object.defineProperty(Uint8Array.prototype,e,Z(t));e("toBase64",(function(e){return A(this,e)})),e("toBase64URI",(function(){return A(this,!0)})),e("toBase64URL",(function(){return A(this,!0)}))},O={version:e,VERSION:"3.6.0",atob:E,atobPolyfill:S,btoa:p,btoaPolyfill:h,fromBase64:T,toBase64:C,encode:C,encodeURI:m,encodeURL:m,utob:B,btou:w,decode:T,isValid:e=>{if("string"!=typeof e)return!1;const t=e.replace(/\s+/g,"").replace(/=+$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(t)||!/[^\s0-9a-zA-Z\-_]/.test(t)},fromUint8Array:A,toUint8Array:D,extendString:j,extendUint8Array:I,extendBuiltins:()=>{j(),I()},Base64:{}};return Object.keys(O).forEach((e=>O.Base64[e]=O[e])),O})); -//# sourceMappingURL=/sm/8bca8602e2256d240cef904e1c1df432ccfdd2a2a73f6911c60be79e526e3e1e.map \ No newline at end of file diff --git a/xw_kk_preview/static/src/binary_field/kk_binary_preview.js b/xw_kk_preview/static/src/binary_field/kk_binary_preview.js deleted file mode 100644 index 652922a1c..000000000 --- a/xw_kk_preview/static/src/binary_field/kk_binary_preview.js +++ /dev/null @@ -1,55 +0,0 @@ -/** @odoo-module **/ - -import { patch } from "@web/core/utils/patch"; -import { BinaryField } from "@web/views/fields/binary/binary_field"; -import { useOwnedDialogs, useService } from "@web/core/utils/hooks"; -import { _lt } from "@web/core/l10n/translation"; -import { KKPreviewDialog } from "./kk_preview_dialog"; - - -/** - * binary field patch - * @param {Object} param0 - */ -patch(BinaryField.prototype, "xc_utils_binary_field_patch", { - - setup() { - this._super(...arguments); - this.addDialog = useOwnedDialogs(); - this.orm = useService("orm"); - this.notification = useService("notification"); - }, - - /** - * do preview - */ - do_preview() { - - let res_id = this.props.record.data.id; - let res_model = this.props.record.resModel; - let file_name = this.props.filename; - let field_name = this.props.name; - - this.orm.call( - "xw_kk_preview.xw_kk_preview", "get_preview_url", [ - res_model, res_id, field_name, file_name]).then((result) => { - if (result && result.status == 'success') { - - let preview_url = result.preview_url; - let finalUrl = preview_url + '?url=' + encodeURIComponent(Base64.encode(result.url)); - this.addDialog(KKPreviewDialog, { - url: finalUrl, - close: () => {}, - size: 'full' - }); - } else { - this.notification.add( - this.env._t("Warning"), { - title: this.env._t('Get File Preview URL Failed!'), - type: "warning" - } - ); - } - }); - } -}); diff --git a/xw_kk_preview/static/src/binary_field/kk_binary_preview.xml b/xw_kk_preview/static/src/binary_field/kk_binary_preview.xml deleted file mode 100644 index 70f3532ab..000000000 --- a/xw_kk_preview/static/src/binary_field/kk_binary_preview.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/xw_kk_preview/static/src/binary_field/kk_preview_dialog.js b/xw_kk_preview/static/src/binary_field/kk_preview_dialog.js deleted file mode 100644 index 980ec0244..000000000 --- a/xw_kk_preview/static/src/binary_field/kk_preview_dialog.js +++ /dev/null @@ -1,24 +0,0 @@ -/** @odoo-module **/ - -import { Dialog } from "@web/core/dialog/dialog"; -import { _lt } from "@web/core/l10n/translation"; - -import { Component } from "@odoo/owl"; - -export class KKPreviewDialog extends Component {}; - -KKPreviewDialog.props = { - url: String, - close: Function, - size: { - type: String, - optional: true, - } -}; - -KKPreviewDialog.defaultProps = { - fullscreen: false, -}; - -KKPreviewDialog.components = { Dialog }; -KKPreviewDialog.template = "xc_utils.kk_preview_dialog"; \ No newline at end of file diff --git a/xw_kk_preview/static/src/binary_field/kk_preview_dialog.xml b/xw_kk_preview/static/src/binary_field/kk_preview_dialog.xml deleted file mode 100644 index caa2755f9..000000000 --- a/xw_kk_preview/static/src/binary_field/kk_preview_dialog.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -
- -
- - - -
-
- -
diff --git a/xw_kk_preview/static/src/kk_dialog_patch.js b/xw_kk_preview/static/src/kk_dialog_patch.js deleted file mode 100644 index ee9622726..000000000 --- a/xw_kk_preview/static/src/kk_dialog_patch.js +++ /dev/null @@ -1,14 +0,0 @@ -/** @odoo-module **/ - -import { Dialog } from "@web/core/dialog/dialog"; -import { patch } from "@web/core/utils/patch"; - -patch(Dialog.prototype, 'xw_kk_preview.dialog_patch', {}); - -Dialog.props = { - ...Dialog.props, - size: { - type: String, - optional: true, - } -}; diff --git a/xw_kk_preview/views/templates.xml b/xw_kk_preview/views/templates.xml deleted file mode 100644 index cea6b39ad..000000000 --- a/xw_kk_preview/views/templates.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - \ No newline at end of file diff --git a/xw_kk_preview/views/views.xml b/xw_kk_preview/views/views.xml deleted file mode 100644 index c8e242054..000000000 --- a/xw_kk_preview/views/views.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/xw_kk_preview_demo/__init__.py b/xw_kk_preview_demo/__init__.py deleted file mode 100644 index 5305644df..000000000 --- a/xw_kk_preview_demo/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import models \ No newline at end of file diff --git a/xw_kk_preview_demo/__manifest__.py b/xw_kk_preview_demo/__manifest__.py deleted file mode 100644 index ec977f4c1..000000000 --- a/xw_kk_preview_demo/__manifest__.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -{ - 'name': "preview_demo", - - 'summary': """ - Short (1 phrase/line) summary of the module's purpose, used as - subtitle on modules listing or apps.openerp.com""", - - 'description': """ - Long description of module's purpose - """, - - 'author': "My Company", - 'website': "https://www.yourcompany.com", - - 'category': 'apps/demo', - 'version': '16.0.0.1', - - 'depends': ['base', 'web'], - - 'data': [ - 'security/ir.model.access.csv', - 'views/views.xml', - ] -} diff --git a/xw_kk_preview_demo/models/__init__.py b/xw_kk_preview_demo/models/__init__.py deleted file mode 100644 index b379a50b9..000000000 --- a/xw_kk_preview_demo/models/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import models -from . import patch_attachment \ No newline at end of file diff --git a/xw_kk_preview_demo/models/models.py b/xw_kk_preview_demo/models/models.py deleted file mode 100644 index 5dbf80a5f..000000000 --- a/xw_kk_preview_demo/models/models.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -from odoo import models, fields, api - - -class preview_demo(models.Model): - _name = 'xw_kk_preview_demo.preview_demo' - _description = 'kk preview demo' - - name = fields.Char() - value = fields.Integer() - value2 = fields.Float(compute="_value_pc", store=True) - description = fields.Text() - test_preview = fields.Binary(string="test_preview") - - @api.depends('value') - def _value_pc(self): - for record in self: - record.value2 = float(record.value) / 100 diff --git a/xw_kk_preview_demo/models/patch_attachment.py b/xw_kk_preview_demo/models/patch_attachment.py deleted file mode 100644 index 01197dca0..000000000 --- a/xw_kk_preview_demo/models/patch_attachment.py +++ /dev/null @@ -1,19 +0,0 @@ - -# -*- coding: utf-8 -*- - -from odoo import models, fields, api - - -class MdContractAttachment(models.Model): - ''' - attachment - ''' - _inherit = 'ir.attachment' - - @api.model - def check(self, mode, values=None): - """ - Restricts the access to an ir.attachment, according to referred mode - """ - return True - # return super().check(mode, values) diff --git a/xw_kk_preview_demo/security/ir.model.access.csv b/xw_kk_preview_demo/security/ir.model.access.csv deleted file mode 100644 index ea0f89ddf..000000000 --- a/xw_kk_preview_demo/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_xw_kk_preview_demo_preview_demo,xw_kk_preview_demo.preview_demo,model_xw_kk_preview_demo_preview_demo,,1,1,1,1 \ No newline at end of file diff --git a/xw_kk_preview_demo/static/description/icon.png b/xw_kk_preview_demo/static/description/icon.png deleted file mode 100644 index 30172b538508635b095ad78f124c7dc984a4d1f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64413 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
EqoSo* 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 - - - - - preview_demo - xw_kk_preview_demo.preview_demo - - - - - - - - - - - - - preview_demo form - xw_kk_preview_demo.preview_demo - -
- - - - - - -
- -
- -
-
-
-
-
-
- - - preview_demo window - xw_kk_preview_demo.preview_demo - tree,form - - - - - - - - - - - - - -
- \ No newline at end of file diff --git a/yuthon_property/views/menuitem.xml b/yuthon_property/views/menuitem.xml index ad9b757e0..2a3eb9724 100644 --- a/yuthon_property/views/menuitem.xml +++ b/yuthon_property/views/menuitem.xml @@ -16,38 +16,38 @@ sequence="6" name="物业" parent="yuthon_property_menu_root"/> - - @@ -68,7 +68,7 @@ + parent="yuthon_property_menu_root"/> Date: Sat, 7 Sep 2024 12:05:46 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yuthon_property/__manifest__.py | 8 ++++- .../data/sale_renting_code_data.xml | 0 yuthon_property/models/__init__.py | 7 +++- .../models/property_assess.py | 0 .../models/property_confirm.py | 0 .../models/property_move.py | 0 .../models/property_open_rent.py | 0 .../models/property_record.py | 0 yuthon_property/security/ir.model.access.csv | 5 +++ yuthon_property/views/menuitem.xml | 36 +++++++++++++++++++ .../views/property_assess_views.xml | 0 .../views/property_confirm_views.xml | 0 .../views/property_move_views.xml | 0 .../views/property_open_rent_views.xml | 0 .../views/property_record_views.xml | 0 yuthon_sale_renting/__manifest__.py | 6 +--- yuthon_sale_renting/models/__init__.py | 6 +--- .../security/ir.model.access.csv | 6 +--- yuthon_sale_renting/views/menus.xml | 35 ------------------ 19 files changed, 57 insertions(+), 52 deletions(-) rename {yuthon_sale_renting => yuthon_property}/data/sale_renting_code_data.xml (100%) rename {yuthon_sale_renting => yuthon_property}/models/property_assess.py (100%) rename {yuthon_sale_renting => yuthon_property}/models/property_confirm.py (100%) rename {yuthon_sale_renting => yuthon_property}/models/property_move.py (100%) rename {yuthon_sale_renting => yuthon_property}/models/property_open_rent.py (100%) rename {yuthon_sale_renting => yuthon_property}/models/property_record.py (100%) rename {yuthon_sale_renting => yuthon_property}/views/property_assess_views.xml (100%) rename {yuthon_sale_renting => yuthon_property}/views/property_confirm_views.xml (100%) rename {yuthon_sale_renting => yuthon_property}/views/property_move_views.xml (100%) rename {yuthon_sale_renting => yuthon_property}/views/property_open_rent_views.xml (100%) rename {yuthon_sale_renting => yuthon_property}/views/property_record_views.xml (100%) diff --git a/yuthon_property/__manifest__.py b/yuthon_property/__manifest__.py index e0410b58d..baf0e862b 100644 --- a/yuthon_property/__manifest__.py +++ b/yuthon_property/__manifest__.py @@ -8,12 +8,18 @@ 'version': '0.1', 'license': 'LGPL-3', 'data': [ + 'data/sale_renting_code_data.xml', 'security/ir.model.access.csv', 'views/yuthon_property_views.xml', + 'views/property_assess_views.xml', + 'views/property_confirm_views.xml', + 'views/property_move_views.xml', + 'views/property_open_rent_views.xml', + 'views/property_record_views.xml', 'views/menuitem.xml', ], 'demo': [], - 'depends': ['mail'], + 'depends': ['mail', 'soong_workflow'], 'installable': True, 'application': True, } diff --git a/yuthon_sale_renting/data/sale_renting_code_data.xml b/yuthon_property/data/sale_renting_code_data.xml similarity index 100% rename from yuthon_sale_renting/data/sale_renting_code_data.xml rename to yuthon_property/data/sale_renting_code_data.xml diff --git a/yuthon_property/models/__init__.py b/yuthon_property/models/__init__.py index 2e70e1e24..5b3d1f3e6 100644 --- a/yuthon_property/models/__init__.py +++ b/yuthon_property/models/__init__.py @@ -1 +1,6 @@ -from . import yuthon_property \ No newline at end of file +from . import yuthon_property +from . import property_assess +from . import property_confirm +from . import property_move +from . import property_open_rent +from . import property_record \ No newline at end of file diff --git a/yuthon_sale_renting/models/property_assess.py b/yuthon_property/models/property_assess.py similarity index 100% rename from yuthon_sale_renting/models/property_assess.py rename to yuthon_property/models/property_assess.py diff --git a/yuthon_sale_renting/models/property_confirm.py b/yuthon_property/models/property_confirm.py similarity index 100% rename from yuthon_sale_renting/models/property_confirm.py rename to yuthon_property/models/property_confirm.py diff --git a/yuthon_sale_renting/models/property_move.py b/yuthon_property/models/property_move.py similarity index 100% rename from yuthon_sale_renting/models/property_move.py rename to yuthon_property/models/property_move.py diff --git a/yuthon_sale_renting/models/property_open_rent.py b/yuthon_property/models/property_open_rent.py similarity index 100% rename from yuthon_sale_renting/models/property_open_rent.py rename to yuthon_property/models/property_open_rent.py diff --git a/yuthon_sale_renting/models/property_record.py b/yuthon_property/models/property_record.py similarity index 100% rename from yuthon_sale_renting/models/property_record.py rename to yuthon_property/models/property_record.py diff --git a/yuthon_property/security/ir.model.access.csv b/yuthon_property/security/ir.model.access.csv index 28183f201..eb8bc63c2 100644 --- a/yuthon_property/security/ir.model.access.csv +++ b/yuthon_property/security/ir.model.access.csv @@ -1,3 +1,8 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_yuthon_property,yuthon_property,model_yuthon_property,base.group_user,1,1,1,1 +access_property_assess,property_assess,model_property_assess,base.group_user,1,1,1,1 +access_property_confirm,property_confirm,model_property_confirm,base.group_user,1,1,1,1 +access_property_move,property_move,model_property_move,base.group_user,1,1,1,1 +access_property_open_rent,property_open_rent,model_property_open_rent,base.group_user,1,1,1,1 +access_property_record,property_record,model_property_record,base.group_user,1,1,1,1 diff --git a/yuthon_property/views/menuitem.xml b/yuthon_property/views/menuitem.xml index 2a3eb9724..34f2cc8fd 100644 --- a/yuthon_property/views/menuitem.xml +++ b/yuthon_property/views/menuitem.xml @@ -64,6 +64,42 @@ parent="yuthon_property_menu" action="yuthon_property_action"/> + + + + + + + - - - - - - \ No newline at end of file From c4ee2589390963644a481576f915d5aca59615ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Sat, 7 Sep 2024 12:23:45 +0800 Subject: [PATCH 4/6] pengyuthon --- yuthon_sale_renting/__manifest__.py | 3 --- yuthon_sale_renting/views/menus.xml | 4 --- .../views/yuthon_product_template_views.xml | 26 ------------------- 3 files changed, 33 deletions(-) delete mode 100644 yuthon_sale_renting/views/menus.xml delete mode 100644 yuthon_sale_renting/views/yuthon_product_template_views.xml diff --git a/yuthon_sale_renting/__manifest__.py b/yuthon_sale_renting/__manifest__.py index e01e8eb6e..d47ab333b 100644 --- a/yuthon_sale_renting/__manifest__.py +++ b/yuthon_sale_renting/__manifest__.py @@ -16,9 +16,6 @@ 'security/ir.model.access.csv', 'views/yuthon_res_partner_views.xml', 'views/contacts_inherit_menu_views.xml', - - 'views/yuthon_product_template_views.xml', - 'views/menus.xml', ], 'installable': True, 'application': True, diff --git a/yuthon_sale_renting/views/menus.xml b/yuthon_sale_renting/views/menus.xml deleted file mode 100644 index 75cafa13d..000000000 --- a/yuthon_sale_renting/views/menus.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/yuthon_sale_renting/views/yuthon_product_template_views.xml b/yuthon_sale_renting/views/yuthon_product_template_views.xml deleted file mode 100644 index 562ac3dfd..000000000 --- a/yuthon_sale_renting/views/yuthon_product_template_views.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - product.template.inherit.property.form - product.template - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 477e22833eec10571d0d3bd2e72fb12ea5d801ae Mon Sep 17 00:00:00 2001 From: zhouzhou <123@qq.com> Date: Sat, 7 Sep 2024 16:42:33 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/yuthon_hr_employee.py | 16 ++++- .../views/yuthon_hr_employee_views.xml | 69 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py index 11cfa7472..5cb0e39e4 100644 --- a/yuthon_hr_employee/models/yuthon_hr_employee.py +++ b/yuthon_hr_employee/models/yuthon_hr_employee.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from odoo import api, fields, models from datetime import datetime +from odoo.exceptions import UserError, ValidationError nation_list = [('a', '汉族'), ('b', '壮族'), ('v', '满族'), ('d', '回族'), ('e', '苗族'), ('f', '维吾尔族'), ('g', '土家族'), ('h', '彝族'), ('i', '蒙古族'), ('j', '藏族'), ('k', '布依族'), ('l', '侗族'), @@ -34,7 +35,7 @@ class YuthonHrEmployee(models.Model): confirmation_date = fields.Date(string="转正时间") company_old = fields.Char(string="司龄", compute='_compute_company_old') user_sex = fields.Selection([('girl', '女'), ('boy', '男')], string="性别") - user_state = fields.Selection([('in', '在职'), ('leave', '离职'), ('withdraw', '退休')], string="员工状态") + user_state = fields.Selection([('in', '在职'), ('leave', '离职'), ('withdraw', '退休')], string="员工状态",compute='_compute_user_state') user_number_start_time = fields.Date(string="身份中有效开始时间") user_number_end_time = fields.Date(string="身份证有效到期时间") nation = fields.Selection(nation_list, string="民族") @@ -159,3 +160,16 @@ class YuthonHrEmployee(models.Model): record.retire_years = 0 else: record.retire_years = 0 + + @api.depends('new_start_contract_data', 'new_end_contract_data') + def _compute_user_state(self): + for record in self: + today = datetime.now().date() + if record.new_start_contract_data >= record.new_end_contract_data: + raise ValidationError('合同开始日期不能大于合同结束日期') + if record.new_start_contract_data <= today <= record.new_end_contract_data: + record.user_state = 'in' + else: + record.user_state = 'leave' + + diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml index 3c5e8b3b6..9b22dbde4 100644 --- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml +++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml @@ -203,6 +203,35 @@ 上级领导 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -213,4 +242,44 @@ code action = model.action_hr_employee() + + + + 在职 + hr.employee + kanban,tree,form + [('user_state','=','in')] + + + + 离职 + hr.employee + kanban,tree,form + [('user_state','=','leave')] + + + + 退休 + hr.employee + kanban,tree,form + [('user_state','=','withdraw')] + + + + + + + \ No newline at end of file From 086c2b3f1072a4d09102cdda91d6ed9b681f613c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Sun, 8 Sep 2024 20:24:41 +0800 Subject: [PATCH 6/6] pengyuthon --- soong_workflow/__manifest__.py | 1 + soong_workflow/models/soong_workflow.py | 23 +- soong_workflow/models/soong_workflow_mixin.py | 50 ++- soong_workflow/models/soong_workflow_node.py | 6 +- soong_workflow/security/ir.model.access.csv | 4 +- soong_workflow/views/soong_note_views.xml | 2 +- soong_workflow/views/soong_workflow_views.xml | 10 +- soong_workflow/wizard/__init__.py | 3 + .../wizard/soong_transmitted_wizard.py | 18 + .../wizard/soong_transmitted_wizard_views.xml | 19 + .../views/all_attendance_menu.xml | 3 +- .../views/attendance_iot_manager_views.xml | 2 +- yuthon_hr_employee/__manifest__.py | 3 +- .../data/employee_code_data.xml | 9 + .../data/hr_department_data.xml | 138 ------ yuthon_hr_employee/data/user_role_data.xml | 396 ------------------ .../models/yuthon_hr_department.py | 2 + .../models/yuthon_hr_employee.py | 32 +- .../views/yuthon_hr_department_views.xml | 1 + .../views/yuthon_hr_employee_views.xml | 46 +- yuthon_party/views/menuitem.xml | 141 +++++-- .../views/yuthon_performance_menus.xml | 22 +- yuthon_property/__manifest__.py | 1 + yuthon_property/models/__init__.py | 3 +- yuthon_property/models/property_type.py | 39 ++ yuthon_property/models/yuthon_property.py | 10 +- yuthon_property/security/ir.model.access.csv | 1 + yuthon_property/views/menuitem.xml | 90 ++-- yuthon_property/views/property_type_views.xml | 22 + .../views/yuthon_property_views.xml | 42 +- .../models/yuthon_product_template.py | 27 -- .../views/contacts_inherit_menu_views.xml | 20 +- yuthon_tianhe/__manifest__.py | 3 - yuthon_tianhe/views/menuitem_sequence.xml | 113 ----- yuthon_work/views/menuitem.xml | 8 +- yuthon_work_brand/__manifest__.py | 25 +- yuthon_work_brand/models/__init__.py | 1 + yuthon_work_brand/models/yuthon_none.py | 7 + .../security/ir.model.access.csv | 3 + yuthon_work_brand/static/description/hr.png | Bin 0 -> 4910 bytes yuthon_work_brand/views/hr_menus.xml | 314 ++++++++++++++ yuthon_work_brand/views/work_menus.xml | 166 ++++++++ yuthon_work_brand/views/yuthon_none_views.xml | 18 + 43 files changed, 928 insertions(+), 916 deletions(-) create mode 100644 soong_workflow/wizard/soong_transmitted_wizard.py create mode 100644 soong_workflow/wizard/soong_transmitted_wizard_views.xml create mode 100644 yuthon_hr_employee/data/employee_code_data.xml delete mode 100644 yuthon_hr_employee/data/hr_department_data.xml delete mode 100644 yuthon_hr_employee/data/user_role_data.xml create mode 100644 yuthon_property/models/property_type.py create mode 100644 yuthon_property/views/property_type_views.xml delete mode 100644 yuthon_sale_renting/models/yuthon_product_template.py delete mode 100644 yuthon_tianhe/views/menuitem_sequence.xml create mode 100644 yuthon_work_brand/models/yuthon_none.py create mode 100644 yuthon_work_brand/security/ir.model.access.csv create mode 100644 yuthon_work_brand/static/description/hr.png create mode 100644 yuthon_work_brand/views/hr_menus.xml create mode 100644 yuthon_work_brand/views/work_menus.xml create mode 100644 yuthon_work_brand/views/yuthon_none_views.xml diff --git a/soong_workflow/__manifest__.py b/soong_workflow/__manifest__.py index 646266375..05ce54166 100644 --- a/soong_workflow/__manifest__.py +++ b/soong_workflow/__manifest__.py @@ -22,6 +22,7 @@ "views/soong_workflow_record.xml", "views/soong_approval_group.xml", 'wizard/approval_notice_wizard_views.xml', + 'wizard/soong_transmitted_wizard_views.xml', "wizard/soong_workflow_comment_wizard_view.xml", "templates/soong_workflow_templates.xml", ], diff --git a/soong_workflow/models/soong_workflow.py b/soong_workflow/models/soong_workflow.py index 3e9a6c682..9e8652b10 100644 --- a/soong_workflow/models/soong_workflow.py +++ b/soong_workflow/models/soong_workflow.py @@ -45,27 +45,16 @@ class SoongWorkflow(models.Model): domain=MODEL_DOMAIN, help="Enter business model you would like to modify its workflow.", ) - node_ids = fields.One2many( - comodel_name="soong.workflow.node", inverse_name="workflow_id", string="Nodes" - ) - link_ids = fields.One2many( - comodel_name="soong.workflow.link", inverse_name="workflow_id", string="Links" - ) - remove_default_btn_until_end = fields.Boolean( - string="是否覆盖表头按钮状态", default=False - ) - is_enable_return_button = fields.Boolean( - string="是否启用收回", default=True - ) - - current_stage_highlight_color = fields.Char( - default="rgb(0, 255, 255)", - help="The color to highlight the current stage on flow", - ) + node_ids = fields.One2many(comodel_name="soong.workflow.node", inverse_name="workflow_id", string="Nodes") + link_ids = fields.One2many(comodel_name="soong.workflow.link", inverse_name="workflow_id", string="Links") + remove_default_btn_until_end = fields.Boolean(string="是否覆盖表头按钮状态", default=False) + current_stage_highlight_color = fields.Char(default="rgb(0, 255, 255)",help="The color to highlight the current stage on flow",) start_time = fields.Datetime(string="生效日期", copy=False, default=fields.Datetime.now) end_time = fields.Datetime(string="失效日期", copy=False) is_enable = fields.Boolean(string="是否启用", default="False", compute="compute_is_enable", store=True) + is_enable_return_button = fields.Boolean(string="是否启用收回", default=True) + is_enable_transmitted_button = fields.Boolean(string="是否启用转交", default=True) approvals_group_id = fields.Many2one('soong.approval.group', string="审批分组") def copy(self, default=None): diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py index 2a8c90990..eb1d71d0b 100644 --- a/soong_workflow/models/soong_workflow_mixin.py +++ b/soong_workflow/models/soong_workflow_mixin.py @@ -242,14 +242,17 @@ class SoongWorkflowMixin(models.AbstractModel): res = self._update_fields_view(view_type, res) # res = self._add_state_tree_view(view_type, res) res = self._add_soong_workflow_log(view_type, res, params) - # 收回 + # todo 后许可拓展退回层级 res = self._add_return_button(view_type, res) + # 转交 如果一条链路直接跳转,如果多条链路选择跳转 + # res = self._add_transmitted_button(view_type, res) return res + # 收回逻辑 def _add_return_button(self, view_type, res): model = self._name wkf_obj = self.env["soong.workflow"] - wkf_rec = wkf_obj.search([("model_id", "=", model)]) + wkf_rec = wkf_obj.search([("model_id", "=", model), ('is_enable', '=', True)]) if not wkf_rec.is_enable_return_button: return res @@ -260,9 +263,9 @@ class SoongWorkflowMixin(models.AbstractModel): header_el = header_el[0] if header_el else False if header_el: button = etree.Element("button", { - "name": "action_return", # 这里定义了按钮执行的服务器端动作 - "type": "object", # 触发自定义对象动作 - "string": "收回", # 按钮显示的名称 + "name": "action_return", + "type": "object", + "string": "收回", "class": "btn-primary", # 按钮的样式 # "icon": "fa-undo", # 按钮图标 (如果需要) }) @@ -328,6 +331,35 @@ class SoongWorkflowMixin(models.AbstractModel): # btn_invisible = btn_invisible + " or " + button.attrib["invisible"] # button.set("invisible", btn_invisible) + # 转交 + def _add_transmitted_button(self, view_type, res): + model = self._name + wkf_obj = self.env["soong.workflow"] + wkf_rec = wkf_obj.search([("model_id", "=", model), ('is_enable', '=', True)]) + + if not wkf_rec.is_enable_transmitted_button: + return res + + arch = etree.fromstring(res["arch"]) + if view_type == "form": + header_el = arch.xpath("//form/header") + header_el = header_el[0] if header_el else False + if header_el: + button = etree.Element("button", { + "name": "action_transmitted", + "type": "object", + "string": "转交", + "class": "btn-primary", # 按钮的样式 + }) + header_el.append(button) + res["arch"] = etree.tostring(arch, encoding="unicode").replace("\t", "") + return res + + def action_transmitted(self): + # 判断链路是一个就跳转 + # 是多个就弹窗选择 + pass + def _remove_default_header(self, view_type, res): """ Removes default header element from form view. @@ -337,7 +369,7 @@ class SoongWorkflowMixin(models.AbstractModel): """ model = self._name wkf_obj = self.env["soong.workflow"] - wkf_rec = wkf_obj.search([("model_id", "=", model)]) + wkf_rec = wkf_obj.search([("model_id", "=", model), ('is_enable', '=', True)]) if not wkf_rec.remove_default_btn_until_end: return res @@ -441,7 +473,7 @@ class SoongWorkflowMixin(models.AbstractModel): header_el = etree.Element("header") form_el.insert(0, header_el) # Construct Buttons & Fields Tags - wkf_rec = wkf_obj.search([("model_id", "=", model)]) + wkf_rec = wkf_obj.search([("model_id", "=", model), ('is_enable', '=', True)]) for node in wkf_rec.node_ids: for button in node.button_ids: # Check Condition Code @@ -528,7 +560,7 @@ class SoongWorkflowMixin(models.AbstractModel): model = self._name visible_seq = [] arch = etree.fromstring(res["arch"]) - wkf_rec = wkf_obj.search([("model_id", "=", model)]) + wkf_rec = wkf_obj.search([("model_id", "=", model), ('is_enable', '=', True)]) # Find header & ADD state if view_type == "form": @@ -618,7 +650,7 @@ class SoongWorkflowMixin(models.AbstractModel): # Variables model = self._name uid = self._uid - wkf_rec = wkf_obj.search([("model_id", "=", model)]) + wkf_rec = wkf_obj.search([("model_id", "=", model), ('is_enable', '=', True)]) arch = etree.fromstring(res["arch"]) # Helper Functions diff --git a/soong_workflow/models/soong_workflow_node.py b/soong_workflow/models/soong_workflow_node.py index 706168c81..40df51c27 100644 --- a/soong_workflow/models/soong_workflow_node.py +++ b/soong_workflow/models/soong_workflow_node.py @@ -129,9 +129,7 @@ class SoongWorkflowNode(models.Model): compute="_compute_custom_colors", readonly=True, string="Label Color" ) - @api.depends( - "bg_color", "label_color", "use_custom_colors", "flow_start", "flow_end" - ) + @api.depends("bg_color", "label_color", "use_custom_colors", "flow_start", "flow_end") def _compute_custom_colors(self): for rec in self: if rec.use_custom_colors: @@ -290,7 +288,7 @@ class SoongWorkflowNodeButton(models.Model): rec.workflow_id = ( self.env["soong.workflow"] .sudo() - .search([("model_id", "=", model_id)]) + .search([("model_id", "=", model_id), ('is_enable', '=', 'yes')]) ) @api.constrains("btn_key") diff --git a/soong_workflow/security/ir.model.access.csv b/soong_workflow/security/ir.model.access.csv index ceb16fda0..bd24009db 100644 --- a/soong_workflow/security/ir.model.access.csv +++ b/soong_workflow/security/ir.model.access.csv @@ -23,4 +23,6 @@ access_soong_approval_group,soong_approval_group,model_soong_approval_group,soon access_soong_approval_notice_wizard,soong_approval_notice_wizard,model_soong_approval_notice_wizard,base.group_user,1,1,1,1 access_soong_workflow_log_user,soong_workflow_log_user,model_soong_workflow_log,soong_workflow.group_soong_workflow_user,1,1,1,1 -access_soong_workflow_comment_wizard_user,soong_workflow_comment_wizard_user,model_soong_workflow_comment_wizard,soong_workflow.group_soong_workflow_user,1,1,1,1 \ No newline at end of file +access_soong_workflow_comment_wizard_user,soong_workflow_comment_wizard_user,model_soong_workflow_comment_wizard,soong_workflow.group_soong_workflow_user,1,1,1,1 + +access_soong_approval_transmitted_wizard,soong_approval_transmitted_wizard,model_soong_approval_transmitted_wizard,soong_workflow.group_soong_workflow_user,1,1,1,1 \ No newline at end of file diff --git a/soong_workflow/views/soong_note_views.xml b/soong_workflow/views/soong_note_views.xml index f2c1de165..9e3d00a56 100644 --- a/soong_workflow/views/soong_note_views.xml +++ b/soong_workflow/views/soong_note_views.xml @@ -39,7 +39,7 @@ action="soong_note_action"/> diff --git a/soong_workflow/views/soong_workflow_views.xml b/soong_workflow/views/soong_workflow_views.xml index ca069047d..502a5ee36 100644 --- a/soong_workflow/views/soong_workflow_views.xml +++ b/soong_workflow/views/soong_workflow_views.xml @@ -90,10 +90,10 @@ tree,form - + + + + + diff --git a/soong_workflow/wizard/__init__.py b/soong_workflow/wizard/__init__.py index 442fe0891..b8d44c6f0 100644 --- a/soong_workflow/wizard/__init__.py +++ b/soong_workflow/wizard/__init__.py @@ -3,6 +3,9 @@ from . import approval_notice_wizard +from . import soong_transmitted_wizard from . import soong_workflow_comment_wizard + + diff --git a/soong_workflow/wizard/soong_transmitted_wizard.py b/soong_workflow/wizard/soong_transmitted_wizard.py new file mode 100644 index 000000000..3fa508c64 --- /dev/null +++ b/soong_workflow/wizard/soong_transmitted_wizard.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from odoo import api, fields, models, tools, _ +from datetime import datetime, date, time, timedelta +from odoo.tools.safe_eval import safe_eval +from odoo.exceptions import ValidationError, UserError +import logging + +_logger = logging.getLogger(__name__) + + +class SoongApprovalTransmittedWizard(models.TransientModel): + _name = 'soong.approval.transmitted.wizard' + _description = """ 转交弹窗 """ + + name = fields.Char(string='名称') + + def confirm(self): + pass \ No newline at end of file diff --git a/soong_workflow/wizard/soong_transmitted_wizard_views.xml b/soong_workflow/wizard/soong_transmitted_wizard_views.xml new file mode 100644 index 000000000..162ea4ab4 --- /dev/null +++ b/soong_workflow/wizard/soong_transmitted_wizard_views.xml @@ -0,0 +1,19 @@ + + + + 一键转交 + soong.approval.transmitted.wizard + +
+ + + + +
+
+
+
+
+
\ No newline at end of file diff --git a/yuthon_hr_attendance/views/all_attendance_menu.xml b/yuthon_hr_attendance/views/all_attendance_menu.xml index 449dcfc7c..58d2bfaf8 100644 --- a/yuthon_hr_attendance/views/all_attendance_menu.xml +++ b/yuthon_hr_attendance/views/all_attendance_menu.xml @@ -24,5 +24,6 @@ sequence="15" action="attendance_iot_manager_action"/> - + \ No newline at end of file diff --git a/yuthon_hr_attendance/views/attendance_iot_manager_views.xml b/yuthon_hr_attendance/views/attendance_iot_manager_views.xml index 7d02ea86e..6b6b07b99 100644 --- a/yuthon_hr_attendance/views/attendance_iot_manager_views.xml +++ b/yuthon_hr_attendance/views/attendance_iot_manager_views.xml @@ -25,7 +25,7 @@ - 假期类型配置 + 考勤机设备管理 attendance.iot.manager tree diff --git a/yuthon_hr_employee/__manifest__.py b/yuthon_hr_employee/__manifest__.py index 45d2e9028..e5536f65c 100644 --- a/yuthon_hr_employee/__manifest__.py +++ b/yuthon_hr_employee/__manifest__.py @@ -13,9 +13,8 @@ 'website': 'https://www.pengyuthon.com', 'depends': ['base', 'hr'], 'data': [ - # 'data/hr_department_data.xml', - # 'data/user_role_data.xml', 'data/yuthon.job.lv.csv', + 'data/employee_code_data.xml', 'security/ir.model.access.csv', 'views/yuthon_hr_employee_views.xml', 'views/yuthon_hr_department_views.xml', diff --git a/yuthon_hr_employee/data/employee_code_data.xml b/yuthon_hr_employee/data/employee_code_data.xml new file mode 100644 index 000000000..d65994304 --- /dev/null +++ b/yuthon_hr_employee/data/employee_code_data.xml @@ -0,0 +1,9 @@ + + + + 员工编号 + employee_code + US%(y)s%(month)s%(day)s + 3 + + diff --git a/yuthon_hr_employee/data/hr_department_data.xml b/yuthon_hr_employee/data/hr_department_data.xml deleted file mode 100644 index 1935d5e05..000000000 --- a/yuthon_hr_employee/data/hr_department_data.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - - 天河投资 - False - False - - - - 新兴协会 - 广州市天河区龙口西路90号天成大厦3楼东侧 - True - False - - - - 科创中心 - 广州市天河区龙口西路90号天成大厦4楼东侧 - True - False - - - - 管理员 - 广州市天河区龙口西路90号天成大厦5楼东侧 - False - False - - - - 外派 - 广州市天河区龙口西路90号天成大厦6楼东侧 - False - False - - - - 粮储公司 - 广州市天河区龙口西路90号天成大厦7楼东侧 - False - False - - - - 商业总公司 - 广州市天河区龙口西路90号天成大厦8楼东侧 - False - False - - - - 领导班子 - 广州市天河区龙口西路90号天成大厦9楼东侧 - False - False - - - - - 财务部 - 广州市天河区龙口西路90号天成大厦10楼东侧 - False - False - - - - - 办公室 - 广州市天河区龙口西路90号天成大厦11楼东侧 - False - False - - - - - 企业管理部 - 广州市天河区龙口西路90号天成大厦12楼东侧 - False - False - - - - - 租务二部(原物业经营部) - 广州市天河区龙口西路90号天成大厦13楼东侧 - False - False - - - - - 资本运营部 - 广州市天河区龙口西路90号天成大厦14楼东侧 - False - False - - - - - 投资发展部 - 广州市天河区龙口西路90号天成大厦15楼东侧 - False - False - - - - - 党群人力资源部 - 广州市天河区龙口西路90号天成大厦16楼东侧 - False - False - - - - - 风控审计部 - 广州市天河区龙口西路90号天成大厦17楼东侧 - False - False - - - - - 人事部 - 广州市天河区龙口西路90号天成大厦18楼东侧 - False - False - - - - - 厨位人员 - 广州市天河区龙口西路90号天成大厦19楼东侧 - False - False - - - \ No newline at end of file diff --git a/yuthon_hr_employee/data/user_role_data.xml b/yuthon_hr_employee/data/user_role_data.xml deleted file mode 100644 index 19fc7dd2f..000000000 --- a/yuthon_hr_employee/data/user_role_data.xml +++ /dev/null @@ -1,396 +0,0 @@ - - - - 普通员工 - system_global_user - - - - 常务副秘书长 - departmental_role - association - - - - 总经理 - system_global_user - - - - 理事长 - system_global_user - - - - 常务副会长 - system_global_user - - - - 副总经理 - system_global_user - - - - 监事会主席 - system_global_user - - - - 秘书处办公室主任 - system_global_user - - - - 分管领导 - system_global_user - - - - 部门副经理 - system_global_user - - - - 秘书处办公室副主任 - system_global_user - - - - 部门经理 - system_global_user - - - - 各企业班子(发文) - system_global_user - - - - 试用期员工 - system_global_user - - - - 物业部副总经理 - departmental_role - rent2 - - - - 理事会成员 - system_global_user - - - - 安全办成员 - system_global_user - - - - 实习 - system_global_user - - - - 副院长 - system_global_user - - - - 院长 - system_global_user - - - - 党员 - system_global_user - - - - 科创中心 - system_global_user - - - - 需考勤人员 - system_global_user - - - - 财务(物业) - system_global_user - - - - 集团安委会 - system_global_user - - - - 天投城建安全办 - system_global_user - - - - 集团安全办 - system_global_user - - - - 天投城建安委会 - system_global_user - - - - 天投城建安委会 - system_global_user - - - - 公司领导 - system_global_user - - - - 领导班子 - system_global_user - - - - 董事长 - system_global_user - - - - 执行董事 - departmental_role - storage_company - - - - 秘书长 - departmental_role - association - - - - 副主任 - system_global_user - - - - 工会委员 - system_global_user - - - - 风控审计经理 - departmental_role - risk_department - - - - 风控管理岗 - departmental_role - risk_department - - - - 系统管理员 - oa_admin - - - - 安全办副主任 - system_global_user - - - - 投融资部经理 - departmental_role - capital_department - - - - 投融资部副总经理 - departmental_role - capital_department - - - - 投融资部副经理 - departmental_role - capital_department - - - - 投融资发展部 - departmental_role - capital_department - - - - 项目开发部 - departmental_role - investment_department - - - - 项目部经理 - departmental_role - investment_department - - - - 人事专员 - departmental_role - party_department - - - - 党建专员 - departmental_role - party_department - - - - 人事管理员 - departmental_role - party_department - - - - 人事主管 - departmental_role - party_department - - - - 物业部 - departmental_role - rent2 - - - - 物业部经理 - departmental_role - rent2 - - - - 物业部副经理 - departmental_role - rent2 - - - - 工程主管 - departmental_role - rent2 - - - - 企业管理部 - departmental_role - enterprise_department - - - - 企业管理部经理 - departmental_role - enterprise_department - - - - 财务部 - departmental_role - accounting_department - - - - 财务部经理 - departmental_role - accounting_department - - - - 财务部副经理 - departmental_role - accounting_department - - - - 会计 - departmental_role - accounting_department - - - - 出纳 - departmental_role - accounting_department - - - - 办公室 - departmental_role - office - - - - 主任 - departmental_role - office - - - - 办公室副主任 - departmental_role - office - - - - 公文管理员 - departmental_role - office - - - - 厨卫人员 - departmental_role - office - - - - 办公库管 - departmental_role - office - - - - 子企业人员 - departmental_role - office - - - - 信息发布员 - departmental_role - office - - - - 交通安全员 - system_global_user - - - - - 外派 - departmental_role - expatriate - - - - \ No newline at end of file diff --git a/yuthon_hr_employee/models/yuthon_hr_department.py b/yuthon_hr_employee/models/yuthon_hr_department.py index cb6b1e21a..a9606bd1e 100644 --- a/yuthon_hr_employee/models/yuthon_hr_department.py +++ b/yuthon_hr_employee/models/yuthon_hr_department.py @@ -4,6 +4,7 @@ from odoo import api, fields, models class YuthonHrDepartment(models.Model): _inherit = "hr.department" + _order = 'department_code' department_phone = fields.Char(string="部门电话") department_fax = fields.Char(string="部门传真") @@ -13,3 +14,4 @@ class YuthonHrDepartment(models.Model): is_global_department = fields.Boolean(string="是否全局部门") create_time = fields.Datetime(string="创建时间", default=fields.Datetime.now) end_time = fields.Datetime(string="结束时间") + department_code = fields.Char(string="部门序号") diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py index 5cb0e39e4..79316a0ea 100644 --- a/yuthon_hr_employee/models/yuthon_hr_employee.py +++ b/yuthon_hr_employee/models/yuthon_hr_employee.py @@ -20,13 +20,15 @@ class YuthonHrEmployee(models.Model): 对原模型数据的隐藏,字段的开发和添加 """ _inherit = "hr.employee" + _order = 'number' # odoo里是这样做的,一个用户可以多个公司绑定多个员工,每个员工都有自己的部门和岗位 - number = fields.Char(string="编号") + number = fields.Char(string="序号", store=True) + user_number = fields.Char(string="员工编号", default=lambda self: self.env['ir.sequence'].next_by_code('employee_code')) use_user_type = fields.Selection([('formal', '正式职工'), ('labor', '劳务协议'), ('part_time', '兼职协议'), ('employment', '兼职用工')], string="用工形式") - user_number = fields.Char(string="员工编号") + job_lv_id = fields.Many2one('yuthon.job.lv', string="最新职级") # 个人信息 user_salary = fields.Float(string="基本工资") @@ -35,7 +37,8 @@ class YuthonHrEmployee(models.Model): confirmation_date = fields.Date(string="转正时间") company_old = fields.Char(string="司龄", compute='_compute_company_old') user_sex = fields.Selection([('girl', '女'), ('boy', '男')], string="性别") - user_state = fields.Selection([('in', '在职'), ('leave', '离职'), ('withdraw', '退休')], string="员工状态",compute='_compute_user_state') + user_state = fields.Selection([('in', '在职'), ('leave', '离职'), ('withdraw', '退休')], + string="员工状态", compute='_compute_user_state') user_number_start_time = fields.Date(string="身份中有效开始时间") user_number_end_time = fields.Date(string="身份证有效到期时间") nation = fields.Selection(nation_list, string="民族") @@ -44,7 +47,8 @@ class YuthonHrEmployee(models.Model): user_type = fields.Char(string="人员类别") retire_date = fields.Date(string="退休日期") retire_years = fields.Integer(string="离退休年限", compute='_compute_retire_years') - political_aspects = fields.Selection([('cpc_dang', '中共党员'), ('nld', '民盟'), ('league_member', '共青团员'), ('people', '群众')], string="政治面貌") + political_aspects = fields.Selection([('cpc_dang', '中共党员'), ('nld', '民盟'), + ('league_member', '共青团员'), ('people', '群众')], string="政治面貌") dang_data = fields.Date(string="入团(党)时间") user_origin = fields.Char(string="籍贯") user_location = fields.Char(string="户口所在地") @@ -102,6 +106,11 @@ class YuthonHrEmployee(models.Model): # 技能证书管理 skills_certificates_ids = fields.One2many('yuthon.skills.certificates.line', 'employee_id', string="教育经历明细行") + @api.onchange('number') + def onchange_number(self): + if self.department_id.department_code: + self.number = self.department_id.department_code + self.number + def action_hr_employee(self): return { "type": "ir.actions.act_window", @@ -165,11 +174,16 @@ class YuthonHrEmployee(models.Model): def _compute_user_state(self): for record in self: today = datetime.now().date() - if record.new_start_contract_data >= record.new_end_contract_data: - raise ValidationError('合同开始日期不能大于合同结束日期') - if record.new_start_contract_data <= today <= record.new_end_contract_data: - record.user_state = 'in' + start_time = record.new_start_contract_data + end_time = record.new_end_contract_data + if start_time and end_time: + if start_time >= end_time: + raise ValidationError('合同开始日期不能大于合同结束日期') + if start_time <= today <= end_time: + record.user_state = 'in' + else: + record.user_state = 'leave' else: - record.user_state = 'leave' + record.user_state = '' diff --git a/yuthon_hr_employee/views/yuthon_hr_department_views.xml b/yuthon_hr_employee/views/yuthon_hr_department_views.xml index 7bd5f6286..8f2c8fd4e 100644 --- a/yuthon_hr_employee/views/yuthon_hr_department_views.xml +++ b/yuthon_hr_employee/views/yuthon_hr_department_views.xml @@ -7,6 +7,7 @@ + diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml index 9b22dbde4..5f8c07127 100644 --- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml +++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml @@ -200,9 +200,6 @@ 1 - - 上级领导 - @@ -232,6 +229,9 @@ + + + @@ -242,44 +242,4 @@ code action = model.action_hr_employee() - - - - 在职 - hr.employee - kanban,tree,form - [('user_state','=','in')] - - - - 离职 - hr.employee - kanban,tree,form - [('user_state','=','leave')] - - - - 退休 - hr.employee - kanban,tree,form - [('user_state','=','withdraw')] - - - - - - - \ No newline at end of file diff --git a/yuthon_party/views/menuitem.xml b/yuthon_party/views/menuitem.xml index 832b1b221..44f638cdb 100644 --- a/yuthon_party/views/menuitem.xml +++ b/yuthon_party/views/menuitem.xml @@ -1,50 +1,133 @@ - 党群 - yuthon.party - tree,form + 党建 + yuthon.party + tree,form - - - + - - - + + + + + + + + + + + + - - - - - - + + + + + + + + \ No newline at end of file diff --git a/yuthon_performance/views/yuthon_performance_menus.xml b/yuthon_performance/views/yuthon_performance_menus.xml index 3ae519d36..09566a447 100644 --- a/yuthon_performance/views/yuthon_performance_menus.xml +++ b/yuthon_performance/views/yuthon_performance_menus.xml @@ -47,17 +47,17 @@ action="yuthon_index_management_action"/> - - - - - - - - - - - + + diff --git a/yuthon_property/__manifest__.py b/yuthon_property/__manifest__.py index baf0e862b..4af517a72 100644 --- a/yuthon_property/__manifest__.py +++ b/yuthon_property/__manifest__.py @@ -16,6 +16,7 @@ 'views/property_move_views.xml', 'views/property_open_rent_views.xml', 'views/property_record_views.xml', + 'views/property_type_views.xml', 'views/menuitem.xml', ], 'demo': [], diff --git a/yuthon_property/models/__init__.py b/yuthon_property/models/__init__.py index 5b3d1f3e6..82ac8c5b5 100644 --- a/yuthon_property/models/__init__.py +++ b/yuthon_property/models/__init__.py @@ -3,4 +3,5 @@ from . import property_assess from . import property_confirm from . import property_move from . import property_open_rent -from . import property_record \ No newline at end of file +from . import property_record +from . import property_type diff --git a/yuthon_property/models/property_type.py b/yuthon_property/models/property_type.py new file mode 100644 index 000000000..14806844e --- /dev/null +++ b/yuthon_property/models/property_type.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, fields, api, exceptions, _ +from datetime import datetime +from odoo.exceptions import UserError, ValidationError + + +class PropertyType(models.Model): + _name = 'property.type' + _description = '物业状态' + _rec_name = 'name' + + name = fields.Char(string='名称') + create_time = fields.Datetime(string="创建日期", default=lambda self: fields.Datetime.now()) + start_time = fields.Datetime(string="生效日期") + end_time = fields.Datetime(string="终止日期") + is_enable = fields.Boolean(string="是否启用", compute='_compute_is_enable') + + @api.depends('start_time', 'end_time') + def _compute_is_enable(self): + for rec in self: + if rec.start_time >= rec.end_time: + raise ValidationError('合同开始日期不能大于合同结束日期') + if rec.start_time and rec.end_time: + if rec.start_time < datetime.now() < rec.end_time: + rec.is_enable = True + else: + rec.is_enable = False + else: + rec.is_enable = False + + + + + + + + diff --git a/yuthon_property/models/yuthon_property.py b/yuthon_property/models/yuthon_property.py index 549e7daa1..0312fde28 100644 --- a/yuthon_property/models/yuthon_property.py +++ b/yuthon_property/models/yuthon_property.py @@ -16,13 +16,15 @@ class YuthonProperty(models.Model): property_use_id = fields.Integer(string="物业用途ID") property_asset_type = fields.Selection([('plant', '厂房'), ('goods', '商品'), ('office', '写字楼'), ('dormitory', '宿舍'), - ('rig','设备等管理用房')], string='资产类型') + ('rig', '设备等管理用房')], string='资产类型') property_asset_use = fields.Selection([('hire', '出租'), ('personal', '自用')], string='资产用途') property_use_type = fields.Selection([('work', '办公'), ('dorm', '宿舍'), ('cater', '餐饮')], string='使用类型') property_use_time = fields.Datetime(string="使用年限") - state = fields.Selection([('could', '可租'), ('done', '已租'), ('none', '空置')], string='状态') + property_rent_type = fields.Selection([('could', '可租'), ('no', '不可租'), + ('done', '已租'), ('none', '空置')], string="出租状态") + state_id = fields.Many2one('property.type', string='状态') property_source = fields.Selection([('cut', '划入'), ('self', '自建'), ('replace', '置换'), ('buy', '购入'), - ('entrust','委托'),('Rent','租入')], string='来源') + ('entrust', '委托'), ('Rent', '租入')], string='来源') image_1920 = fields.Image(string="图片") - description = fields.Html(string="描述") \ No newline at end of file + description = fields.Html(string="描述") diff --git a/yuthon_property/security/ir.model.access.csv b/yuthon_property/security/ir.model.access.csv index eb8bc63c2..36f5d9a1e 100644 --- a/yuthon_property/security/ir.model.access.csv +++ b/yuthon_property/security/ir.model.access.csv @@ -5,4 +5,5 @@ access_property_confirm,property_confirm,model_property_confirm,base.group_user, access_property_move,property_move,model_property_move,base.group_user,1,1,1,1 access_property_open_rent,property_open_rent,model_property_open_rent,base.group_user,1,1,1,1 access_property_record,property_record,model_property_record,base.group_user,1,1,1,1 +access_property_type,property_type,model_property_type,base.group_user,1,1,1,1 diff --git a/yuthon_property/views/menuitem.xml b/yuthon_property/views/menuitem.xml index 34f2cc8fd..381b02387 100644 --- a/yuthon_property/views/menuitem.xml +++ b/yuthon_property/views/menuitem.xml @@ -1,6 +1,6 @@ - + 物业管理 yuthon.property tree,form @@ -20,49 +20,26 @@ - - - - - - - - + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + action="property_assess_action"/> + + + + diff --git a/yuthon_property/views/property_type_views.xml b/yuthon_property/views/property_type_views.xml new file mode 100644 index 000000000..72b126aa1 --- /dev/null +++ b/yuthon_property/views/property_type_views.xml @@ -0,0 +1,22 @@ + + + + property.type.tree + property.type + + + + + + + + + + + + + 物业调拨审批 + property.type + tree + + diff --git a/yuthon_property/views/yuthon_property_views.xml b/yuthon_property/views/yuthon_property_views.xml index 0fe27a24d..4adfec663 100644 --- a/yuthon_property/views/yuthon_property_views.xml +++ b/yuthon_property/views/yuthon_property_views.xml @@ -16,7 +16,8 @@ - + + @@ -46,7 +47,8 @@ - + + @@ -69,12 +71,15 @@ yuthon.property.search yuthon.property - - - - + + + + + + + - + @@ -84,7 +89,7 @@ yuthon.property.kanban yuthon.property - + @@ -131,25 +136,4 @@ - - 可租 - yuthon.property - tree,form - [('state','=','could')] - - - - 已租 - yuthon.property - tree,form - [('state','=','done')] - - - - 空置 - yuthon.property - tree,form - [('state','=','none')] - - \ No newline at end of file diff --git a/yuthon_sale_renting/models/yuthon_product_template.py b/yuthon_sale_renting/models/yuthon_product_template.py deleted file mode 100644 index 0b0be2cb4..000000000 --- a/yuthon_sale_renting/models/yuthon_product_template.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo import models, fields, api, exceptions, _ - - -class ProductTemplate(models.Model): - _inherit = 'product.template' - _description = '物业基本信息字段添加' - - property_number = fields.Char(string="物业编号") - property_name = fields.Char(string="物业简称") - property_precinct = fields.Char(string="楼盘片区") - property_floor = fields.Char(string="楼层") - # 区,街道 - property_statu = fields.Char(string="物业状态") - property_main_user = fields.Char(string="权属人") - property_all_m = fields.Float(string="产权面积") - # 单位 - property_rent_m = fields.Float(string="可租面积") - # 单位 - property_certificate = fields.Char(string="产权证号") - property_start_date = fields.Datetime(string="生效日期") - property_end_date = fields.Datetime(string="失效日期") - - - diff --git a/yuthon_sale_renting/views/contacts_inherit_menu_views.xml b/yuthon_sale_renting/views/contacts_inherit_menu_views.xml index 7baa720a6..9575665c5 100644 --- a/yuthon_sale_renting/views/contacts_inherit_menu_views.xml +++ b/yuthon_sale_renting/views/contacts_inherit_menu_views.xml @@ -16,16 +16,16 @@ [('partner_type', '=', 'employee')] {'default_is_company': True} - - 承租方 - res.partner - kanban,tree,form,activity - - [('partner_type', '=', 'tenant')] - {'default_is_company': True} - - + + + + + + + + + + - - - - 工作台 - 0 - - - - - 项目管理 - 2 - - - - 流程中心 - 3 - - - - 人力资源 - 5 - - - - 文档管理 - 6 - - - - 物业系统 - 7 - - - - 会议管理 - 8 - - - - 采购 - 9 - - - - 出勤 - 11 - - - - 工资 - 12 - - - - 待办 - 13 - - - - 日历 - 14 - - - - 车辆管理 - 15 - - - - 培训学习 - 16 - - - - 门户网站 - 17 - - - - 讨论 - 18 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/yuthon_work/views/menuitem.xml b/yuthon_work/views/menuitem.xml index f9457829e..486f6e673 100644 --- a/yuthon_work/views/menuitem.xml +++ b/yuthon_work/views/menuitem.xml @@ -2,13 +2,9 @@ 协同办公 - yuthon.work - tree,form + yuthon.work + tree,form - - - - t}TLxJMgRv!J%TmJ>A&e~|VyxNs?6NP}vhN{6 zNU~-plC`hTfAIa`-gBS#yyrRhx%YX_InVoAPe+}Rj*AWe05ED`RP`@x&wmR_bFr70 zl%`!6AW2_c8BjXJ^9uk#tZJw#8NRUGOnvA!hCy`Y-d5;tJ4uAlCR41gSk3*CgSb24+8h`2W($w^bZs?$CGh8I>En#fgd`~~OpI1P}pC4}9m2I7y%}Mp|%&o6|+UpH(Y4AIFSbve~{<3K6j+N_Kg_DtS z2+rVg-UAN<>Hdb&go8qSDO(0Q=-3G!B0&i>~_r9C|cprWaaeP07v`f)UM{lL=q-XN%wYH@wVuca_) z{B>}s#O>!yeTl(~is_6GUZ+zhUp>Y| zYqus@3Mr@_VSy`49zT!1y4#4H@u=+uA%0Anoz{u)Phe6V-wGA5wNL9JqMq`-WuA^` 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 Q1TcVxnvQCzvQ@zU00_A-egFUf literal 0 HcmV?d00001 diff --git a/yuthon_work_brand/views/hr_menus.xml b/yuthon_work_brand/views/hr_menus.xml new file mode 100644 index 000000000..cf4e75975 --- /dev/null +++ b/yuthon_work_brand/views/hr_menus.xml @@ -0,0 +1,314 @@ + + + + + False + + + + False + + + + False + + + + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/yuthon_work_brand/views/work_menus.xml b/yuthon_work_brand/views/work_menus.xml new file mode 100644 index 000000000..854d4eaed --- /dev/null +++ b/yuthon_work_brand/views/work_menus.xml @@ -0,0 +1,166 @@ + + + + + False + + + + False + + + + False + + + + False + + + + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/yuthon_work_brand/views/yuthon_none_views.xml b/yuthon_work_brand/views/yuthon_none_views.xml new file mode 100644 index 000000000..ea7504b50 --- /dev/null +++ b/yuthon_work_brand/views/yuthon_none_views.xml @@ -0,0 +1,18 @@ + + + + yuthon.none.tree + yuthon.none + + + + + + + + + 待开发 + yuthon.none + tree,form + + \ No newline at end of file