Browse Source

May 24 : [UPDT] Updated 'subscription_package'

pull/257/head
AjmalCybro 2 years ago
parent
commit
a8154db763
  1. 2
      subscription_package/__manifest__.py
  2. 8
      subscription_package/models/recurrence_period.py
  3. 62
      subscription_package/models/subscription_package.py
  4. 2
      subscription_package/models/subscription_products.py
  5. BIN
      subscription_package/static/description/assets/screenshots/SUB13.png
  6. BIN
      subscription_package/static/description/assets/screenshots/SUB15.png
  7. BIN
      subscription_package/static/description/assets/screenshots/hero.gif
  8. 8
      subscription_package/static/description/index.html
  9. 8
      subscription_package/views/subscription_package.xml

2
subscription_package/__manifest__.py

@ -22,7 +22,7 @@
{ {
'name': 'Subscription Management For Community Odoo 16', 'name': 'Subscription Management For Community Odoo 16',
'Version': '16.0.1.0.0', 'Version': '16.0.1.1.1',
'summary': 'Subscription Package Management Module For Odoo16 Community', 'summary': 'Subscription Package Management Module For Odoo16 Community',
'description': 'Subscription Package Management Module For Odoo16 Community', 'description': 'Subscription Package Management Module For Odoo16 Community',
'category': 'Sales', 'category': 'Sales',

8
subscription_package/models/recurrence_period.py

@ -19,7 +19,6 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from odoo import models, fields from odoo import models, fields
@ -31,13 +30,14 @@ class RecurrencePeriod(models.Model):
name = fields.Char(string="Name") name = fields.Char(string="Name")
duration = fields.Float(string="Duration") duration = fields.Float(string="Duration")
unit = fields.Selection([('hours', 'hours'), unit = fields.Selection([('hours', 'hours'),
('days', 'Days'),('weeks', 'Weeks'),('months', 'Months'),('years', 'Years')], ('days', 'Days'), ('weeks', 'Weeks'),
('months', 'Months'), ('years', 'Years')],
string='Unit') string='Unit')
class SubPackages(models.Model): class SubPackages(models.Model):
""" This function is used to inherit subscription packages""" """ This function is used to inherit subscription packages"""
_inherit = 'subscription.package' _inherit = 'subscription.package'
recurrence_period_id = fields.Many2one("recurrence.period" , string= "Recurrence Period") recurrence_period_id = fields.Many2one("recurrence.period",
string="Recurrence Period")

62
subscription_package/models/subscription_package.py

@ -46,10 +46,12 @@ class SubscriptionPackageProductLine(models.Model):
product_uom_id = fields.Many2one('uom.uom', string='UoM', store=True, product_uom_id = fields.Many2one('uom.uom', string='UoM', store=True,
related='product_id.uom_id', related='product_id.uom_id',
ondelete='restrict') ondelete='restrict')
uom_catg_id = fields.Many2one('uom.category', string='UoM Category', store=True, uom_catg_id = fields.Many2one('uom.category', string='UoM Category',
store=True,
related='product_id.uom_id.category_id') related='product_id.uom_id.category_id')
unit_price = fields.Float(string='Unit Price', store=True, readonly=False, unit_price = fields.Float(string='Unit Price', store=True, readonly=False,
related='product_id.list_price') related='product_id.list_price')
discount = fields.Float(string="Discount (%)")
currency_id = fields.Many2one('res.currency', string='Currency', currency_id = fields.Many2one('res.currency', string='Currency',
store=True, store=True,
related='subscription_id.currency_id') related='subscription_id.currency_id')
@ -61,12 +63,14 @@ class SubscriptionPackageProductLine(models.Model):
store=True, store=True,
related='subscription_id.partner_id') related='subscription_id.partner_id')
@api.depends('product_qty', 'unit_price') @api.depends('product_qty', 'unit_price', 'discount')
def _compute_total_amount(self): def _compute_total_amount(self):
""" Calculate subtotal amount of product line """ """ Calculate subtotal amount of product line """
for rec in self: for rec in self:
if rec.product_id: if rec.product_id:
rec.total_amount = rec.unit_price * rec.product_qty rec.total_amount = rec.unit_price * rec.product_qty
if rec.discount != 0:
rec.total_amount -= rec.total_amount * (rec.discount / 100)
def _valid_field_parameter(self, field, name): def _valid_field_parameter(self, field, name):
if name == 'ondelete': if name == 'ondelete':
@ -186,11 +190,9 @@ class SubscriptionPackage(models.Model):
rec.current_stage = rec.env['subscription.package.stage'].search( rec.current_stage = rec.env['subscription.package.stage'].search(
[('id', '=', rec.stage_id.id)]).category [('id', '=', rec.stage_id.id)]).category
@api.depends('start_date') @api.constrains('start_date')
def _compute_next_invoice_date(self): def _compute_next_invoice_date(self):
pending_subscriptions = self.env['subscription.package'].search( for sub in self.env['subscription.package'].search([]):
[('stage_category', '=', 'progress')])
for sub in pending_subscriptions:
if sub.start_date: if sub.start_date:
sub.next_invoice_date = sub.start_date + relativedelta( sub.next_invoice_date = sub.start_date + relativedelta(
days=sub.plan_id.renewal_time) days=sub.plan_id.renewal_time)
@ -234,46 +236,6 @@ class SubscriptionPackage(models.Model):
'target': 'new' 'target': 'new'
} }
def button_payment(self):
""" Button to create invoice for subscription package"""
this_products_line = []
for rec in self.product_line_ids:
rec_list = [0, 0, {'product_id': rec.product_id.id,
'quantity': rec.product_qty}]
this_products_line.append(rec_list)
invoices = self.env['account.move'].search(
[('subscription_id', '=', self.id), ('state', '=', 'draft')])
orders = self.env['sale.order'].search(
[('subscription_id', '=', self.id), ('invoice_status', '=', 'no')])
if invoices:
for invoice in invoices:
invoice.action_post()
if orders and invoices:
for order in orders:
order.action_confirm()
for invoice in invoices:
invoice.action_post()
out_invoice = self.env['account.move'].create(
{
'move_type': 'out_invoice',
'date': fields.Date.today(),
'invoice_date': fields.Date.today(),
'partner_id': self.partner_invoice_id.id,
'currency_id': self.partner_invoice_id.currency_id.id,
'invoice_line_ids': this_products_line
})
self.env['account.move'].payment_id = out_invoice.id
if self.stage_category == 'progress':
values = {'start_date': datetime.datetime.today()}
self.write(values)
return {
'name': 'Subscription Payment',
'type': 'ir.actions.act_window',
'res_model': 'account.move',
'view_mode': 'form',
'res_id': out_invoice.id
}
def button_start_date(self): def button_start_date(self):
"""Button to start subscription package""" """Button to start subscription package"""
@ -297,7 +259,8 @@ class SubscriptionPackage(models.Model):
this_products_line = [] this_products_line = []
for rec in self.product_line_ids: for rec in self.product_line_ids:
rec_list = [0, 0, {'product_id': rec.product_id.id, rec_list = [0, 0, {'product_id': rec.product_id.id,
'product_uom_qty': rec.product_qty}] 'product_uom_qty': rec.product_qty,
'discount': rec.discount}]
this_products_line.append(rec_list) this_products_line.append(rec_list)
orders = self.env['sale.order'].search( orders = self.env['sale.order'].search(
[('id', '=', self.sale_order_count), [('id', '=', self.sale_order_count),
@ -320,7 +283,10 @@ class SubscriptionPackage(models.Model):
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
'res_model': 'sale.order', 'res_model': 'sale.order',
'domain': [('id', '=', so_id.id)], 'domain': [('id', '=', so_id.id)],
'view_mode': 'tree,form' 'view_mode': 'tree,form',
'context': {
"create": False
}
} }
@api.model_create_multi @api.model_create_multi

2
subscription_package/models/subscription_products.py

@ -39,7 +39,7 @@ class AccountMove(models.Model):
[('name', '=', rec.get('invoice_origin'))]) [('name', '=', rec.get('invoice_origin'))])
if so_id.is_subscription is True: if so_id.is_subscription is True:
new_vals_list = [{'is_subscription': True, new_vals_list = [{'is_subscription': True,
'subscription_id': so_id.subscription_id}] 'subscription_id': so_id.subscription_id.id}]
vals_list[0].update(new_vals_list[0]) vals_list[0].update(new_vals_list[0])
return super().create(vals_list) return super().create(vals_list)

BIN
subscription_package/static/description/assets/screenshots/SUB13.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 161 KiB

BIN
subscription_package/static/description/assets/screenshots/SUB15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

BIN
subscription_package/static/description/assets/screenshots/hero.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 308 KiB

8
subscription_package/static/description/index.html

@ -296,6 +296,14 @@
<img src="assets/screenshots/SUB11.png" class="img-thumbnail"> <img src="assets/screenshots/SUB11.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Discount in Subscriptions
</h3>
<img src="assets/screenshots/SUB15.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> Create Subscription <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> Create Subscription
Package with Sale Order Package with Sale Order

8
subscription_package/views/subscription_package.xml

@ -80,10 +80,7 @@
attrs="{'invisible': [('stage_category','!=', 'draft')]}"/> attrs="{'invisible': [('stage_category','!=', 'draft')]}"/>
<button name="button_sale_order" string="Create Sale Order" <button name="button_sale_order" string="Create Sale Order"
type="object" class="btn-primary" type="object" class="btn-primary"
attrs="{'invisible': [('stage_category','!=', 'progress')]}"/> attrs="{'invisible': ['|',('stage_category','!=', 'progress'),('so_count','>',0)]}"/>
<button name="button_payment" string="Invoice" type="object"
class="btn-primary"
attrs="{'invisible': [('stage_category','!=', 'progress')]}"/>
<button name="button_close" string="Close Subscription" <button name="button_close" string="Close Subscription"
type="object" class="btn-primary" type="object" class="btn-primary"
attrs="{'invisible': [('stage_category', '!=', 'progress')]}"/> attrs="{'invisible': [('stage_category', '!=', 'progress')]}"/>
@ -145,7 +142,7 @@
</group> </group>
<group> <group>
<field name="plan_id" attrs="{'required': True}"/> <field name="plan_id" attrs="{'required': True}"/>
<field name="to_renew"/> <field name="to_renew" invisible="1"/>
<field name="reference_code"/> <field name="reference_code"/>
<field name="analytic_account_id"/> <field name="analytic_account_id"/>
<field name="tag_ids" widget="many2many_tags" <field name="tag_ids" widget="many2many_tags"
@ -168,6 +165,7 @@
<field name="product_uom_id" required="1"/> <field name="product_uom_id" required="1"/>
<field name="currency_id" invisible="1"/> <field name="currency_id" invisible="1"/>
<field name="unit_price" required="1"/> <field name="unit_price" required="1"/>
<field name="discount" required="1"/>
<field name="total_amount" readonly="1"/> <field name="total_amount" readonly="1"/>
</tree> </tree>
</field> </field>

Loading…
Cancel
Save