from odoo import fields, models, _ from odoo.exceptions import ValidationError class DssAdvertisefieldsCreateFromProjectWizard(models.TransientModel): _name = "dss.advertisefields.create.from.project.wizard" _description = "Werbefelder aus vorhandenem Projekt erstellen" source_project_id = fields.Many2one( 'dss.projects', string='Altes Projekt', required=True, ) project_id = fields.Many2one( 'dss.projects', string='Neues Projekt', required=True, ) def action_create_fields(self): self.ensure_one() if self.source_project_id.id == self.project_id.id: raise ValidationError(_("Altes Projekt und neues Projekt muessen unterschiedlich sein.")) source_fields = self.env['dss.advertisefields'].search([ ('project', '=', self.source_project_id.id) ]) if not source_fields: raise ValidationError(_("Im gewaehlten alten Projekt wurden keine Werbefelder gefunden.")) create_vals = [] project_identifier = self.project_id.projectid or self.project_id.id for source_field in source_fields: vals = source_field.copy_data()[0] feldname = vals.get('feldname') or source_field.feldname vals.update({ 'project': self.project_id.id, 'auto_feldname': f"{project_identifier}_{feldname}", 'contract': [(6, 0, [])], 'contract_save': False, }) create_vals.append(vals) created_fields = self.env['dss.advertisefields'].create(create_vals) return { 'type': 'ir.actions.act_window', 'name': _('Erstellte Werbefelder'), 'res_model': 'dss.advertisefields', 'view_mode': 'tree,form', 'domain': [('id', 'in', created_fields.ids)], }