[ADD] ADD cancell membership,renew,devmembership customuzation
This commit is contained in:
parent
9b2b86bf8e
commit
dded48e303
|
|
@ -70,6 +70,7 @@ odoo app manage Membership subscription plans, odoo membership memeber, odoo mem
|
|||
'data/sequence.xml',
|
||||
'views/main_menu.xml',
|
||||
'wizard/renew_membership.xml',
|
||||
'wizard/cancel_membership.xml',
|
||||
'views/partner_extended.xml',
|
||||
'views/dev_membership.xml',
|
||||
'views/product_template.xml',
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="template_membership" model="mail.template">
|
||||
<field name="name">membership.email.template</field>
|
||||
<field name="subject">Membership Detail</field>
|
||||
|
|
@ -42,7 +43,7 @@
|
|||
<field name="name">Membership Expire Second Reminder</field>
|
||||
<field name="email_from">${(object.company_id.email or '') | safe}</field>
|
||||
<field name="email_to">${(object.partner_id.email or '') | safe}</field>
|
||||
<field name="subject">Membership Expire Reminder</field>
|
||||
<field name="subject">Membership Second Expire Reminder</field>
|
||||
<field name="model_id" ref="dev_membership.model_dev_membership"/>
|
||||
<field name="auto_delete" eval="True"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
|
|
|
|||
|
|
@ -26,10 +26,15 @@ class DevMembership(models.Model):
|
|||
from_date = fields.Date(string="Membership From Date", tracking=3, required=1, default=lambda *a: (datetime.now().date()))
|
||||
to_date = fields.Date(string="Membership To Date", tracking=3)
|
||||
partner_id = fields.Many2one('res.partner', string="Partner", domain="[('is_member', '=', True)]", tracking=2, required=1)
|
||||
id_no = fields.Char(string='',related='partner_id.identification_number',store=True)
|
||||
phone = fields.Char(string='Phone',related='partner_id.phone',store=True)
|
||||
email = fields.Char(string='Email',related='partner_id.email',store=True)
|
||||
product_id = fields.Many2one('product.product', string="Membership Product", domain="[('is_membership', '=', True)]", tracking=2, required=1)
|
||||
membership_fees = fields.Float(string="Membership Fees", related="product_id.list_price", readonly=1)
|
||||
membership_fees = fields.Float(string="Membership Fees",readonly=0)
|
||||
is_free = fields.Boolean(string="Is Free",related="product_id.is_free",)
|
||||
|
||||
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.company, required=1, tracking=3)
|
||||
duration = fields.Integer(string="Duration", related="product_id.duration")
|
||||
duration = fields.Integer(string="Duration",readonly=0,)
|
||||
description = fields.Text(string="Description", related="product_id.description", readonly=False)
|
||||
interval = fields.Selection(string="Interval", related="product_id.interval")
|
||||
|
||||
|
|
@ -42,14 +47,55 @@ class DevMembership(models.Model):
|
|||
membership_id = fields.Many2one('dev.membership', string='Renew Membership')
|
||||
invoice_id = fields.Many2one('account.move', string='Invoice')
|
||||
user_id = fields.Many2one('res.users', string='Resposible', default=lambda self:self.env.user)
|
||||
|
||||
|
||||
cancel_reason_id = fields.Many2one('cancellation.reason',string='Cancel Membership Reason')
|
||||
|
||||
@api.onchange('product_id')
|
||||
def _onchange_membership_type(self):
|
||||
if self.product_id:
|
||||
self.membership_fees = self.product_id.list_price
|
||||
self.duration = self.product_id.duration
|
||||
|
||||
@api.constrains('membership_fees')
|
||||
def _check_subscription_fee(self):
|
||||
for record in self:
|
||||
if record.membership_fees < record.product_id.list_price:
|
||||
raise ValidationError(_('Membership fees cannot be less than the default value in Setting of membrship type.'))
|
||||
|
||||
|
||||
@api.constrains('duration')
|
||||
def _check_duration(self):
|
||||
for record in self:
|
||||
if record.duration < record.product_id.duration:
|
||||
raise ValidationError(_('Duration cannot be less than the default value in Setting of membrship type.'))
|
||||
|
||||
@api.constrains('from_date')
|
||||
def _check_from_date(self):
|
||||
for rec in self:
|
||||
if not rec.from_date >= datetime.now().date():
|
||||
raise ValidationError("Membership date should be greater than or equal to today's date!!")
|
||||
|
||||
def make_activity_group(self):
|
||||
# templet_id = self.env.ref('dev_membership.template_membership_cancell')
|
||||
# templet2_id = self.env.ref('dev_membership.template_membership_cancell2')
|
||||
date_deadline = fields.Date.today()
|
||||
note=_('Membership %s is Cancelled') % self.name
|
||||
|
||||
summary = _("Membership Cancellation")
|
||||
self.sudo().activity_schedule(
|
||||
'mail.mail_activity_data_todo', date_deadline,
|
||||
note=note,
|
||||
user_id=self.partner_id.user_id.id,
|
||||
res_id=self.id,
|
||||
summary=summary
|
||||
)
|
||||
self.sudo().activity_schedule(
|
||||
'mail.mail_activity_data_todo', date_deadline,
|
||||
note=note,
|
||||
user_id=self.user_id.id,
|
||||
res_id=self.id,
|
||||
summary=summary
|
||||
)
|
||||
|
||||
@api.constrains('partner_id', 'from_date')
|
||||
def _check_if_membership_exists(self):
|
||||
membership_obj = self.env['dev.membership'].search([('partner_id.id', '=', self.partner_id.id), ('state', 'in', ['draft', 'active', 'confirm']), ('id', '!=', self.id)])
|
||||
|
|
@ -75,9 +121,9 @@ class DevMembership(models.Model):
|
|||
self.state = 'confirm'
|
||||
|
||||
def action_active_membership(self):
|
||||
if not self.invoice_id:
|
||||
if not self.invoice_id and not self.is_free:
|
||||
raise ValidationError(_('Please Create Membership Invoice'))
|
||||
if self.invoice_id.payment_state != 'paid':
|
||||
if self.invoice_id.payment_state != 'paid' and not self.is_free:
|
||||
raise ValidationError(_('Membership Invoice is not paid.\nPlease Paid membership invoice and active the membership.'))
|
||||
self.state = 'active'
|
||||
|
||||
|
|
|
|||
|
|
@ -6,5 +6,7 @@ access_dev_membership_user,dev.membership.user,model_dev_membership,group_member
|
|||
access_dev_membership_manager,dev.membership.manager,model_dev_membership,group_membership_manager,1,1,1,1
|
||||
access_renew_membership_user,renew.membership.user,model_renew_membership,group_membership_user,1,1,1,1
|
||||
access_renew_membership_manager,renew.membership.manager,model_renew_membership,group_membership_manager,1,1,1,1
|
||||
access_renew_membership_resone,renew.membership.resone,model_cancellation_reason,,1,1,1,1
|
||||
access_renew_membership_resone,renew.membership.resone,model_cancellation_reason,group_membership_manager,1,1,1,1
|
||||
access_renew_membership_resone2,renew.membership.resone2,model_cancellation_reason,group_membership_user,1,0,0,0
|
||||
access_renew_membership_wiz_resone2,renew.membership.wiz.resone2,model_membership_request_cancel_wizard,,1,1,1,1
|
||||
|
||||
|
|
|
|||
|
|
|
@ -8,9 +8,13 @@
|
|||
<tree string="Dev Membership Tree View">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field optional="hide" name="id_no"/>
|
||||
<field optional="hide" name="phone"/>
|
||||
<field optional="hide" name="email"/>
|
||||
<field name="product_id"/>
|
||||
<field name="membership_fees"/>
|
||||
<field name="date"/>
|
||||
<field name="activity_ids" widget="list_activity"/>
|
||||
<field name="from_date"/>
|
||||
<field name="to_date"/>
|
||||
<field name="state" widget="badge" decoration-success="state in ['active', 'confirm']"
|
||||
|
|
@ -27,7 +31,8 @@
|
|||
<form string="Dev Membership Form View">
|
||||
<header>
|
||||
<button name='create_membership_invoice' type="object" string='Create Invoice' class="oe_highlight"
|
||||
attrs="{'invisible':['|',('state','!=','confirm'),('invoice_id','!=',False)]}"/>
|
||||
attrs="{'invisible':['|','|',('is_free','=',True),
|
||||
('state','!=','confirm'),('invoice_id','!=',False)]}"/>
|
||||
<button name="action_active_membership" type="object" string="Active" class="oe_highlight"
|
||||
attrs="{'invisible': ([('state', '!=', 'confirm')])}"/>
|
||||
<button name="action_confirm_membership" type="object" string="Confirm" class="oe_highlight"
|
||||
|
|
@ -37,9 +42,10 @@
|
|||
<button string="Send by Mail" name="membership_send_by_mail" type="object" class="oe_highlight"
|
||||
attrs="{'invisible': ([('state', 'not in', ['confirm', 'draft'])])}"/>
|
||||
<button string="Renew Membership" name="%(dev_membership.action_renew_membership)d" type="action"
|
||||
class="oe_highlight" attrs="{'invisible':['|',('membership_id','!=',False),('state','!=','expire')]}"/>
|
||||
<button name="action_cancel_membership" type="object" string="Cancel"
|
||||
attrs="{'invisible': ([('state', 'in', ['active','expire','cancel'])])}"/>
|
||||
class="oe_highlight"
|
||||
attrs="{'invisible':['|',('membership_id','!=',False),('state','not in',['expire','active','cancel'])]}"/>
|
||||
<button name="%(dev_membership.membership_request_cancel_wizard_action)d" type="action" string="Cancel"
|
||||
attrs="{'invisible': ([('state', 'in', ['cancel'])])}"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,active"/>
|
||||
</header>
|
||||
<sheet>
|
||||
|
|
@ -65,6 +71,10 @@
|
|||
<group>
|
||||
<group>
|
||||
<field name="partner_id" attrs="{'readonly': ([('state', '!=', 'draft')])}"/>
|
||||
<field name="id_no"/>
|
||||
<field invisible='1' name="is_free"/>
|
||||
<field name="phone"/>
|
||||
<field name="email"/>
|
||||
<field name="product_id"
|
||||
context="{'form_view_ref': 'dev_membership.form_membership_product'}"
|
||||
attrs="{'readonly': ([('state', '!=', 'draft')])}"/>
|
||||
|
|
@ -101,7 +111,7 @@
|
|||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="activity_ids" />
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -121,6 +131,7 @@
|
|||
<field name="from_date"/>
|
||||
<field name="to_date"/>
|
||||
<field name="state"/>
|
||||
<field name="activity_ids" widget="list_activity" optional="show"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click">
|
||||
|
|
@ -137,7 +148,9 @@
|
|||
Membership
|
||||
</strong>
|
||||
<div name="from_date">
|
||||
<field name="from_date"/> - <field name="to_date"/>
|
||||
<field name="from_date"/>
|
||||
-
|
||||
<field name="to_date"/>
|
||||
</div>
|
||||
<div t-if="record.partner_id.value">
|
||||
<t t-esc="record.partner_id.value"/>
|
||||
|
|
@ -151,6 +164,15 @@
|
|||
options="{'classes': {'draft': 'warning', 'expire': 'danger', 'confirm': 'success', 'active' : 'success'}}"/>
|
||||
</h5>
|
||||
</div>
|
||||
<div class="o_kanban_record_bottom">
|
||||
<div class="oe_kanban_bottom_left text-muted">
|
||||
<span>
|
||||
<t t-esc="record.from_date.value"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<field name="activity_ids" widget="kanban_activity"/>
|
||||
<br/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -181,31 +203,52 @@
|
|||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<!-- add activity -->
|
||||
<record id="view_dev_membership_activity" model="ir.ui.view">
|
||||
<field name="name">activity.dev.membership</field>
|
||||
<field name="model">dev.membership</field>
|
||||
<field name="arch" type="xml">
|
||||
<activity string="Memberships">
|
||||
<field name="id"/>
|
||||
<templates>
|
||||
<div t-name="activity-box">
|
||||
<img t-att-src="activity_image('dev.membership', 'image_128', record.id.raw_value)" role="img"
|
||||
t-att-title="record.id.value" t-att-alt="record.id.value"/>
|
||||
<div>
|
||||
<field name="name" display="full"/>
|
||||
<field name="partner_id" muted="1" display="full"/>
|
||||
</div>
|
||||
</div>
|
||||
</templates>
|
||||
</activity>
|
||||
</field>
|
||||
</record>
|
||||
<!-- end -->
|
||||
|
||||
<!--All Membership Action-->
|
||||
<record id="action_dev_membership" model="ir.actions.act_window">
|
||||
<field name="name">Memberships</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dev.membership</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="view_mode">kanban,tree,activity,form</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Active Membership-->
|
||||
<record id="action_active_membership" model="ir.actions.act_window">
|
||||
<field name="name">Active Memberships</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dev.membership</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="view_mode">kanban,tree,activity,form</field>
|
||||
<field name="domain">[('state', '=', 'active')]</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Expire Membership-->
|
||||
<record id="action_expire_membership" model="ir.actions.act_window">
|
||||
<field name="name">Expire Memberships</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dev.membership</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="domain">[('state', '=', 'expire')]</field>
|
||||
<field name="view_mode">kanban,tree,activity,form</field>
|
||||
<field name="domain">[('state', 'in', ['cancel','expire'])]</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Memberships"
|
||||
|
|
@ -213,13 +256,13 @@
|
|||
parent="menu_membership_root"
|
||||
action="action_dev_membership"
|
||||
sequence="1"/>
|
||||
|
||||
|
||||
<menuitem name="Active Memberships"
|
||||
id="menu_active_membership"
|
||||
parent="menu_membership_root"
|
||||
action="action_active_membership"
|
||||
sequence="3"/>
|
||||
|
||||
|
||||
<menuitem name="Expire Memberships"
|
||||
id="menu_expire_membership"
|
||||
parent="menu_membership_root"
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
<field name="memebership_end_date" optional="show"/>
|
||||
<field name="product_id" optional="show"/>
|
||||
<field name="category_id" widget="many2many_tags" optional="show"/>
|
||||
<field name="activity_ids" optional="show"/>
|
||||
<field name="activity_ids" widget="list_activity" optional="show"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -43,7 +43,9 @@
|
|||
<field name="country_id"/>
|
||||
<field name="mobile"/>
|
||||
<field name="state_id"/>
|
||||
<field name="join_date"/>
|
||||
<field name="category_id" widget="many2many_tags"/>
|
||||
|
||||
<field name="image_128"/>
|
||||
<field name="type"/>
|
||||
<field name="active_membership_id"/>
|
||||
|
|
@ -122,99 +124,112 @@
|
|||
<span class="oe_kanban_partner_links"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
<!-- -->
|
||||
<div class="o_kanban_record_bottom">
|
||||
<div class="oe_kanban_bottom_left text-muted">
|
||||
<span>
|
||||
<t t-esc="record.join_date.value"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<field name="activity_ids" widget="kanban_activity"/>
|
||||
<br/>
|
||||
<!-- -->
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!--form-->
|
||||
<record id="view_res_partner_memeber_form" model="ir.ui.view">
|
||||
<field name="name">view.res.partner.member.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='vat']" position="before">
|
||||
<field name="nationality_id"/>
|
||||
<field name="birth_date"/>
|
||||
<field name="age"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='function']" position="after">
|
||||
<field name="employer"/>
|
||||
</xpath>
|
||||
<xpath expr="//page" position="after">
|
||||
<page name="memebership" string='Memebership'>
|
||||
<group>
|
||||
<group name="memeber">
|
||||
<field name="is_member"/>
|
||||
<field name="product_id"/>
|
||||
<!--form-->
|
||||
<record id="view_res_partner_memeber_form" model="ir.ui.view">
|
||||
<field name="name">view.res.partner.member.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='vat']" position="before">
|
||||
<field name="nationality_id"/>
|
||||
<field name="birth_date"/>
|
||||
<field name="age"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='function']" position="after">
|
||||
<field name="employer"/>
|
||||
</xpath>
|
||||
<xpath expr="//page" position="after">
|
||||
<page name="memebership" string='Memebership'>
|
||||
<group>
|
||||
<group name="memeber">
|
||||
<field name="is_member"/>
|
||||
<field name="product_id"/>
|
||||
|
||||
</group>
|
||||
<group name="other">
|
||||
<field name="join_date"/>
|
||||
<field name="memebership_end_date"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='mobile']" position="attributes">
|
||||
<attribute name="required">True</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='email']" position="attributes">
|
||||
<attribute name="required">True</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<button name="view_membership" type="object"
|
||||
class="oe_stat_button"
|
||||
icon="fa-vcard-o" attrs="{'invisible' : [('membership_count', '=', 0)]}">
|
||||
<div class="o_stat_info">
|
||||
<field name="membership_count" class="o_stat_value"/>
|
||||
<span class="o_stat_text">Membership</span>
|
||||
</div>
|
||||
</button>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<!-- search -->
|
||||
<record id="view_search_res_partner" model="ir.ui.view">
|
||||
<field name="name">res.partner.search</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Res Partner Search">
|
||||
<field name="name"/>
|
||||
<field name="phone"/>
|
||||
<field name="identification_number"/>
|
||||
<filter string="Archived" name="archived" domain="[('active', '=', False)]"/>
|
||||
<filter string="Expired Membership" name="memebership_end_date"/>
|
||||
<group string="Group By">
|
||||
<filter string="Membership Type" name="product_id" context="{'group_by': 'product_id'}"/>
|
||||
<filter string="Branch" name="branch_id" context="{'group_by': 'branch_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<!--end -->
|
||||
<!--Action-->
|
||||
<record id="action_members" model="ir.actions.act_window">
|
||||
<field name="name">Member</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.partner</field>
|
||||
<field name="domain">[('is_member', '=', True)]</field>
|
||||
<field name="context">{'default_is_member' : 1}</field>
|
||||
<field name="view_mode">kanban,tree,activity,form</field>
|
||||
<field name="search_view_id" ref="dev_membership.view_search_res_partner"/>
|
||||
<group name="other">
|
||||
<field name="join_date"/>
|
||||
<field name="memebership_end_date"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='mobile']" position="attributes">
|
||||
<attribute name="required">True</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='email']" position="attributes">
|
||||
<attribute name="required">True</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<button name="view_membership" type="object"
|
||||
class="oe_stat_button"
|
||||
icon="fa-vcard-o" attrs="{'invisible' : [('membership_count', '=', 0)]}">
|
||||
<div class="o_stat_info">
|
||||
<field name="membership_count" class="o_stat_value"/>
|
||||
<span class="o_stat_text">Membership</span>
|
||||
</div>
|
||||
</button>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<!-- search -->
|
||||
<record id="view_search_res_partner" model="ir.ui.view">
|
||||
<field name="name">res.partner.search</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Res Partner Search">
|
||||
<field name="name"/>
|
||||
<field name="phone"/>
|
||||
<field name="category_id"/>
|
||||
<field name="identification_number"/>
|
||||
<filter string="Archived" name="archived" domain="[('active', '=', False)]"/>
|
||||
<filter string="Expired Membership" name="membership_end_date"
|
||||
domain="[('memebership_end_date', '<=',context_today().strftime('%Y-%m-%d'))]"/>
|
||||
<group string="Group By">
|
||||
<filter string="Membership Type" name="product_id" context="{'group_by': 'product_id'}"/>
|
||||
<filter string="Branch" name="branch_id" context="{'group_by': 'branch_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<!--end -->
|
||||
<!--Action-->
|
||||
<record id="action_members" model="ir.actions.act_window">
|
||||
<field name="name">Member</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.partner</field>
|
||||
<field name="domain">[('is_member', '=', True)]</field>
|
||||
<field name="context">{'default_is_member' : 1}</field>
|
||||
<field name="view_mode">kanban,tree,activity,form</field>
|
||||
<field name="search_view_id" ref="dev_membership.view_search_res_partner"/>
|
||||
|
||||
<field name="view_ids" eval="[(5,0,0),
|
||||
<field name="view_ids" eval="[(5,0,0),
|
||||
(0,0,{'sequence' : 3, 'view_mode': 'kanban' , 'view_id' : ref('dev_membership.dev_res_partner_member_kanban_view')}),
|
||||
(0,0,{'sequence' : 3, 'view_mode': 'tree' , 'view_id' : ref('dev_membership.view_res_partner_member_tree')})]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<!--Menus-->
|
||||
<menuitem name="Members"
|
||||
id="menu_members"
|
||||
parent="menu_membership_main"
|
||||
action="action_members"
|
||||
sequence="2"/>
|
||||
</odoo>
|
||||
<!--Menus-->
|
||||
<menuitem name="Members"
|
||||
id="menu_members"
|
||||
parent="menu_membership_main"
|
||||
action="action_members"
|
||||
sequence="2"/>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -110,10 +110,24 @@
|
|||
<field name="context">{'module' : 'dev_membership', 'bin_size': False}</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dev_membership_config_refuse_resone" model="ir.actions.act_window">
|
||||
<field name="name">Cancell Resone</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">cancellation.reason</field>
|
||||
<field name="view_mode">form,tree</field>
|
||||
</record>
|
||||
|
||||
<!--Menu-->
|
||||
<menuitem id="menu_dev_membership_general_settings"
|
||||
name="Settings"
|
||||
parent="menu_configuration_root"
|
||||
sequence="0"
|
||||
action="action_dev_membership_config_settings"/>
|
||||
|
||||
<menuitem id="menu_dev_membership_general_reasons"
|
||||
name="Cancell Resones"
|
||||
parent="menu_configuration_root"
|
||||
sequence="2"
|
||||
action="action_dev_membership_config_refuse_resone"/>
|
||||
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -2,3 +2,4 @@
|
|||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import renew_membership
|
||||
from . import cancel_membership
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
|
||||
|
||||
class MembershipRefues(models.TransientModel):
|
||||
_name = "membership.request.cancel.wizard"
|
||||
_description = "Membership refuse Reason wizard"
|
||||
|
||||
reason_id = fields.Many2one('cancellation.reason',string='Cancel Membership Reason' ,required=True)
|
||||
request_id = fields.Many2one('dev.membership')
|
||||
user_id = fields.Many2one('res.users', string='User', default=lambda self: self.env.user,)
|
||||
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
res = super(MembershipRefues, self).default_get(fields)
|
||||
active_ids = self.env.context.get('active_ids', [])
|
||||
active_model = self.env.context.get('active_model', [])
|
||||
if active_model == 'dev.membership':
|
||||
res.update({'request_id': active_ids[0] if active_ids else False})
|
||||
return res
|
||||
|
||||
def request_cancel_reason(self):
|
||||
for record in self:
|
||||
record.ensure_one()
|
||||
subject = _("Membership Cancelled")
|
||||
body = _('The Membership was Cancelled by %s for the following reason: %s ') % (
|
||||
self.env.user.name, record.reason_id.name)
|
||||
|
||||
if record.request_id:
|
||||
record.request_id.cancel_reason_id.name = record.reason_id.name
|
||||
record.request_id.state = 'cancel'
|
||||
record.request_id.message_post(body=body, subject=subject)
|
||||
record.request_id.make_activity_group()
|
||||
# end chatter
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="membership_cancel_wizard_view_form" model="ir.ui.view">
|
||||
<field name="name">membership.request.cancel.wizard.form</field>
|
||||
<field name="model">membership.request.cancel.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Cancel Membership Reason">
|
||||
<separator string="Cancel Membership Reason"/>
|
||||
<group>
|
||||
<field name="reason_id"/>
|
||||
|
||||
</group>
|
||||
<footer>
|
||||
<button string='Save' name="request_cancel_reason" type="object" class="oe_highlight"/>
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="membership_request_cancel_wizard_action" model="ir.actions.act_window">
|
||||
<field name="name">Cancel Membership Reason</field>
|
||||
<field name="res_model">membership.request.cancel.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="membership_cancel_wizard_view_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Loading…
Reference in New Issue