Files
mvd_tcg_mtg_deck/views/mvd_tcg_mtg_deck_views.xml
2026-04-03 23:08:58 +02:00

434 lines
25 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="mvd_tcg_deck_line_view_search_mtg_inherit" model="ir.ui.view">
<field name="name">mvd.tcg.deck.line.view.search.mtg.inherit</field>
<field name="model">mvd.tcg.deck.line</field>
<field name="inherit_id" ref="mvd_tcg_deck.mvd_tcg_deck_line_view_search"/>
<field name="arch" type="xml">
<xpath expr="//search" position="inside">
<field name="mtg_set_id"/>
<field name="mtg_primary_card_type_id"/>
<field name="mtg_legality_status"/>
<separator/>
<filter name="filter_mtg_issues" string="Issues" domain="[('mtg_issue_count', '>', 0)]"/>
<filter name="filter_mtg_off_color" string="Off Color" domain="[('mtg_color_identity_violation', '=', True)]"/>
<filter name="filter_mtg_singleton" string="Singleton" domain="[('mtg_singleton_violation', '=', True)]"/>
<filter name="filter_mtg_illegal" string="Illegal" domain="[('mtg_legality_ok', '=', False)]"/>
<group>
<filter name="group_by_type" string="Type" context="{'group_by': 'mtg_primary_card_type_id'}"/>
<filter name="group_by_mv" string="Mana Value" context="{'group_by': 'mtg_mana_value'}"/>
<filter name="group_by_set" string="Set" context="{'group_by': 'mtg_set_id'}"/>
</group>
</xpath>
</field>
</record>
<record id="mvd_tcg_deck_line_view_list_mtg_inherit" model="ir.ui.view">
<field name="name">mvd.tcg.deck.line.view.list.mtg.inherit</field>
<field name="model">mvd.tcg.deck.line</field>
<field name="inherit_id" ref="mvd_tcg_deck.mvd_tcg_deck_line_view_list"/>
<field name="arch" type="xml">
<xpath expr="//list" position="attributes">
<attribute name="default_order">primary_role_sequence, mtg_mana_value, sequence, id</attribute>
<attribute name="decoration-danger">mtg_color_identity_violation or mtg_singleton_violation or mtg_legality_status in ('banned', 'not_legal')</attribute>
<attribute name="decoration-warning">mtg_legality_status == 'restricted'</attribute>
</xpath>
<xpath expr="//field[@name='card_id']" position="after">
<field name="mtg_mana_cost" widget="mtg_symbols" optional="show"/>
<field name="mtg_mana_value" optional="hide"/>
<field name="mtg_type_line" optional="show"/>
<field name="mtg_legality_status" optional="hide"/>
<field name="mtg_color_identity_violation" optional="hide"/>
<field name="mtg_singleton_violation" optional="hide"/>
</xpath>
</field>
</record>
<record id="mvd_tcg_deck_board_view_form_mtg_inherit" model="ir.ui.view">
<field name="name">mvd.tcg.deck.board.view.form.mtg.inherit</field>
<field name="model">mvd.tcg.deck.board</field>
<field name="inherit_id" ref="mvd_tcg_deck.mvd_tcg_deck_board_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='line_ids']" position="attributes">
<attribute name="readonly">0</attribute>
</xpath>
<xpath expr="//field[@name='line_ids']/list" position="attributes">
<attribute name="editable">bottom</attribute>
<attribute name="default_order">primary_role_sequence, mtg_mana_value, sequence, id</attribute>
<attribute name="decoration-danger">mtg_color_identity_violation or mtg_singleton_violation or mtg_legality_status in ('banned', 'not_legal')</attribute>
<attribute name="decoration-warning">mtg_legality_status == 'restricted'</attribute>
</xpath>
<xpath expr="//field[@name='line_ids']/list/field[@name='card_id']" position="after">
<field name="mtg_mana_cost" widget="mtg_symbols" optional="show"/>
<field name="mtg_mana_value" optional="hide"/>
<field name="mtg_type_line" optional="show"/>
<field name="primary_role_id" optional="show"/>
<field name="mtg_legality_status" optional="hide"/>
</xpath>
</field>
</record>
<record id="mvd_tcg_deck_view_form_mtg_inherit" model="ir.ui.view">
<field name="name">mvd.tcg.deck.view.form.mtg.inherit</field>
<field name="model">mvd.tcg.deck</field>
<field name="inherit_id" ref="mvd_tcg_deck.mvd_tcg_deck_view_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet" position="inside">
<field name="is_mtg_deck" invisible="1"/>
<field name="mtg_command_zone_board_id" invisible="1"/>
<field name="mtg_mainboard_board_id" invisible="1"/>
<field name="mtg_sideboard_board_id" invisible="1"/>
<field name="mtg_maybeboard_board_id" invisible="1"/>
</xpath>
<xpath expr="//page[@name='overview']" position="inside">
<group string="Deck Snapshot" invisible="not is_mtg_deck">
<group>
<field name="mtg_format_id"/>
<field name="mtg_command_zone_count" readonly="1"/>
<field name="mtg_mainboard_count" readonly="1"/>
<field name="mtg_sideboard_count" readonly="1"/>
<field name="mtg_maybeboard_count" readonly="1"/>
</group>
<group>
<field
name="mtg_color_identity_name"
readonly="1"
invisible="not mtg_color_identity_name"
/>
<field name="mtg_average_mana_value" readonly="1"/>
</group>
</group>
</xpath>
<xpath expr="//page[@name='boards']" position="attributes">
<attribute name="invisible">is_mtg_deck</attribute>
</xpath>
<xpath expr="//page[@name='cards']" position="attributes">
<attribute name="invisible">is_mtg_deck</attribute>
</xpath>
<xpath expr="//page[@name='overview']" position="after">
<page string="Command Zone" name="mtg_command_zone" invisible="not is_mtg_deck">
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="text-muted">
<strong class="me-1">Cards</strong>
<field name="mtg_command_zone_count"/>
</div>
<button
name="action_add_to_mtg_command_zone"
type="object"
string="Add Card"
class="btn-primary"
/>
<button
name="action_open_mtg_command_zone"
type="object"
string="Manage Lines"
class="btn-secondary"
invisible="not mtg_command_zone_board_id"
/>
</div>
<field name="mtg_command_zone_line_ids" nolabel="1" readonly="0" mode="list,form">
<list create="0" delete="1" editable="bottom" default_order="primary_role_sequence, mtg_mana_value, sequence, id" decoration-danger="mtg_color_identity_violation or mtg_singleton_violation or mtg_legality_status in ('banned', 'not_legal')" decoration-warning="mtg_legality_status == 'restricted'">
<field name="sequence" widget="handle" optional="hide"/>
<field
name="card_image_128"
widget="mvd_deck_zoom_image"
optional="show"
options="{'preview_image': 'card_image_1920', 'zoom': true, 'zoom_delay': 0, 'size': [0, 96]}"
/>
<field name="quantity"/>
<field name="card_id"/>
<field name="mtg_mana_cost" widget="mtg_symbols" optional="show"/>
<field name="mtg_type_line" optional="show"/>
<field name="primary_role_id" optional="show"/>
<field name="mtg_legality_status" optional="hide"/>
<field name="role_ids" widget="many2many_tags" options="{'color_field': 'color'}" optional="show"/>
<field name="note" optional="show"/>
</list>
</field>
</page>
<page string="Mainboard" name="mtg_mainboard" invisible="not is_mtg_deck">
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="text-muted">
<strong class="me-1">Cards</strong>
<field name="mtg_mainboard_count"/>
</div>
<button
name="action_add_to_mtg_mainboard"
type="object"
string="Add Card"
class="btn-primary"
/>
<button
name="action_open_mtg_mainboard"
type="object"
string="Manage Lines"
class="btn-secondary"
invisible="not mtg_mainboard_board_id"
/>
</div>
<field name="mtg_mainboard_line_ids" nolabel="1" readonly="0" mode="list,form">
<list create="0" delete="1" editable="bottom" default_order="primary_role_sequence, mtg_mana_value, sequence, id" decoration-danger="mtg_color_identity_violation or mtg_singleton_violation or mtg_legality_status in ('banned', 'not_legal')" decoration-warning="mtg_legality_status == 'restricted'">
<field name="sequence" widget="handle" optional="hide"/>
<field
name="card_image_128"
widget="mvd_deck_zoom_image"
optional="show"
options="{'preview_image': 'card_image_1920', 'zoom': true, 'zoom_delay': 0, 'size': [0, 96]}"
/>
<field name="quantity"/>
<field name="card_id"/>
<field name="mtg_mana_cost" widget="mtg_symbols" optional="show"/>
<field name="mtg_mana_value" optional="hide"/>
<field name="mtg_type_line" optional="show"/>
<field name="primary_role_id" optional="show"/>
<field name="mtg_legality_status" optional="hide"/>
<field name="role_ids" widget="many2many_tags" options="{'color_field': 'color'}" optional="show"/>
<field name="note" optional="show"/>
</list>
</field>
</page>
<page string="Sideboard" name="mtg_sideboard" invisible="not is_mtg_deck">
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="text-muted">
<strong class="me-1">Cards</strong>
<field name="mtg_sideboard_count"/>
</div>
<button
name="action_add_to_mtg_sideboard"
type="object"
string="Add Card"
class="btn-primary"
/>
<button
name="action_open_mtg_sideboard"
type="object"
string="Manage Lines"
class="btn-secondary"
invisible="not mtg_sideboard_board_id"
/>
</div>
<field name="mtg_sideboard_line_ids" nolabel="1" readonly="0" mode="list,form">
<list create="0" delete="1" editable="bottom" default_order="primary_role_sequence, mtg_mana_value, sequence, id" decoration-danger="mtg_color_identity_violation or mtg_singleton_violation or mtg_legality_status in ('banned', 'not_legal')" decoration-warning="mtg_legality_status == 'restricted'">
<field name="sequence" widget="handle" optional="hide"/>
<field
name="card_image_128"
widget="mvd_deck_zoom_image"
optional="show"
options="{'preview_image': 'card_image_1920', 'zoom': true, 'zoom_delay': 0, 'size': [0, 96]}"
/>
<field name="quantity"/>
<field name="card_id"/>
<field name="mtg_mana_cost" widget="mtg_symbols" optional="show"/>
<field name="mtg_type_line" optional="show"/>
<field name="primary_role_id" optional="show"/>
<field name="mtg_legality_status" optional="hide"/>
<field name="role_ids" widget="many2many_tags" options="{'color_field': 'color'}" optional="show"/>
<field name="note" optional="show"/>
</list>
</field>
</page>
<page string="Maybeboard" name="mtg_maybeboard" invisible="not is_mtg_deck">
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="text-muted">
<strong class="me-1">Cards</strong>
<field name="mtg_maybeboard_count"/>
</div>
<button
name="action_add_to_mtg_maybeboard"
type="object"
string="Add Card"
class="btn-primary"
/>
<button
name="action_open_mtg_maybeboard"
type="object"
string="Manage Lines"
class="btn-secondary"
invisible="not mtg_maybeboard_board_id"
/>
</div>
<field name="mtg_maybeboard_line_ids" nolabel="1" readonly="0" mode="list,form">
<list create="0" delete="1" editable="bottom" default_order="primary_role_sequence, mtg_mana_value, sequence, id" decoration-danger="mtg_color_identity_violation or mtg_singleton_violation or mtg_legality_status in ('banned', 'not_legal')" decoration-warning="mtg_legality_status == 'restricted'">
<field name="sequence" widget="handle" optional="hide"/>
<field
name="card_image_128"
widget="mvd_deck_zoom_image"
optional="show"
options="{'preview_image': 'card_image_1920', 'zoom': true, 'zoom_delay': 0, 'size': [0, 96]}"
/>
<field name="quantity"/>
<field name="card_id"/>
<field name="mtg_mana_cost" widget="mtg_symbols" optional="show"/>
<field name="mtg_type_line" optional="show"/>
<field name="primary_role_id" optional="show"/>
<field name="mtg_legality_status" optional="hide"/>
<field name="role_ids" widget="many2many_tags" options="{'color_field': 'color'}" optional="show"/>
<field name="note" optional="show"/>
</list>
</field>
</page>
<page string="Analysis" name="mtg_analysis" invisible="not is_mtg_deck">
<div class="row g-3">
<div class="col-12 col-md-6 col-xl-3">
<div class="border rounded-3 p-3 h-100 bg-body">
<div class="text-uppercase text-muted small fw-semibold">Average Mana Value</div>
<div class="fs-4 fw-bold mt-1">
<field name="mtg_average_mana_value" readonly="1"/>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-xl-3">
<div class="border rounded-3 p-3 h-100 bg-body">
<div class="text-uppercase text-muted small fw-semibold">Tagged Cards</div>
<div class="fs-4 fw-bold mt-1">
<field name="mtg_tagged_line_count" readonly="1"/>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-xl-3">
<div class="border rounded-3 p-3 h-100 bg-body">
<div class="text-uppercase text-muted small fw-semibold">Untagged Cards</div>
<div class="fs-4 fw-bold mt-1">
<field name="mtg_untagged_line_count" readonly="1"/>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-xl-3">
<div class="border rounded-3 p-3 h-100 bg-body">
<div class="text-uppercase text-muted small fw-semibold">Role Coverage %</div>
<div class="fs-4 fw-bold mt-1">
<field name="mtg_role_coverage_ratio" readonly="1"/>
</div>
</div>
</div>
</div>
<group string="Deck Metrics" class="mt-3">
<group>
<field name="mtg_land_count" readonly="1"/>
<field name="mtg_creature_count" readonly="1"/>
<field name="mtg_artifact_count" readonly="1"/>
<field name="mtg_enchantment_count" readonly="1"/>
</group>
<group>
<field name="mtg_planeswalker_count" readonly="1"/>
<field name="mtg_instant_count" readonly="1"/>
<field name="mtg_sorcery_count" readonly="1"/>
<field name="mtg_issue_line_count" readonly="1"/>
</group>
</group>
<div class="row g-3 mt-1">
<div class="col-12 col-xl-6">
<div class="border rounded-3 p-3 h-100 bg-body">
<div class="fw-semibold mb-2">Mana Curve</div>
<field name="mtg_mana_curve_html" widget="html" nolabel="1" readonly="1"/>
</div>
</div>
<div class="col-12 col-xl-6">
<div class="border rounded-3 p-3 h-100 bg-body">
<div class="fw-semibold mb-2">Role Breakdown</div>
<field name="mtg_role_breakdown_html" widget="html" nolabel="1" readonly="1"/>
</div>
</div>
<div class="col-12 col-xl-6">
<div class="border rounded-3 p-3 h-100 bg-body">
<div class="fw-semibold mb-2">Type Composition</div>
<field name="mtg_type_breakdown_html" widget="html" nolabel="1" readonly="1"/>
</div>
</div>
<div class="col-12 col-xl-6">
<div class="border rounded-3 p-3 h-100 bg-body">
<div class="fw-semibold mb-2">Color Pips</div>
<field name="mtg_color_pip_breakdown_html" widget="html" nolabel="1" readonly="1"/>
</div>
</div>
</div>
</page>
</xpath>
</field>
</record>
<record id="mvd_tcg_deck_line_view_form_mtg_inherit" model="ir.ui.view">
<field name="name">mvd.tcg.deck.line.view.form.mtg.inherit</field>
<field name="model">mvd.tcg.deck.line</field>
<field name="inherit_id" ref="mvd_tcg_deck.mvd_tcg_deck_line_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button
name="action_move_to_mtg_command_zone"
type="object"
class="oe_stat_button"
icon="fa-star"
invisible="game_id.code != 'mtg' or board_id.code == 'command_zone'"
>
<div class="o_stat_info">
<span class="o_stat_text">Command</span>
</div>
</button>
<button
name="action_move_to_mtg_mainboard"
type="object"
class="oe_stat_button"
icon="fa-clone"
invisible="game_id.code != 'mtg' or board_id.code == 'mainboard'"
>
<div class="o_stat_info">
<span class="o_stat_text">Mainboard</span>
</div>
</button>
<button
name="action_move_to_mtg_sideboard"
type="object"
class="oe_stat_button"
icon="fa-columns"
invisible="game_id.code != 'mtg' or board_id.code == 'sideboard'"
>
<div class="o_stat_info">
<span class="o_stat_text">Sideboard</span>
</div>
</button>
<button
name="action_move_to_mtg_maybeboard"
type="object"
class="oe_stat_button"
icon="fa-lightbulb-o"
invisible="game_id.code != 'mtg' or board_id.code == 'maybeboard'"
>
<div class="o_stat_info">
<span class="o_stat_text">Maybeboard</span>
</div>
</button>
</xpath>
<xpath expr="//div[hasclass('d-flex') and hasclass('gap-2') and hasclass('flex-wrap')]" position="inside">
<field name="mtg_set_id" widget="badge" invisible="not mtg_set_id"/>
<field name="mtg_collector_number" widget="badge" invisible="not mtg_collector_number"/>
<field name="mtg_legality_status" widget="badge"/>
</xpath>
<xpath expr="//group[1]" position="after">
<group string="Card Snapshot">
<group>
<field name="mtg_mana_cost" widget="mtg_symbols" readonly="1" invisible="not mtg_mana_cost"/>
<field name="mtg_mana_value" readonly="1"/>
<field name="mtg_primary_card_type_id" readonly="1"/>
</group>
<group>
<field name="mtg_type_line" widget="text" options="{'line_breaks': False}" readonly="1" invisible="not mtg_type_line"/>
<field name="mtg_color_identity_violation" widget="boolean_toggle" readonly="1"/>
<field name="mtg_singleton_violation" widget="boolean_toggle" readonly="1"/>
<field name="mtg_legality_ok" widget="boolean_toggle" readonly="1"/>
</group>
</group>
</xpath>
</field>
</record>
</odoo>