🎉 Initialize module repository
This commit is contained in:
114
wizards/mvd_tcg_add_to_deck.py
Normal file
114
wizards/mvd_tcg_add_to_deck.py
Normal file
@@ -0,0 +1,114 @@
|
||||
"""Transient helpers for adding cards to game-neutral decks."""
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class MvdTcgAddToDeck(models.TransientModel):
|
||||
"""Add one reference card to one deck board."""
|
||||
|
||||
_name = "mvd.tcg.add.to.deck"
|
||||
_description = "Add TCG Card To Deck"
|
||||
|
||||
card_id = fields.Many2one(
|
||||
"mvd.tcg.card",
|
||||
required=True,
|
||||
readonly=True,
|
||||
)
|
||||
game_id = fields.Many2one(
|
||||
"mvd.tcg.game",
|
||||
readonly=True,
|
||||
)
|
||||
deck_id = fields.Many2one(
|
||||
"mvd.tcg.deck",
|
||||
required=True,
|
||||
domain="[('active', '=', True), ('game_id', '=', game_id)]",
|
||||
)
|
||||
board_id = fields.Many2one(
|
||||
"mvd.tcg.deck.board",
|
||||
required=True,
|
||||
domain="[('deck_id', '=', deck_id)]",
|
||||
)
|
||||
quantity = fields.Integer(required=True, default=1)
|
||||
role_ids = fields.Many2many(
|
||||
"mvd.tcg.deck.role",
|
||||
string="Roles",
|
||||
)
|
||||
note = fields.Char()
|
||||
|
||||
@api.model
|
||||
def default_get(self, field_names):
|
||||
"""Prefill the wizard from the active card context.
|
||||
|
||||
Args:
|
||||
field_names: Requested wizard fields.
|
||||
|
||||
Returns:
|
||||
dict: Initial field values.
|
||||
"""
|
||||
defaults = super().default_get(field_names)
|
||||
card_id = defaults.get("card_id") or self.env.context.get("active_id")
|
||||
if self.env.context.get("active_model") == "mvd.tcg.card" and card_id:
|
||||
card = self.env["mvd.tcg.card"].browse(card_id).exists()
|
||||
if card:
|
||||
defaults["card_id"] = card.id
|
||||
defaults["game_id"] = card.game_id.id
|
||||
deck_id = defaults.get("deck_id") or self.env.context.get("default_deck_id")
|
||||
if deck_id:
|
||||
deck = self.env["mvd.tcg.deck"].browse(deck_id).exists()
|
||||
if deck:
|
||||
defaults["deck_id"] = deck.id
|
||||
defaults.setdefault("game_id", deck.game_id.id)
|
||||
board_id = defaults.get("board_id") or self.env.context.get("default_board_id")
|
||||
if board_id:
|
||||
board = self.env["mvd.tcg.deck.board"].browse(board_id).exists()
|
||||
if board:
|
||||
defaults["board_id"] = board.id
|
||||
defaults.setdefault("deck_id", board.deck_id.id)
|
||||
defaults.setdefault("game_id", board.deck_id.game_id.id)
|
||||
return defaults
|
||||
|
||||
@api.onchange("deck_id")
|
||||
def _onchange_deck_id(self):
|
||||
"""Preselect the most likely target board for the chosen deck.
|
||||
|
||||
Returns:
|
||||
None: The method updates wizard fields in place.
|
||||
"""
|
||||
if not self.deck_id:
|
||||
self.board_id = False
|
||||
return
|
||||
preferred_board = self.deck_id.board_ids.filtered(
|
||||
lambda board: board.code == "mainboard"
|
||||
)[:1]
|
||||
self.board_id = preferred_board or self.deck_id.board_ids[:1]
|
||||
|
||||
def action_add_to_deck(self):
|
||||
"""Create or increment a deck line for the selected card.
|
||||
|
||||
Returns:
|
||||
dict: Window action for the updated deck.
|
||||
|
||||
Raises:
|
||||
UserError: If the wizard lacks a valid card context.
|
||||
"""
|
||||
self.ensure_one()
|
||||
if not self.card_id:
|
||||
raise UserError(_("Select a card first."))
|
||||
|
||||
self.deck_id._mvd_tcg_add_card_to_board(
|
||||
self.card_id,
|
||||
self.board_id,
|
||||
quantity=self.quantity,
|
||||
role_ids=self.role_ids,
|
||||
note=self.note,
|
||||
)
|
||||
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": _("Deck"),
|
||||
"res_model": "mvd.tcg.deck",
|
||||
"view_mode": "form",
|
||||
"res_id": self.deck_id.id,
|
||||
"target": "current",
|
||||
}
|
||||
Reference in New Issue
Block a user