from odoo import fields, models, _ from odoo.exceptions import ValidationError class DssAdvertisefieldsSaveAsTemplateWizard(models.TransientModel): _name = "dss.advertisefields.save.as.template.wizard" _description = "Werbefelder als Vorlage speichern" source_project_id = fields.Many2one( 'dss.projects', string='Altes Projekt', required=True, ) new_template_name = fields.Char( string='Neuer Vorlagenname', required=True, ) def action_save_as_template(self): self.ensure_one() 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.")) template_name = self.new_template_name.strip() if not template_name: raise ValidationError(_("Bitte einen gueltigen Vorlagennamen eingeben.")) first_display_template = source_fields[0].btn_displaytemplate display_template_vals = { 'displayname': template_name, } if first_display_template: display_template_vals.update({ 'fullsize_w': first_display_template.fullsize_w, 'fullsize_h': first_display_template.fullsize_h, 'adportal_visible': first_display_template.adportal_visible, }) new_display_template = self.env['dss.display.templates'].create(display_template_vals) template_field_vals = [] for source_field in source_fields: template_field_name = source_field.feldname or source_field.auto_feldname or '' if not source_field.feldname and source_field.auto_feldname and '_' in source_field.auto_feldname: template_field_name = source_field.auto_feldname.split('_', 1)[1] vals = { 'templatefeldname': template_field_name, 'display': source_field.display, 'displaytemplate': new_display_template.id, 'feldname': source_field.feldname, 'color_used': source_field.color_used, 'color_unused': source_field.color_unused, 'mediastructure': source_field.mediastructure.id, 'is_btn': source_field.is_btn, 'btn_pos_x': source_field.btn_pos_x, 'btn_pos_y': source_field.btn_pos_y, 'btn_pos_w': source_field.btn_pos_w, 'btn_pos_h': source_field.btn_pos_h, 'btn_name': source_field.btn_name, 'btn_image': source_field.btn_image, 'btn_fieldname': source_field.btn_fieldname, 'btn_visible': source_field.btn_visible, 'btn_active': source_field.btn_active, 'btn_action_inactive': source_field.btn_action_inactive, 'btn_action_active': source_field.btn_action_active, 'btn_playlist_zuordnung': source_field.btn_playlist_zuordnung, 'btn_gallery_rows': source_field.btn_gallery_rows, 'btn_gallery_cols': source_field.btn_gallery_cols, 'btn_gallery_prv_w': source_field.btn_gallery_prv_w, 'btn_gallery_prv_h': source_field.btn_gallery_prv_h, 'btn_has_timer': source_field.btn_has_timer, 'btn_has_timer_time': source_field.btn_has_timer_time, 'btn_editable': source_field.btn_editable, 'btn_special_actionimage': source_field.btn_special_actionimage, 'btn_special_actionimage_x': source_field.btn_special_actionimage_x, 'btn_special_actionimage_y': source_field.btn_special_actionimage_y, 'btn_special_actionimage_w': source_field.btn_special_actionimage_w, 'btn_special_actionimage_h': source_field.btn_special_actionimage_h, 'btn_special_actionimage_time': source_field.btn_special_actionimage_time, 'btn_text_1_visible': source_field.btn_text_1_visible, 'btn_text_2_visible': source_field.btn_text_2_visible, 'btn_text_3_visible': source_field.btn_text_3_visible, 'btn_text_4_visible': source_field.btn_text_4_visible, 'btn_text_1_pos_x': source_field.btn_text_1_pos_x, 'btn_text_1_pos_y': source_field.btn_text_1_pos_y, 'btn_text_2_pos_x': source_field.btn_text_2_pos_x, 'btn_text_2_pos_y': source_field.btn_text_2_pos_y, 'btn_text_3_pos_x': source_field.btn_text_3_pos_x, 'btn_text_3_pos_y': source_field.btn_text_3_pos_y, 'btn_text_4_pos_x': source_field.btn_text_4_pos_x, 'btn_text_4_pos_y': source_field.btn_text_4_pos_y, 'btn_text_1_font': source_field.btn_text_1_font, 'btn_text_2_font': source_field.btn_text_2_font, 'btn_text_3_font': source_field.btn_text_3_font, 'btn_text_4_font': source_field.btn_text_4_font, } template_field_vals.append(vals) created_template_fields = self.env['dss.advertisefields.templates'].create(template_field_vals) new_display_template.write({'feldtemplates': [(6, 0, created_template_fields.ids)]}) return { 'type': 'ir.actions.act_window', 'name': _('Neue Werbefeld-Vorlage'), 'res_model': 'dss.display.templates', 'view_mode': 'form', 'res_id': new_display_template.id, }