initial commit
This commit is contained in:
commit
49344a3a02
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
__pycache__/
|
||||
33
README.md
Normal file
33
README.md
Normal file
@ -0,0 +1,33 @@
|
||||
# POS Reward Point Digits (Odoo 19)
|
||||
|
||||
## Overview
|
||||
By default, the `reward_point_amount` field on the `loyalty.rule` model within the Odoo Point of Sale restricts inputs to the default 2 decimal places.
|
||||
|
||||
This custom module adds a configurable setting inside of the Point of Sale setup screen to allow you to specify the exact number of decimal precision digits for reward points.
|
||||
|
||||
## Features
|
||||
- Overrides the `reward_point_amount` numeric field to utilize a dynamic Point of Sale configuration.
|
||||
- Introduces a designated "Reward Point" Decimal Precision configuration.
|
||||
- Provides an easy-to-access integer widget in `res.config.settings` for POS administrators to adjust precision without needing to touch backend code or data files.
|
||||
|
||||
## Installation
|
||||
1. Move the `pos_reward_point_digits` directory into your active Odoo 19 `custom` addons path.
|
||||
2. Log into your Odoo 19 database as an Administrator.
|
||||
3. Turn on **Developer Mode**.
|
||||
4. Go to **Apps** -> **Update Apps List**.
|
||||
5. Search for "POS Reward Point Digits".
|
||||
6. Click **Activate**.
|
||||
|
||||
## Configuration
|
||||
1. Navigate to **Point of Sale -> Configuration -> Settings**.
|
||||
2. Scroll to the **Pricing** section.
|
||||
3. Locate the **Reward Point Digits** field.
|
||||
4. Set your desired integer value (e.g. `3` or `4`) to allow that many digits behind the decimal place.
|
||||
5. Click **Save**.
|
||||
|
||||
Going forward, when accessing any Loyalty Program configuration rule, the grant reward setting (`reward_point_amount`) will properly respect the precision set within your Point of Sale configurations.
|
||||
|
||||
## Technical Details
|
||||
- **Module Dependence**: `point_of_sale`, `pos_loyalty`, `loyalty`.
|
||||
- Modifies `ir.ui.view` `res_config_settings_view_form` to append to the Pricing `<block>`.
|
||||
- Generates `dp_reward_point` within Odoo's internal `decimal.precision` registry.
|
||||
1
__init__.py
Normal file
1
__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from . import models
|
||||
17
__manifest__.py
Normal file
17
__manifest__.py
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
'name': 'POS Reward Point Digits',
|
||||
'version': '1.0',
|
||||
'category': 'Point of Sale',
|
||||
'summary': 'Configure the decimal precision of reward points in POS loyalty rules',
|
||||
'description': """
|
||||
This module allows administrators to configure the number of decimal places for the reward_point_amount field in loyalty programs directly from the Point of Sale settings.
|
||||
""",
|
||||
'depends': ['point_of_sale', 'pos_loyalty', 'loyalty'],
|
||||
'data': [
|
||||
'data/decimal_precision_data.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'license': 'LGPL-3',
|
||||
}
|
||||
9
data/decimal_precision_data.xml
Normal file
9
data/decimal_precision_data.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="dp_reward_point" model="decimal.precision">
|
||||
<field name="name">Reward Point</field>
|
||||
<field name="digits">2</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
2
models/__init__.py
Normal file
2
models/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
from . import loyalty_rule
|
||||
from . import res_config_settings
|
||||
6
models/loyalty_rule.py
Normal file
6
models/loyalty_rule.py
Normal file
@ -0,0 +1,6 @@
|
||||
from odoo import fields, models
|
||||
|
||||
class LoyaltyRule(models.Model):
|
||||
_inherit = 'loyalty.rule'
|
||||
|
||||
reward_point_amount = fields.Float(digits='Reward Point')
|
||||
26
models/res_config_settings.py
Normal file
26
models/res_config_settings.py
Normal file
@ -0,0 +1,26 @@
|
||||
from odoo import api, fields, models
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
pos_reward_point_digits = fields.Integer(
|
||||
string="Reward Point Digits",
|
||||
config_parameter='pos_reward_point_digits',
|
||||
default=2
|
||||
)
|
||||
|
||||
@api.model
|
||||
def get_values(self):
|
||||
res = super(ResConfigSettings, self).get_values()
|
||||
precision = self.env.ref('pos_reward_point_digits.dp_reward_point', raise_if_not_found=False)
|
||||
if precision:
|
||||
res.update({
|
||||
'pos_reward_point_digits': precision.digits,
|
||||
})
|
||||
return res
|
||||
|
||||
def set_values(self):
|
||||
super(ResConfigSettings, self).set_values()
|
||||
precision = self.env.ref('pos_reward_point_digits.dp_reward_point', raise_if_not_found=False)
|
||||
if precision and precision.digits != self.pos_reward_point_digits:
|
||||
precision.sudo().digits = self.pos_reward_point_digits
|
||||
15
views/res_config_settings_views.xml
Normal file
15
views/res_config_settings_views.xml
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="res_config_settings_view_form" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.form.inherit.pos_reward_point_digits</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="inherit_id" ref="point_of_sale.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//block[@id='pos_pricing_section']" position="inside">
|
||||
<setting id="reward_point_digits" string="Reward Point Digits" help="Set the number of decimal precision digits for reward points.">
|
||||
<field name="pos_reward_point_digits" widget="integer"/>
|
||||
</setting>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Loading…
Reference in New Issue
Block a user