first push message

This commit is contained in:
2026-07-01 14:41:49 +07:00
parent 6667dec2bf
commit 58b5f46cc4
2951 changed files with 316619 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="action_approve_wizard" model="ir.ui.view">
<field name="name">action_approve_wizard</field>
<field name="model">xf.doc.approval.document.approver</field>
<field name="priority">20</field>
<field name="arch" type="xml">
<form>
<sheet>
<field name="method" invisible="True"/>
<group name="notes">
<field name="notes" readonly="False" placeholder="Some comments"/>
</group>
</sheet>
<footer>
<button name="action_approve" string="Approve" type="object" class="btn-primary"
default_focus="1"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="action_reject_wizard" model="ir.ui.view">
<field name="name">action_reject_wizard</field>
<field name="model">xf.doc.approval.document.approver</field>
<field name="priority">20</field>
<field name="arch" type="xml">
<form>
<sheet>
<field name="method" invisible="True"/>
<group name="notes">
<field name="notes" required="True" readonly="False" placeholder="Reject reason or comments"/>
</group>
</sheet>
<footer>
<button name="action_reject" string="Reject" type="object" class="btn-primary"
default_focus="1"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
</data>
</odoo>
+126
View File
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="xf_doc_approval_document_package_form" model="ir.ui.view">
<field name="name">xf_doc_approval_document_package_form</field>
<field name="model">xf.doc.approval.document.package</field>
<field name="arch" type="xml">
<form class="o_sale_order">
<!-- Hidden fields for logic -->
<field name="is_initiator" invisible="True"/>
<field name="is_approver" invisible="True"/>
<header>
<button string="Send for Approval" name="action_send_for_approval" type="object" class="oe_highlight" invisible="state!='draft' or not is_initiator" confirm="Please confirm that you want to send documents for approval"/>
<button string="Approve" name="action_approve_wizard" type="object" class="oe_highlight" invisible="state!='approval' or not is_approver"/>
<button string="Reject" name="action_reject_wizard" type="object" invisible="state!='approval' or not is_approver"/>
<button string="Set to Draft" name="action_draft" type="object" invisible="state not in ['rejected','cancelled'] or not is_initiator"/>
<button string="Cancel" name="action_cancel" type="object" invisible="state!='approval' or not is_initiator" confirm="Please confirm that you want to cancel approval process"/>
<button string="Force Cancel" name="action_cancel" type="object" invisible="state!='approved'" groups="base.group_system"/>
<field name="state" widget="statusbar" statusbar_visible="draft,approval,approved"/>
</header>
<sheet>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" placeholder="Request Name" nolabel="1" readonly="not state or state != 'draft'"/>
</h1>
</div>
<group name="approvers" string="Approvers">
<field name="approver_ids" nolabel="1" colspan="2" readonly="not state or state != 'draft'">
<list editable="bottom">
<field name="step"/>
<field name="user_id"/>
<field name="role"/>
<field name="state"/>
<field name="method" invisible="True"/>
<field name="notes"/>
</list>
<form>
<group>
<group>
<field name="user_id"/>
<field name="role"/>
</group>
<group>
<field name="step"/>
<field name="state"/>
<field name="method" invisible="True"/>
</group>
</group>
<group>
<field name="notes"/>
</group>
</form>
</field>
</group>
<group invisible="not is_initiator">
<group name="visibility" string="Visibility">
<field name="company_id" readonly="not state or state != 'draft'" widget="selection"/>
<field name="visibility"/>
</group>
<group name="approval" string="Approval">
<field name="approval_team_id" readonly="not state or state != 'draft'" widget="selection"/>
<field name="method" readonly="not state or state != 'draft'"/>
<field name="approval_state"/>
<field name="approval_step"/>
</group>
</group>
<group name="documents" string="Documents">
<field name="document_ids" nolabel="1" colspan="2" readonly="not state or state != 'draft'">
<list editable="bottom">
<field name="name"/>
<field name="file" widget="binary" filename="file_name"/>
<field name="file_name" column_invisible="True"/>
</list>
<form>
<group>
<field name="name"/>
<field name="file" widget="binary" filename="file_name"/>
<field name="file_name" invisible="True"/>
</group>
</form>
</field>
</group>
<group>
<field name="initiator_user_id" readonly="not state or state != 'draft'"/>
</group>
<group name="description" string="Description" invisible="state!='draft' or not description">
<field name="description" nolabel="1" colspan="2"/>
</group>
</sheet>
<chatter/>
<!-- REMOVED MANUAL CHATTER BLOCK -->
<!-- Odoo 19 automatically adds the Chatter if the model inherits mail.thread -->
</form>
</field>
</record>
<record id="xf_doc_approval_document_package_tree" model="ir.ui.view">
<field name="name">xf_doc_approval_document_package_tree</field>
<field name="model">xf.doc.approval.document.package</field>
<field name="arch" type="xml">
<list>
<field name="name"/>
<field name="initiator_user_id"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="state"/>
</list>
</field>
</record>
<record id="action_xf_doc_approval_document_package" model="ir.actions.act_window">
<field name="name">Documents</field>
<field name="res_model">xf.doc.approval.document.package</field>
</record>
<menuitem
id="menu_xf_doc_approval_document_package"
action="action_xf_doc_approval_document_package"
parent="menu_xf_doc_approval_root"
sequence="1"
/>
</data>
</odoo>
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<menuitem id="menu_xf_doc_approval_root" name="Request Approval"
web_icon="xf_doc_approval,static/description/icon.png"
groups="xf_doc_approval.group_xf_doc_approval_user"/>
<menuitem id="menu_xf_doc_approval_configuration" name="Configuration"
parent="menu_xf_doc_approval_root"
groups="xf_doc_approval.group_xf_doc_approval_team_leader,xf_doc_approval.group_xf_doc_approval_manager"
sequence="100"/>
</data>
</odoo>
+60
View File
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="xf_doc_approval_team_form" model="ir.ui.view">
<field name="name">xf_doc_approval_team_form</field>
<field name="model">xf.doc.approval.team</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
<field name="active"/>
</group>
<group>
<field name="user_id"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
</group>
<group name="approvers" string="Approvers">
<field name="approver_ids" nolabel="1" colspan="2">
<list editable="bottom">
<field name="step"/>
<field name="user_id"/>
<field name="role"/>
</list>
</field>
</group>
</sheet>
</form>
</field>
</record>
<record id="xf_doc_approval_team_tree" model="ir.ui.view">
<field name="name">xf_doc_approval_team_tree</field>
<field name="model">xf.doc.approval.team</field>
<field name="arch" type="xml">
<list>
<field name="active" invisible="True"/>
<field name="name"/>
<field name="user_id"/>
<field name="company_id" groups="base.group_multi_company"/>
</list>
</field>
</record>
<record id="action_xf_doc_approval_team" model="ir.actions.act_window">
<field name="name">Approval Teams</field>
<field name="res_model">xf.doc.approval.team</field>
</record>
<menuitem
id="menu_xf_doc_approval_team"
action="action_xf_doc_approval_team"
parent="menu_xf_doc_approval_configuration"
sequence="10"
/>
</data>
</odoo>
+24
View File
@@ -0,0 +1,24 @@
<odoo>
<data>
<!--
<template id="listing">
<ul>
<li t-foreach="objects" t-as="object">
<a t-attf-href="#{ root }/objects/#{ object.id }">
<t t-esc="object.display_name"/>
</a>
</li>
</ul>
</template>
<template id="object">
<h1><t t-esc="object.display_name"/></h1>
<dl>
<t t-foreach="object._fields" t-as="field">
<dt><t t-esc="field"/></dt>
<dd><t t-esc="object[field]"/></dd>
</t>
</dl>
</template>
-->
</data>
</odoo>
+60
View File
@@ -0,0 +1,60 @@
<odoo>
<data>
<!-- explicit list view definition -->
<!--
<record model="ir.ui.view" id="xf_doc_approval.list">
<field name="name">xf_doc_approval list</field>
<field name="model">xf_doc_approval.xf_doc_approval</field>
<field name="arch" type="xml">
<list>
<field name="name"/>
<field name="value"/>
<field name="value2"/>
</list>
</field>
</record>
-->
<!-- actions opening views on models -->
<!--
<record model="ir.actions.act_window" id="xf_doc_approval.action_window">
<field name="name">xf_doc_approval window</field>
<field name="res_model">xf_doc_approval.xf_doc_approval</field>
<field name="view_mode">list,form</field>
</record>
-->
<!-- server action to the one above -->
<!--
<record model="ir.actions.server" id="xf_doc_approval.action_server">
<field name="name">xf_doc_approval server</field>
<field name="model_id" ref="model_xf_doc_approval_xf_doc_approval"/>
<field name="state">code</field>
<field name="code">
action = {
"type": "ir.actions.act_window",
"view_mode": "list,form",
"res_model": model._name,
}
</field>
</record>
-->
<!-- Top menu item -->
<!--
<menuitem name="xf_doc_approval" id="xf_doc_approval.menu_root"/>
-->
<!-- menu categories -->
<!--
<menuitem name="Menu 1" id="xf_doc_approval.menu_1" parent="xf_doc_approval.menu_root"/>
<menuitem name="Menu 2" id="xf_doc_approval.menu_2" parent="xf_doc_approval.menu_root"/>
-->
<!-- actions -->
<!--
<menuitem name="List" id="xf_doc_approval.menu_1_list" parent="xf_doc_approval.menu_1"
action="xf_doc_approval.action_window"/>
<menuitem name="Server to list" id="xf_doc_approval" parent="xf_doc_approval.menu_2"
action="xf_doc_approval.action_server"/>
-->
</data>
</odoo>