Browse Source

Sep 8 [FIX] : Bug Fixed 'subscription_package'

pull/254/merge
AjmalCybro 2 years ago
parent
commit
ae0b616ee6
  1. 83
      subscription_package/models/subscription_package.py
  2. 8
      subscription_package/static/description/index.html
  3. 94
      subscription_package/views/subscription_package.xml

83
subscription_package/models/subscription_package.py

@ -50,6 +50,11 @@ class SubscriptionPackageProductLine(models.Model):
unit_price = fields.Float(string='Unit Price', store=True, readonly=False,
related='product_id.list_price')
discount = fields.Float(string="Discount (%)")
tax_id = fields.Many2many('account.tax', string="Taxes",
related='product_id.taxes_id',
ondelete='restrict', readonly=False)
price_total = fields.Monetary(store=True, readonly=True)
price_tax = fields.Monetary(store=True, readonly=True)
currency_id = fields.Many2one('res.currency', string='Currency',
store=True,
related='subscription_id.currency_id')
@ -61,14 +66,23 @@ class SubscriptionPackageProductLine(models.Model):
store=True,
related='subscription_id.partner_id')
@api.depends('product_qty', 'unit_price', 'discount')
@api.depends('product_qty', 'unit_price', 'discount', 'tax_id',
'currency_id')
def _compute_total_amount(self):
""" Calculate subtotal amount of product line """
for rec in self:
if rec.product_id:
rec.total_amount = rec.unit_price * rec.product_qty
if rec.discount != 0:
rec.total_amount -= rec.total_amount * (rec.discount / 100)
for line in self:
price = line.unit_price * (1 - (line.discount or 0.0) / 100.0)
taxes = line.tax_id._origin.compute_all(
price, line.subscription_id._origin.currency_id,
line.product_qty,
product=line.product_id,
partner=line.subscription_id._origin.partner_id)
line.write({
'price_tax': sum(
t.get('amount', 0.0) for t in taxes.get('taxes', [])),
'price_total': taxes['total_included'],
'total_amount': taxes['total_excluded'],
})
class SubscriptionPackage(models.Model):
@ -145,9 +159,12 @@ class SubscriptionPackage(models.Model):
close_date = fields.Date(string='Closed on')
stage_category = fields.Selection(related='stage_id.category', store=True)
invoice_mode = fields.Selection(related="plan_id.invoice_mode")
total_recurring_price = fields.Float(string='Recurring Price',
total_recurring_price = fields.Float(string='Untaxed Amount',
compute='_compute_total_recurring_price',
store=True)
tax_total = fields.Float("Taxes", readonly=True)
total_with_tax = fields.Monetary("Total Recurring Price", readonly=True,
store=True)
@api.depends('invoice_count')
def _compute_invoice_count(self):
@ -274,10 +291,14 @@ class SubscriptionPackage(models.Model):
'Please change category of stage to "In Progress", '
'only one stage is allowed to have category "Draft"'))
else:
rec.write(
{'stage_id': stage_id,
'date_started': fields.Date.today()
})
if not rec.product_line_ids:
raise UserError("Empty order lines !! Please add the "
"subscription product.")
else:
rec.write(
{'stage_id': stage_id,
'date_started': fields.Date.today(),
'start_date': fields.Date.today()})
def button_sale_order(self):
"""Button to create sale order"""
@ -369,16 +390,17 @@ class SubscriptionPackage(models.Model):
pending_subscriptions = self.env['subscription.package'].search(
[('stage_category', '=', 'progress')])
today_date = fields.Date.today()
# today_date = datetime.datetime.strptime('05102023', '%d%m%Y').date()
pending_subscription = False
for pending_subscription in pending_subscriptions:
get_dates = self.find_renew_date(
pending_subscription.next_invoice_date,
pending_subscription.date_started,
pending_subscription.plan_id.days_to_end)
renew_date = get_dates['renew_date']
end_date = get_dates['end_date']
print(renew_date)
pending_subscription.close_date = get_dates['close_date']
if (today_date == end_date) and (
pending_subscription.plan_id.limit_choice != 'manual'):
@ -404,20 +426,21 @@ class SubscriptionPackage(models.Model):
rec_list = [0, 0, {'product_id': rec.product_id.id,
'quantity': rec.product_qty,
'price_unit': rec.unit_price,
'discount': rec.discount}]
'discount': rec.discount,
'tax_ids': rec.tax_id}]
this_products_line.append(rec_list)
self.env['account.move'].create(
{
'move_type': 'out_invoice',
'date': today_date,
'invoice_date': today_date,
'state': 'draft',
'subscription_id': pending_subscription.id,
'partner_id': pending_subscription.partner_invoice_id.id,
'currency_id': pending_subscription.partner_invoice_id.currency_id.id,
'invoice_line_ids': this_products_line
})
pending_subscription._compute_invoice_count()
self.env['account.move'].create(
{
'move_type': 'out_invoice',
'date': today_date,
'invoice_date': today_date,
'state': 'draft',
'subscription_id': pending_subscription.id,
'partner_id': pending_subscription.partner_invoice_id.id,
'currency_id': pending_subscription.partner_invoice_id.currency_id.id,
'invoice_line_ids': this_products_line
})
pending_subscription._compute_invoice_count()
pending_subscription.write({'to_renew': False,
'start_date': pending_subscription.next_invoice_date})
@ -442,14 +465,22 @@ class SubscriptionPackage(models.Model):
return dict(pending=pending_subscription)
@api.depends('product_line_ids.total_amount')
@api.depends('product_line_ids.total_amount',
'product_line_ids.price_total', 'product_line_ids.tax_id')
def _compute_total_recurring_price(self):
""" Calculate recurring price """
for record in self:
total_recurring = 0
total_tax = 0.0
for line in record.product_line_ids:
if line.total_amount != line.price_total:
line_tax = line.price_total - line.total_amount
total_tax += line_tax
total_recurring += line.total_amount
record['total_recurring_price'] = total_recurring
record['tax_total'] = total_tax
total_with_tax = total_recurring + total_tax
record['total_with_tax'] = total_with_tax
def action_renew(self):
return self.button_sale_order()

8
subscription_package/static/description/index.html

@ -9,10 +9,10 @@
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<!-- <div-->
<!-- style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">-->
<!-- <i class="fa fa-check mr-1"></i>Enterprise-->
<!-- </div>-->
</div>
</div>

94
subscription_package/views/subscription_package.xml

@ -10,7 +10,8 @@
</record>
</data>
<record id="subscription_action_subscriptions" model="ir.actions.act_window">
<record id="subscription_action_subscriptions"
model="ir.actions.act_window">
<field name="name">Subscriptions</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">subscription.package</field>
@ -22,7 +23,8 @@
</field>
</record>
<record id="subscription_action_subscriptions_customers" model="ir.actions.act_window">
<record id="subscription_action_subscriptions_customers"
model="ir.actions.act_window">
<field name="name">Subscriptions Customers</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
@ -35,7 +37,8 @@
</field>
</record>
<record id="subscription_action_subscriptions_to_renew" model="ir.actions.act_window">
<record id="subscription_action_subscriptions_to_renew"
model="ir.actions.act_window">
<field name="name">Subscriptions to Renew</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">subscription.package</field>
@ -65,14 +68,16 @@
<record id="subscription_package_form" model="ir.ui.view">
<field name="name">subscription.package.form</field>
<field name="model">subscription.package</field>
<field name="groups_id" eval="[(4, ref('subscription_package.group_subscription_user'))]"/>
<field name="groups_id"
eval="[(4, ref('subscription_package.group_subscription_user'))]"/>
<field name="arch" type="xml">
<form>
<header>
<field name="current_stage" invisible="1"/>
<field name="is_closed" invisible="1"/>
<button name="button_start_date" string="START"
type="object" class="btn-primary oe_read_only" attrs="{'invisible': [('stage_category','!=', 'draft')]}"/>
type="object" class="btn-primary oe_read_only"
attrs="{'invisible': [('stage_category','!=', 'draft')]}"/>
<button name="button_sale_order" string="Create Sale Order"
type="object" class="btn-primary oe_read_only"
attrs="{'invisible': ['|',('stage_category','!=', 'progress'),('so_count','>',0)]}"/>
@ -83,13 +88,18 @@
<button name="button_close" string="Close Subscription"
type="object" class="btn-primary oe_read_only"
attrs="{'invisible': [('stage_category', 'in', ['draft', 'closed'])]}"/>
<button name="action_renew" string="Renew" type="object" class="btn-primary oe_read_only" attrs="{'invisible': [('so_count', '=', 0)]}"/>
<field name="stage_id" widget="statusbar" options="{'clickable' :0}"/>
<button name="action_renew" string="Renew" type="object"
class="btn-primary oe_read_only"
attrs="{'invisible': [('so_count', '=', 0)]}"/>
<field name="stage_id" widget="statusbar"
options="{'clickable' :0}"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="button_sale_count" type="object" class="oe_stat_button"
icon="fa-credit-card" attrs="{'invisible': [('sale_order', '=', False)]}">
<button name="button_sale_count" type="object"
class="oe_stat_button"
icon="fa-credit-card"
attrs="{'invisible': [('sale_order', '=', False)]}">
<div class="o_field_widget o_stat_info">
<span class="o_stat_value">
<field name="so_count"/>
@ -99,8 +109,10 @@
</span>
</div>
</button>
<button name="button_invoice_count" type="object" class="oe_stat_button"
icon="fa-file-text" attrs="{'invisible': [('invoice_count','&lt;=',0)]}">
<button name="button_invoice_count" type="object"
class="oe_stat_button"
icon="fa-file-text"
attrs="{'invisible': [('invoice_count','&lt;=',0)]}">
<div class="o_field_widget o_stat_info">
<span class="o_stat_value">
<field name="invoice_count"/>
@ -124,7 +136,8 @@
</div>
<group>
<group>
<field name="partner_id" attrs="{'required': True}"/>
<field name="partner_id"
attrs="{'required': True}"/>
<field name="partner_invoice_id"/>
<field name="partner_shipping_id"/>
<field name="date_started"/>
@ -145,7 +158,8 @@
</group>
</group>
<notebook>
<page string="Subscriptions" name="subscription_products_line">
<page string="Subscriptions"
name="subscription_products_line">
<field name="product_line_ids">
<tree string="Product lines" editable="bottom">
<field name="sequence" widget="handle"/>
@ -156,17 +170,31 @@
<field name="currency_id" invisible="1"/>
<field name="unit_price" required="1"/>
<field name="discount" required="1"/>
<field name="tax_id"
widget="many2many_tags"/>
<field name="price_tax" readonly="1" invisible="1"/>
<field name="price_total" readonly="1" invisible="1"/>
<field name="total_amount" readonly="1"/>
</tree>
</field>
<group name="note_group" col="6" class="mt-2 mt-md-0">
<group class="oe_subtotal_footer oe_right" colspan="2" name="recurring_total">
<field name="total_recurring_price"/>
<group name="note_group" col="6"
class="mt-2 mt-md-0">
<group class="oe_subtotal_footer oe_right"
colspan="2" name="recurring_total">
<field name="total_recurring_price"
widget="monetary"/>
<field name="tax_total" widget="monetary"/>
<field name="currency_id" invisible="1"/>
<field name="total_with_tax"
widget="monetary"/>
</group>
</group>
</page>
<page string="Terms and Conditions" name="terms_and_conditions">
<field name="description" placeholder="Terms and Conditions."/>
<page string="Terms and Conditions"
name="terms_and_conditions">
<field name="description"
placeholder="Terms and Conditions."/>
</page>
<page string="Other Info" name="other_info">
<group>
@ -194,7 +222,8 @@
<field name="name">subscription.package.kanban</field>
<field name="model">subscription.package</field>
<field name="arch" type="xml">
<kanban default_group_by="stage_id" quick_create="false" class="o_kanban_mobile" sample="1">
<kanban default_group_by="stage_id" quick_create="false"
class="o_kanban_mobile" sample="1">
<field name="stage_id"/>
<field name="user_id"/>
<field name="to_renew"/>
@ -219,10 +248,12 @@
</div>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left">
<field name="activity_ids" widget="kanban_activity"/>
<field name="activity_ids"
widget="kanban_activity"/>
</div>
<div class="oe_kanban_bottom_right">
<field name="user_id" widget="many2one_avatar_user"/>
<field name="user_id"
widget="many2one_avatar_user"/>
</div>
</div>
</div>
@ -234,20 +265,21 @@
</field>
</record>
<record id="subscription_package_pivot" model="ir.ui.view">
<field name="name">subscription.package.pivot</field>
<field name="model">subscription.package</field>
<field name="arch" type="xml">
<pivot string="Pivot View">
<field name="name" type="row"/>
</pivot>
</field>
</record>
<record id="subscription_package_pivot" model="ir.ui.view">
<field name="name">subscription.package.pivot</field>
<field name="model">subscription.package</field>
<field name="arch" type="xml">
<pivot string="Pivot View">
<field name="name" type="row"/>
</pivot>
</field>
</record>
<menuitem id="subscription_menu_root"
name="Subscription"
action="subscription_package.subscription_action_subscriptions"
sequence="1" groups="group_subscription_user" web_icon="subscription_package,static/description/icon.png"/>
sequence="1" groups="group_subscription_user"
web_icon="subscription_package,static/description/icon.png"/>
<menuitem id="subscription_menu_subscriptions"
name="Subscriptions"

Loading…
Cancel
Save