Initial commit: Sale packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:49 +02:00
commit 14e3d26998
6469 changed files with 2479670 additions and 0 deletions

View file

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="res_config_settings_view_form_sale" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.sale.stock.sale</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="sale.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@id='ups']" position="after">
<div class="col-12 col-lg-6 o_setting_box" id="display_incoterms_setting">
<div class="o_setting_left_pane">
<field name="group_display_incoterm"/>
</div>
<div class="o_setting_right_pane">
<label for="group_display_incoterm"/>
<div class="text-muted">
Display incoterms on orders &amp; invoices
</div>
<div class="content-group" attrs="{'invisible': [('group_display_incoterm','=',False)]}">
<div class="mt8">
<button name="%(account.action_incoterms_tree)d" icon="fa-arrow-right" type="action" string="Incoterms" class="btn-link"/>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<record id="res_config_settings_view_form_stock" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.sale.stock.stock</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="stock.res_config_settings_view_form"/>
<field name="arch" type="xml">
<div id="warning_info" position="after">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="default_picking_policy"/>
<div class="text-muted">
When to start shipping
</div>
<div class="content-group">
<div class="mt16">
<field name="default_picking_policy" class="o_light_label w-auto" widget="selection"/>
</div>
</div>
</div>
</div>
</div>
<xpath expr="//h2[@id='schedule_info']" position="attributes">
<attribute name="invisible">0</attribute>
</xpath>
<div id="sale_security_lead" position="replace">
<div class="col-12 col-lg-6 o_setting_box" title="Margin of error for dates promised to customers. Products will be scheduled for procurement and delivery that many days earlier than the actual promised date, to cope with unexpected delays in the supply chain.">
<div class="o_setting_left_pane">
<field name="use_security_lead"/>
</div>
<div class="o_setting_right_pane">
<label for="use_security_lead"/>
<a href="https://www.odoo.com/documentation/16.0/applications/inventory_and_mrp/inventory/management/planning/scheduled_dates.html" title="Documentation" class="me-2 o_doc_link" target="_blank"></a>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." role="img" aria-label="Values set here are company-specific." groups="base.group_multi_company"/>
<div class="text-muted">
Schedule deliveries earlier to avoid delays
</div>
<div class="content-group">
<div class="mt16" attrs="{'invisible': [('use_security_lead','=',False)]}">
<span>Move forward expected delivery dates by <field name="security_lead" class="oe_inline"/> days</span>
</div>
</div>
</div>
</div>
</div>
</field>
</record>
</odoo>

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="res_users_view_form_preferences" model="ir.ui.view">
<field name="name">res.users.preferences.form.inherit</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
<field name="arch" type="xml">
<group name="signature" position="after">
<group name="Warehouses">
<field name="property_warehouse_id" groups="stock.group_stock_multi_warehouses"/>
</group>
</group>
</field>
</record>
<record id="res_users_view_simple_form" model="ir.ui.view">
<field name="name">res.users.simple.form.inherit</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_simple_form"/>
<field name="arch" type="xml">
<group name="phone_numbers" position="after">
<group name="Warehouses">
<field name="property_warehouse_id" groups="stock.group_stock_multi_warehouses"/>
</group>
</group>
</field>
</record>
<record id="res_users_view_form" model="ir.ui.view">
<field name="name">res.users.form.inherit</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<group name="messaging" position="after">
<group name="Warehouses" string="Inventory" groups="stock.group_stock_multi_warehouses">
<field name="property_warehouse_id" groups="stock.group_stock_multi_warehouses"/>
</group>
</group>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,134 @@
<?xml version="1.0"?>
<odoo>
<data>
<record id="view_order_form_inherit_sale_stock" model="ir.ui.view">
<field name="name">sale.order.form.sale.stock</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_view_invoice']" position="before">
<button type="object"
name="action_view_delivery"
class="oe_stat_button"
icon="fa-truck"
attrs="{'invisible': [('delivery_count', '=', 0)]}" groups="stock.group_stock_user">
<field name="delivery_count" widget="statinfo" string="Delivery"/>
</button>
</xpath>
<xpath expr="//group[@name='sale_shipping']" position="attributes">
<attribute name="groups"></attribute><!-- Remove the res.group on the group and set it on the field directly-->
<attribute name="string">Delivery</attribute>
</xpath>
<xpath expr="//label[@for='commitment_date']" position="before">
<field name="warehouse_id" invisible="1"/> <!-- needed for js logic -->
<field name="warehouse_id" options="{'no_create': True}" groups="stock.group_stock_multi_warehouses" force_save="1"/>
<field name="incoterm" options="{'no_open': True, 'no_create': True}" groups="sale_stock.group_display_incoterm"/>
<field name="incoterm_location" groups="sale_stock.group_display_incoterm"/>
<field name="picking_policy" required="True"/>
</xpath>
<xpath expr="//span[@name='expected_date_span']" position="attributes">
<attribute name="attrs">
{'invisible': [('effective_date', '!=', False), ('commitment_date', '!=', False)]}
</attribute>
</xpath>
<xpath expr="//div[@name='commitment_date_div']" position="replace">
<div class="o_row">
<field name="commitment_date"/>
<span class="text-muted" attrs="{'invisible': [('effective_date', '!=', False), ('commitment_date', '!=', False)]}">Expected: <field name="expected_date" class="oe_inline" widget="date"/></span>
</div>
<field name="effective_date" attrs="{'invisible': [('effective_date', '=', False)]}"/>
</xpath>
<field name="effective_date" position="after">
<field name="delivery_status" attrs="{'invisible': [('state', 'not in', ['sale', 'done'])]}"/>
</field>
<xpath expr="//page[@name='other_information']//field[@name='expected_date']" position="after">
<field name="show_json_popover" invisible="1"/>
<field string=" " name="json_popover" widget="stock_rescheduling_popover" attrs="{'invisible': [('show_json_popover', '=', False)]}"/>
</xpath>
<xpath expr="//field[@name='order_line']/form/group/group/field[@name='analytic_distribution']" position="before">
<field name="route_id" groups="stock.group_adv_location" options="{'no_create': True}"/>
</xpath>
<xpath expr="//field[@name='order_line']/tree/field[@name='analytic_distribution']" position="after">
<field name="route_id" groups="stock.group_adv_location" options="{'no_create': True}" optional="hide"/>
</xpath>
</field>
</record>
<record id="view_quotation_tree" model="ir.ui.view">
<field name="name">sale.order.tree.inherit.sale.stock</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='tag_ids']" position="after">
<field name="warehouse_id" options="{'no_create': True}" groups="stock.group_stock_multi_warehouses" optional="hide" />
</xpath>
</field>
</record>
<record id="view_order_tree" model="ir.ui.view">
<field name="name">sale.order.tree.inherit.sale.stock</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='team_id']" position="after">
<field name="warehouse_id" options="{'no_create': True}" groups="stock.group_stock_multi_warehouses" optional="hide"/>
</xpath>
<field name="invoice_status" position="before">
<field name="effective_date" invisible="1"/>
<field name="delivery_status" optional="hide" widget="badge"
decoration-success="commitment_date and (commitment_date &gt; datetime.datetime.combine(datetime.date.today(), datetime.time(23,59,59)).to_utc().strftime('%Y-%m-%d %H:%M:%S') or delivery_status=='full' and effective_date &lt;= commitment_date)"
decoration-danger="commitment_date and (commitment_date &lt; effective_date or commitment_date &lt; datetime.datetime.combine(datetime.date.today(), datetime.time(0,0,0)).to_utc().strftime('%Y-%m-%d %H:%M:%S') and delivery_status!='full' and effective_date &lt;= commitment_date)"
decoration-warning="commitment_date and commitment_date &gt;= datetime.datetime.combine(datetime.date.today(), datetime.time(0,0,0)).to_utc().strftime('%Y-%m-%d %H:%M:%S') and commitment_date &lt;= datetime.datetime.combine(datetime.date.today(), datetime.time(23,59,59)).to_utc().strftime('%Y-%m-%d %H:%M:%S') and delivery_status!='full'"/>
</field>
</field>
</record>
<record id="view_order_line_tree_inherit_sale_stock" model="ir.ui.view">
<field name="name">sale.order.line.tree.sale.stock.location</field>
<field name="inherit_id" ref="sale.view_order_line_tree"/>
<field name="model">sale.order.line</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='price_subtotal']" position="before">
<field name="route_id" groups="stock.group_adv_location" options="{'no_create': True}"/>
</xpath>
</field>
</record>
<record id="view_order_form_inherit_sale_stock_qty" model="ir.ui.view">
<field name="name">sale.order.line.tree.sale.stock.qty</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="model">sale.order</field>
<field name="arch" type="xml">
<xpath expr="//page/field[@name='order_line']/form/group/group/div[@name='ordered_qty']/field[@name='product_uom']" position="after">
<!-- below fields are used in the widget qty_at_date_widget -->
<field name="virtual_available_at_date" invisible="1"/>
<field name="qty_available_today" invisible="1"/>
<field name="free_qty_today" invisible="1"/>
<field name="scheduled_date" invisible="1"/>
<field name="forecast_expected_date" invisible="1"/>
<field name="warehouse_id" invisible="1"/>
<field name="move_ids" invisible="1"/>
<field name="qty_to_deliver" invisible="1"/>
<field name="is_mto" invisible="1"/>
<field name="display_qty_widget" invisible="1"/>
<widget name="qty_at_date_widget" width="0.1"/>
</xpath>
<xpath expr="//page/field[@name='order_line']/tree/field[@name='qty_delivered']" position="after">
<!-- below fields are used in the widget qty_at_date_widget -->
<field name="virtual_available_at_date" invisible="1"/>
<field name="qty_available_today" invisible="1"/>
<field name="free_qty_today" invisible="1"/>
<field name="scheduled_date" invisible="1"/>
<field name="forecast_expected_date" invisible="1"/>
<field name="warehouse_id" invisible="1"/>
<field name="move_ids" invisible="1"/>
<field name="qty_to_deliver" invisible="1"/>
<field name="is_mto" invisible="1"/>
<field name="display_qty_widget" invisible="1"/>
<widget name="qty_at_date_widget" width="20px"/>
</xpath>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="sale_order_portal_content_inherit_sale_stock"
name="Orders Shipping Followup"
inherit_id="sale.sale_order_portal_content">
<xpath expr="//div[@id='so_date']" position="after">
<div t-if="sale_order.incoterm" class="row">
<div class="mb-3 col-6 ms-auto">
<strong>Incoterm: </strong> <span t-field="sale_order.incoterm"/>
</div>
</div>
</xpath>
<xpath expr="//div[@id='informations']" position="inside">
<t t-set="delivery_orders" t-value="sale_order.picking_ids.filtered(lambda picking: picking.picking_type_id.code == 'outgoing')"/>
<t t-if="delivery_orders">
<div>
<strong>Delivery Orders</strong>
</div>
<div>
<t t-foreach="delivery_orders" t-as="picking">
<t t-set="delivery_report_url"
t-value="'/my/picking/pdf/%s?%s' % (picking.id, keep_query())"/>
<div name="delivery_order"
class="d-flex flex-wrap align-items-center justify-content-between">
<div name="delivery_details">
<a t-att-href="delivery_report_url">
<span t-esc="picking.name"/>
</a>
<div class="small d-lg-inline-block ms-3">
Date:
<span class="text-muted"
t-field="picking.date_done"
t-options="{'date_only': True}"/>
<span t-if="picking.state in ['draft', 'waiting', 'confirmed', 'assigned']"
class="text-muted"
t-field="picking.scheduled_date"
t-options="{'date_only': True}"/>
</div>
</div>
<span t-if="picking.state == 'done'"
class="small badge text-bg-success orders_label_text_align">
<i class="fa fa-fw fa-truck"/> <b>Shipped</b>
</span>
<span t-elif="picking.state == 'cancel'"
class="small badge text-bg-danger orders_label_text_align">
<i class="fa fa-fw fa-times"/> <b>Cancelled</b>
</span>
<span t-elif="picking.state in ['draft', 'waiting', 'confirmed', 'assigned']"
class="small badge text-bg-info orders_label_text_align">
<i class="fa fa-fw fa-clock-o"/> <b>Preparation</b>
</span>
</div>
</t>
</div>
</t>
</xpath>
</template>
</odoo>

View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="stock_production_lot_view_form" model="ir.ui.view">
<field name="name">stock.production.lot.view.form</field>
<field name="model">stock.lot</field>
<field name="inherit_id" ref="stock.view_production_lot_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('oe_button_box')]/button" position="before">
<button class="oe_stat_button" name="action_view_so"
type="object" icon="fa-pencil-square-o" help="Sale Orders"
attrs="{'invisible': ['|', ('sale_order_count', '=', 0), ('display_complete', '=', False)]}">
<div class="o_field_widget o_stat_info">
<span class="o_stat_value">
<field name="sale_order_count" widget="statinfo" nolabel="1" class="mr4"/>
</span>
<span class="o_stat_text">Sales</span>
</div>
</button>
</xpath>
<xpath expr="//group[@name='main_group']" position="after">
<group>
<field name="sale_order_ids" widget="many2many" readonly="True"
attrs="{'invisible': ['|', ('sale_order_ids', '=', []), ('display_complete', '=', True)]}">
<tree>
<field name="name"/>
<field name="partner_id"/>
<field name="date_order"/>
<field name="state" invisible="1"/>
</tree>
</field>
</group>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="stock_location_route_view_form_inherit_sale_stock" model="ir.ui.view">
<field name="name">stock.route.form</field>
<field name="model">stock.route</field>
<field name="inherit_id" ref="stock.stock_location_route_form_view"/>
<field name="arch" type="xml">
<xpath expr="//group[@name='route_selector']/group[last()]" position="inside">
<field name="sale_selectable" string="Sales Order Lines"/>
</xpath>
</field>
</record>
</odoo>