| @ -0,0 +1,18 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <odoo noupdate="1"> | |||
| <record id="donation_recurring_email_template" model="mail.template"> | |||
| <field name="name">Send by Email</field> | |||
| <field | |||
| name="email_from" | |||
| >${(user.email and '%s <%s>' % (user.name, user.email) or '')|safe}</field> | |||
| <field | |||
| name="subject" | |||
| >${object.company_id.name} - Recurring donation information</field> | |||
| <field name="partner_to">${object.partner_id.id}</field> | |||
| <field name="model_id" ref="donation.model_donation_donation" /> | |||
| <field name="auto_delete" eval="False" /> | |||
| <field name="lang">${object.partner_id.lang}</field> | |||
| <field name="body_html"> </field> | |||
| </record> | |||
| </odoo> | |||
| @ -1,12 +1,3 @@ | |||
| <odoo> | |||
| <data noupdate="1"> | |||
| <record model="opendons.recurring_donation_configuration" id="num1"> | |||
| <field name="generation_day">5</field> | |||
| <field name="limite_days_before">15</field> | |||
| </record> | |||
| </data> | |||
| </odoo> | |||
| @ -0,0 +1,75 @@ | |||
| from odoo import api, fields, models,_ | |||
| from odoo.exceptions import UserError,Warning | |||
| class DonationRecurringTemplateLetter(models.Model): | |||
| _inherit = "donation.donation" | |||
| template_pa_id=fields.Many2one('opendons.template_pa_letter', '(e)mail to send') | |||
| html_content=fields.Html('html content',compute='pa_html_content') | |||
| html_content_print=fields.Html('html content print') | |||
| def action_print_pa(self): | |||
| self.ensure_one() | |||
| if self.html_content: | |||
| html_content_print=self.html_content | |||
| html_content_print=html_content_print.replace('{{partner_id.name}}',self.partner_id.name) | |||
| html_content_print=html_content_print.replace('{{partner_id.firstname}}',self.partner_id.firstname) | |||
| self.html_content_print=self.html_content | |||
| return self.env.ref("opendons.report_donation_recurring_letter").report_action(self) | |||
| else: | |||
| raise Warning('please select a mail to print') | |||
| def action_send_pa(self): | |||
| self.ensure_one() | |||
| if not self.partner_id.email: | |||
| raise UserError( | |||
| _("Missing email on partner '%s'.") % self.partner_id.display_name | |||
| ) | |||
| self.partner_id.display_name | |||
| template = self.env.ref("opendons.donation_recurring_email_template") | |||
| compose_form = self.env.ref("mail.email_compose_message_wizard_form") | |||
| ctx = dict( | |||
| default_model="donation.donation", | |||
| default_res_id=self.id, | |||
| default_use_template=bool(template), | |||
| default_template_id=template.id, | |||
| default_composition_mode="comment", | |||
| default_body_html='dddd' | |||
| ) | |||
| action = { | |||
| "name": _("Compose Email"), | |||
| "type": "ir.actions.act_window", | |||
| "view_mode": "form", | |||
| "res_model": "mail.compose.message", | |||
| "view_id": compose_form.id, | |||
| "target": "new", | |||
| "context": ctx, | |||
| } | |||
| return action | |||
| def pa_html_content(self): | |||
| self.html_content=self.template_pa_id.html_content | |||
| class opendons_template_pa(models.Model): | |||
| _name = 'opendons.template_pa_letter' | |||
| _description = 'manage pa html template' | |||
| name=fields.Char('name') | |||
| description=fields.Text('description') | |||
| active=fields.Boolean('active') | |||
| html_content=fields.Html('Html content') | |||
| def action_update_pa(self): | |||
| pa=self.env['donation.donation'].search([('template_pa_id','=',int(self.id))]) | |||
| for p in pa: | |||
| p.html_content=self.html_content | |||
| @ -0,0 +1,199 @@ | |||
| from odoo import models, fields, api | |||
| from odoo.exceptions import UserError, ValidationError, Warning | |||
| from psycopg2 import sql, DatabaseError | |||
| from odoo.tools.safe_eval import safe_eval, datetime | |||
| from werkzeug import utils | |||
| import csv | |||
| import base64 | |||
| import io | |||
| import json | |||
| class opendons_partnerdraftfile(models.Model): | |||
| _name = 'opendons.partnerdraftfile' | |||
| _description = 'draft partner file' | |||
| #file= fields.Binary("Téléverser le fichier des contacts") | |||
| file = fields.Binary("Attachment") | |||
| file_name = fields.Char("Nom du fichier") | |||
| active = fields.Boolean("actif") | |||
| source_name=fields.Char("Source") | |||
| def import_csv_files(self): | |||
| self.env["opendons.partnerdraft"].search([]).unlink() | |||
| files= self.env["opendons.partnerdraftfile"].search([('active','=',True)]) | |||
| #raise Warning('fff') | |||
| for f in files: | |||
| decrypted = base64.b64decode(f.file).decode('utf-8-sig') | |||
| source_name=f.source_name | |||
| with io.StringIO(decrypted) as fp: | |||
| reader = csv.DictReader(fp, delimiter=";", quotechar='"') | |||
| for row in reader: | |||
| vals={} | |||
| vals['source_name']=source_name | |||
| for key, value in row.items(): | |||
| field_map=self.env['opendons.partnerdraftfile_mapping'].search([('external_field','=',key)]) | |||
| if field_map: | |||
| odoo_field=field_map.odoo_field | |||
| vals[odoo_field]=str(value) | |||
| else: raise Warning('champ '+str(key)+' non trouvé') | |||
| self.env['opendons.partnerdraft'].create(vals) | |||
| #raise Warning(json.dumps(row)) | |||
| action = self.env.ref("opendons.opendons_partnerdraft_action").sudo().read([])[0] | |||
| return action | |||
| def transfert_draftpartner(self): | |||
| #transfert des contacts importés, dans la base des contact odoo | |||
| partners=self.env['opendons.partnerdraft'].search([]) | |||
| fields=self.env['opendons.partnerdraftfile_mapping'].search([]) | |||
| if partners: | |||
| for p in partners: | |||
| vals={} | |||
| for f in fields: | |||
| if f.partner_field=='country_id': | |||
| if p[f.odoo_field]!='': | |||
| country=self.env['res.country'].search([('name','=',p[f.odoo_field])]) | |||
| if country:vals[f.partner_field]=country.id | |||
| else:vals[f.partner_field]=False | |||
| elif f.partner_field=='title': | |||
| if p[f.odoo_field]!='': | |||
| title=self.env['res.partner.title'].search([('name','=',p[f.odoo_field])]) | |||
| if title:vals[f.partner_field]=title.id | |||
| else:vals[f.partner_field]=False | |||
| else: | |||
| vals[f.partner_field]=False | |||
| elif f.partner_field in ('origine','statut_contact'): | |||
| if p[f.odoo_field]!=False: | |||
| vals[f.partner_field]=p[f.odoo_field].lower() | |||
| else: | |||
| vals[f.partner_field]=p[f.odoo_field] | |||
| vals['company_type']='person' | |||
| self.env['res.partner'].create(vals) | |||
| partners=self.env['opendons.partnerdraft'].search([]).unlink() | |||
| class opendons_partnerdraftfile_mapping(models.Model): | |||
| _name = 'opendons.partnerdraftfile_mapping' | |||
| _description = 'file mapping' | |||
| external_field=fields.Char('external field') | |||
| odoo_field=fields.Selection('odoo_field_selection', string='odoo field') | |||
| partner_field=fields.Selection('partner_field_selection', string='partner field') | |||
| @api.model | |||
| def odoo_field_selection(self): | |||
| field_list=self.env['opendons.partnerdraft'].fields_get() | |||
| result=[] | |||
| for key in field_list: | |||
| result.append((key,key)) | |||
| result.sort() | |||
| return result | |||
| api.model | |||
| def partner_field_selection(self): | |||
| field_list=self.env['res.partner'].fields_get() | |||
| result=[] | |||
| for key in field_list: | |||
| result.append((key,key)) | |||
| result.sort() | |||
| return result | |||
| class opendons_partnerdraft(models.Model): | |||
| _name = 'opendons.partnerdraft' | |||
| _description = 'import draft partner' | |||
| _order = "id asc" | |||
| external_id=fields.Char(string='external id') | |||
| name=fields.Char(string='nom') | |||
| firstname=fields.Char(string='prenom') | |||
| title=fields.Char(string='civilité') | |||
| street = fields.Char(string='adresse') | |||
| street2 = fields.Char(string='adresse2') | |||
| city = fields.Char(string='ville') | |||
| country = fields.Char(string='pays') | |||
| zip = fields.Char(string='code postal') | |||
| phone = fields.Char(string='tel') | |||
| email = fields.Char(string='Email') | |||
| statut_contact=fields.Char('Statut') | |||
| date_creation_contact=fields.Char(string='Date contact') | |||
| origine=fields.Char(string='Origine') | |||
| date_member=fields.Char(string='Date adhesion') | |||
| doublon=fields.Boolean(string='Doublon') | |||
| source_name=fields.Char(string='Source') | |||
| class partner(models.Model): | |||
| _inherit = 'res.partner' | |||
| external_id=fields.Char('id') | |||
| statut_contact=fields.Selection([('adhérent', 'Adhérent'), ('bienfaiteur', 'Bienfaiteur'),('contact', 'Contact'), ('soutien','Soutien') ],'Statut', index=True) | |||
| date_creation_contact=fields.Char(string='Date de création du contact', readonly=True) | |||
| origine=fields.Selection([ | |||
| ('boutique','Boutique'), | |||
| ('visiteur','Visiteur'), | |||
| ('vincennes','Vincennes'), | |||
| ('bercy','Bercy'), | |||
| ('salon zen','Salon Zen'), | |||
| ('autre','Autre'), | |||
| ('internet boutique','Internet Boutique'), | |||
| ('conf m ricard','Conf M Ricard'), | |||
| ('visite lzr 09','Visite lzr 09'), | |||
| ('retraite','Retraite'), | |||
| ('amis','Amis'), | |||
| ('centre fpmt','Centre FPMT'), | |||
| ('site réservations','Site réservations'), | |||
| ('réservations','Réservations'), | |||
| ('voyage inde','Voyage inde'), | |||
| ('internet','Internet'), | |||
| ('librairie','Librairie'), | |||
| ('site internet boutique','Site internet boutique'), | |||
| ('portes ouvertes st cosme','Portes ouvertes st cosme'), | |||
| ('t','T'), | |||
| ('maitreya','maitreya'), | |||
| ('zen','Zen'), | |||
| ('lille','Lille'), | |||
| ('alan wallace','Alan wallace'), | |||
| ('salon rouen','Salon Rouen'), | |||
| ('stage','Stage'), | |||
| ('b.actualit','B.Actualit'), | |||
| ('b. actualit','B. Actualit'), | |||
| ('r','R'), | |||
| ('institut vy','Institut vy'), | |||
| ('initiation kalachakr','Initiation kalachakr'), | |||
| ('yoga','Yoga'), | |||
| ('samsara','Samsara'), | |||
| ('missun@gmail.com','missun@gmail.com'), | |||
| ('reliques','Reliques'), | |||
| ('journal m','Journal m'), | |||
| ('nantes','Nantes'), | |||
| ('retraite vipassana','retraite vipassana'), | |||
| ('presse bouddhiste','Presse bouddhiste'), | |||
| ('réservtions','Réservtions'), | |||
| ('réservation','Réservation'), | |||
| ('site','Site'), | |||
| ('question mail','Question mail'), | |||
| ('interreligieux','interreligieux'), | |||
| ('refuge','Refuge'), | |||
| ('zoom','zoom'), | |||
| ('contact','contact'), | |||
| ],'Origine', index=True) | |||
| date_adhesion=fields.Char(string='Date adhesion', readonly=True) | |||
| @ -0,0 +1,14 @@ | |||
| from odoo import fields, models,api, _ | |||
| class OpendonsSettings(models.TransientModel): | |||
| _inherit = 'res.config.settings' | |||
| #recurring donation params | |||
| generation_day=fields.Integer('Generation day in the month',config_parameter='opendons.generation_day') | |||
| limit_days_before=fields.Integer('Limit days before generation day',config_parameter='opendons.limit_days_before') | |||
| pa_debug_mode=fields.Boolean('Debug mode',config_parameter='opendons.pa_debug_mode') | |||
| @ -0,0 +1,32 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <odoo> | |||
| <template id="opendons.report_donation_recurring_document"> | |||
| <t t-foreach="docs" t-as="o"> | |||
| <t t-call="web.internal_layout"> | |||
| <div t-field="o.html_content_print"/> | |||
| </t> | |||
| </t> | |||
| </template> | |||
| <template id="report_donation_recurring"> | |||
| <t t-call="web.html_container"> | |||
| <t t-foreach="docs" t-as="doc"> | |||
| <t | |||
| t-call="opendons.report_donation_recurring_document" | |||
| t-lang="doc.partner_id.lang" | |||
| /> | |||
| </t> | |||
| </t> | |||
| </template> | |||
| </odoo> | |||
| @ -0,0 +1,148 @@ | |||
| <?xml version="1.0"?> | |||
| <odoo> | |||
| <record model="ir.ui.view" id="opendons.partner_draft"> | |||
| <field name="name">_partner_draft list</field> | |||
| <field name="model">opendons.partnerdraft</field> | |||
| <field name="arch" type="xml"> | |||
| <tree default_order="name,firstname"> | |||
| <field name="external_id"/> | |||
| <field name="source_name"/> | |||
| <field name="name"/> | |||
| <field name="firstname"/> | |||
| <field name="title"/> | |||
| <field name="street"/> | |||
| <field name="street2"/> | |||
| <field name="city"/> | |||
| <field name="country"/> | |||
| <field name="zip"/> | |||
| <field name="phone"/> | |||
| <field name="email"/> | |||
| <field name="statut_contact"/> | |||
| <field name="date_creation_contact"/> | |||
| <field name="origine"/> | |||
| <field name="date_member"/> | |||
| </tree> | |||
| </field> | |||
| </record> | |||
| <record model="ir.ui.view" id="opendons.partner_draftfilelist"> | |||
| <field name="name">_partner_draft file list</field> | |||
| <field name="model">opendons.partnerdraftfile</field> | |||
| <field name="arch" type="xml"> | |||
| <tree> | |||
| <field name="active"/> | |||
| <field name="source_name"/> | |||
| <field name="file_name"/> | |||
| <field name="write_date"/> | |||
| <field name="create_date"/> | |||
| </tree> | |||
| </field> | |||
| </record> | |||
| <record model="ir.ui.view" id="opendons.partner_draftfileform"> | |||
| <field name="name">_partner_draft file form</field> | |||
| <field name="model">opendons.partnerdraftfile</field> | |||
| <field name="arch" type="xml"> | |||
| <form> | |||
| <group> | |||
| <field name="active"/> | |||
| <field name="source_name"/> | |||
| <field name="file" filename="file_name"/> | |||
| <field name="file_name" invisible="1"/> | |||
| </group> | |||
| </form> | |||
| </field> | |||
| </record> | |||
| <record model="ir.actions.server" id="ir_action_partnerdraft_import"> | |||
| <field name="name">import file draft partner</field> | |||
| <field name="model_id" ref="opendons.model_opendons_partnerdraftfile"/> | |||
| <field name="state">code</field> | |||
| <field name="code">action=model.import_csv_files()</field> | |||
| </record> | |||
| <record model="ir.actions.server" id="ir_action_partnerdraft_transfert"> | |||
| <field name="name">transfert draft partners</field> | |||
| <field name="model_id" ref="opendons.model_opendons_partnerdraftfile"/> | |||
| <field name="state">code</field> | |||
| <field name="code">action=model.transfert_draftpartner()</field> | |||
| </record> | |||
| <record model="ir.ui.view" id="opendons.partner_draftfile_mapping_list"> | |||
| <field name="name">_partner_draft file ampping list</field> | |||
| <field name="model">opendons.partnerdraftfile_mapping</field> | |||
| <field name="arch" type="xml"> | |||
| <tree> | |||
| <field name="external_field"/> | |||
| <field name="odoo_field"/> | |||
| <field name="partner_field"/> | |||
| </tree> | |||
| </field> | |||
| </record> | |||
| <record id="view_partner_form_info_import" model="ir.ui.view"> | |||
| <field name="name">opendons.res.partner.form</field> | |||
| <field name="model">res.partner</field> | |||
| <field name="inherit_id" ref="base.view_partner_form" /> | |||
| <field name="arch" type="xml"> | |||
| <xpath expr="//page[@name='internal_notes']" position="before"> | |||
| <page name="Import infos" string="Import infos"> | |||
| <group name="Import infos" string="Import infos" col="6"> | |||
| <field name="external_id"/> | |||
| <field name="statut_contact"/> | |||
| <field name="date_creation_contact"/> | |||
| <field name="origine"/> | |||
| <field name="date_adhesion"/> | |||
| </group> | |||
| </page> | |||
| </xpath> | |||
| </field> | |||
| </record> | |||
| <record id="opendons_partnerdraft_action" model="ir.actions.act_window"> | |||
| <field name="name">Partners draft</field> | |||
| <field name="res_model">opendons.partnerdraft</field> | |||
| <field name="view_mode">tree,form</field> | |||
| <field name="context"></field> | |||
| </record> | |||
| <record id="opendons_partnerdraftfile_action" model="ir.actions.act_window"> | |||
| <field name="name">Partners draft file</field> | |||
| <field name="res_model">opendons.partnerdraftfile</field> | |||
| <field name="view_mode">tree,form</field> | |||
| <field name="context"></field> | |||
| </record> | |||
| <record id="opendons_partnerdraft_file_mapping_action" model="ir.actions.act_window"> | |||
| <field name="name">file mapping</field> | |||
| <field name="res_model">opendons.partnerdraftfile_mapping</field> | |||
| <field name="view_mode">tree,form</field> | |||
| <field name="context"></field> | |||
| </record> | |||
| <menuitem id="opendons_partnerdraft_title_menu" name ="Partners import" | |||
| parent="contacts.menu_contacts" sequence="4"/> | |||
| <menuitem id="opendons_partnerdraft_menu" action="opendons_partnerdraft_action" name ="Partners imported" | |||
| parent="opendons_partnerdraft_title_menu" sequence="1"/> | |||
| <menuitem id="opendons_partnerdraftfile_menu" action="opendons_partnerdraftfile_action" name ="Partners files" | |||
| parent="opendons_partnerdraft_title_menu" sequence="2"/> | |||
| <menuitem id="opendons_partnerdraft_file_mapping_menu" action="opendons_partnerdraft_file_mapping_action" name ="mapping fields" | |||
| parent="opendons_partnerdraft_title_menu" sequence="3"/> | |||
| <menuitem id="opendons_partnerdraftfileimport_menu" action="ir_action_partnerdraft_import" name ="Import files" | |||
| parent="opendons_partnerdraft_title_menu" sequence="4"/> | |||
| <menuitem id="opendons_partnerdraftfiletransfert_menu" action="ir_action_partnerdraft_transfert" name ="Draft Partners transfert" | |||
| parent="opendons_partnerdraft_title_menu" sequence="5"/> | |||
| </odoo> | |||
| @ -0,0 +1,55 @@ | |||
| <odoo> | |||
| <record id="res_config_settings_view_form" model="ir.ui.view"> | |||
| <field name="name">res.config.settings.view.form.inherit.opendons</field> | |||
| <field name="model">res.config.settings</field> | |||
| <field name="inherit_id" ref="base.res_config_settings_view_form" /> | |||
| <field name="arch" type="xml"> | |||
| <xpath expr="//div[hasclass('settings')]" position="inside"> | |||
| <div class="app_settings_block" data-string="Opendon" data-key="opendons"> | |||
| <h2>Recurring payment management</h2> | |||
| <div class="row mt16 o_settings_container"> | |||
| <div class="o_setting_left_pane"> | |||
| <label for="generation_day" class="o_light_label"/> | |||
| <field name="generation_day"/> | |||
| <label for="limit_days_before" class="o_light_label"/> | |||
| <field name="limit_days_before"/> | |||
| <label for="pa_debug_mode" class="o_light_label"/> | |||
| <field name="pa_debug_mode"/> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </xpath> | |||
| </field> | |||
| </record> | |||
| <data noupdate="1"> | |||
| <!-- <record id="opendons_generation_day_param" model="ir.config_parameter"> | |||
| <field name="key">opendons.generation_day</field> | |||
| <field name="value">5</field> | |||
| </record> | |||
| <record id="opendons_limit_days_before_param" model="ir.config_parameter"> | |||
| <field name="key">opendons.limit_days_before</field> | |||
| <field name="value">15</field> | |||
| </record> | |||
| <record id="opendons_pa_debug_mode" model="ir.config_parameter"> | |||
| <field name="key">opendons.pa_debug_mode</field> | |||
| <field name="value">False</field> | |||
| </record> --> | |||
| </data> | |||
| <record model="ir.actions.act_window" id="action_recurring_payment_config"> | |||
| <field name="name">Settings</field> | |||
| <field name="type">ir.actions.act_window</field> | |||
| <field name="res_model">res.config.settings</field> | |||
| <field name="view_id" ref="res_config_settings_view_form"/> | |||
| <field name="view_mode">form</field> | |||
| <field name="target">inline</field> | |||
| <field name="context">{'module':'opendons'}</field> | |||
| </record> | |||
| <menuitem id="menu_recurring_donation_configuration" | |||
| action="action_recurring_payment_config" | |||
| parent="recurring_donation_configuration_menu" | |||
| sequence="30"/> | |||
| </odoo> | |||
| @ -0,0 +1,43 @@ | |||
| <odoo> | |||
| <record model="ir.ui.view" id="opendons.template_pa_form" > | |||
| <field name="name">opendons_template_pa Form</field> | |||
| <field name="model">opendons.template_pa_letter</field> | |||
| <field name="arch" type="xml"> | |||
| <form> | |||
| <header> | |||
| <!-- <button name="action_update_receipts" type="object" string="Update receipts" class="oe_highlight" confirm="Voulez-vous modifier les RF liés à ce template ?"/> --> | |||
| </header> | |||
| <sheet> | |||
| <group name="main"> | |||
| <field name="name"/> | |||
| <field name="description"/> | |||
| <field name="active"/> | |||
| <field name="html_content"/> | |||
| </group> | |||
| </sheet> | |||
| </form> | |||
| </field> | |||
| </record> | |||
| <record model="ir.actions.act_window" id="template_pa_action"> | |||
| <field name="name">Recurring donation Templates </field> | |||
| <field name="res_model">opendons.template_pa_letter</field> | |||
| <field name="view_mode">tree,form</field> | |||
| </record> | |||
| <menuitem | |||
| id="opendons_template_pa" | |||
| action="template_pa_action" | |||
| parent="opendons.recurring_donation_configuration_menu" | |||
| sequence="30" | |||
| /> | |||
| </odoo> | |||
| @ -1 +1,2 @@ | |||
| from . import operation_duplicate_wizard | |||
| from . import operation_duplicate_wizard | |||
| from . import recurring_donation_wizard | |||
| @ -0,0 +1,17 @@ | |||
| from odoo import fields, models, _ | |||
| class RecurringDonationWizard(models.TransientModel): | |||
| _name = 'opendons.recurringdonation.wizard' | |||
| _description = 'recurring donation wizard' | |||
| stopped_reason=fields.Selection(string='Stop reason',selection=[('motif1', 'Motif 1'), ('motif2', 'Motif 2')]) | |||
| donation_id=fields.Integer('donation id') | |||
| def stopRecurringDonation(self): | |||
| donation=self.env['donation.donation'].search([('id','=',self.donation_id)]) | |||
| donation.recurring_template="stopped" | |||
| donation.stopped_reason=self.stopped_reason | |||
| donation.stopped_date=fields.Date.context_today(self) | |||
| @ -0,0 +1,29 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <odoo> | |||
| <record id="recurring_donation_view" model="ir.ui.view"> | |||
| <field name="name">donation.recurring.wizard</field> | |||
| <field name="model">opendons.recurringdonation.wizard</field> | |||
| <field name="arch" type="xml"> | |||
| <form> | |||
| <p>Please select a raison :</p> | |||
| <field name="stopped_reason"/> | |||
| <footer> | |||
| <button name="stopRecurringDonation" string="stop the recurring donation" type="object"/> | |||
| <button string="Cancel" class="btn btn-secondary" special="cancel" /> | |||
| </footer> | |||
| </form> | |||
| </field> | |||
| </record> | |||
| <record id="action_recurring_donation_wizard" model="ir.actions.act_window"> | |||
| <field name="name">Stop recurring donation</field> | |||
| <field name="res_model">opendons.recurringdonation.wizard</field> | |||
| <field name="view_mode">form</field> | |||
| <field name="target">new</field> | |||
| <field name="binding_model_id" ref="donation.model_donation_donation"/> | |||
| </record> | |||
| </odoo> | |||