Tower: upload laundry_management 19.0.19.0.4 (via marketplace)
This commit is contained in:
137
addons/laundry_management/models/laundry_settings.py
Normal file
137
addons/laundry_management/models/laundry_settings.py
Normal file
@@ -0,0 +1,137 @@
|
||||
from odoo import models, fields, api
|
||||
|
||||
|
||||
class LaundrySettings(models.TransientModel):
|
||||
"""Laundry Management settings panel (PART 9).
|
||||
|
||||
Extends res.config.settings to add laundry-specific configuration:
|
||||
- WhatsApp Business API credentials and behaviour
|
||||
- Commission tracking rates, rules, and default account
|
||||
- Session enforcement and default cash journal
|
||||
- Print format defaults
|
||||
- Cash control: default difference account
|
||||
"""
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
# ── WhatsApp ──────────────────────────────────────────────────────
|
||||
laundry_wa_token = fields.Char(
|
||||
string='WhatsApp Cloud API Token',
|
||||
config_parameter='laundry.whatsapp_api_token',
|
||||
)
|
||||
laundry_wa_phone_id = fields.Char(
|
||||
string='Phone Number ID',
|
||||
config_parameter='laundry.whatsapp_phone_id',
|
||||
)
|
||||
laundry_wa_store_number = fields.Char(
|
||||
string='Store WhatsApp Number',
|
||||
config_parameter='laundry.whatsapp_store_number',
|
||||
help='E.164 format without + (e.g. 966501234567). Used as fallback number.',
|
||||
)
|
||||
laundry_wa_auto_send = fields.Boolean(
|
||||
string='Auto-send WhatsApp on Order Confirm',
|
||||
)
|
||||
|
||||
# ── Commission ────────────────────────────────────────────────────
|
||||
laundry_commission_enabled = fields.Boolean(
|
||||
string='Enable Staff Commission Tracking',
|
||||
)
|
||||
laundry_commission_type = fields.Selection([
|
||||
('percentage', 'Percentage of Order Total (%)'),
|
||||
('fixed', 'Fixed Amount per Order'),
|
||||
], string='Commission Type')
|
||||
laundry_commission_reception_rate = fields.Float(
|
||||
string='Reception Commission', digits=(10, 2),
|
||||
)
|
||||
laundry_commission_processing_rate = fields.Float(
|
||||
string='Processing Commission', digits=(10, 2),
|
||||
)
|
||||
laundry_commission_delivery_rate = fields.Float(
|
||||
string='Delivery Commission', digits=(10, 2),
|
||||
)
|
||||
laundry_commission_account_id = fields.Many2one(
|
||||
'account.account',
|
||||
string='Commission Expense Account',
|
||||
domain="[('account_type', 'in', ['expense', 'expense_direct_cost']), ('company_ids', 'in', [company_id])]",
|
||||
help='Account for booking commission expenses (for future accounting integration).',
|
||||
)
|
||||
|
||||
# ── Session / Cash Control ────────────────────────────────────────
|
||||
laundry_require_session = fields.Boolean(
|
||||
string='Require Open Session to Confirm Orders',
|
||||
)
|
||||
laundry_cash_journal_id = fields.Many2one(
|
||||
'account.journal',
|
||||
string='Default Cash Journal',
|
||||
domain="[('type', '=', 'cash'), ('company_id', '=', company_id)]",
|
||||
help='Default cash journal used in the payment wizard.',
|
||||
)
|
||||
laundry_difference_account_id = fields.Many2one(
|
||||
'account.account',
|
||||
string='Cash Difference Account',
|
||||
domain="[('company_ids', 'in', [company_id])]",
|
||||
help='Default account for posting session cash count variances.',
|
||||
)
|
||||
|
||||
# ── Print ─────────────────────────────────────────────────────────
|
||||
laundry_default_paper = fields.Selection([
|
||||
('a4', 'A4 Full Receipt'),
|
||||
('thermal', 'Thermal / 80mm Roll'),
|
||||
], string='Default Print Format')
|
||||
|
||||
# company_id helper for domain filtering
|
||||
company_id = fields.Many2one(
|
||||
'res.company', string='Company',
|
||||
default=lambda self: self.env.company,
|
||||
readonly=True,
|
||||
)
|
||||
|
||||
# ── Load & Save ───────────────────────────────────────────────────
|
||||
def get_values(self):
|
||||
res = super().get_values()
|
||||
ICP = self.env['ir.config_parameter'].sudo()
|
||||
|
||||
def _bool(key, default='False'):
|
||||
return ICP.get_param(key, default) == 'True'
|
||||
|
||||
def _float(key, default='0.0'):
|
||||
try:
|
||||
return float(ICP.get_param(key, default))
|
||||
except (ValueError, TypeError):
|
||||
return 0.0
|
||||
|
||||
def _int_record(key):
|
||||
val = ICP.get_param(key, '')
|
||||
try:
|
||||
return int(val) if val else False
|
||||
except (ValueError, TypeError):
|
||||
return False
|
||||
|
||||
res.update({
|
||||
'laundry_wa_auto_send': _bool('laundry_management.wa_auto_send'),
|
||||
'laundry_commission_enabled': _bool('laundry_management.commission_enabled'),
|
||||
'laundry_commission_type': ICP.get_param('laundry_management.commission_type', 'percentage'),
|
||||
'laundry_commission_reception_rate': _float('laundry_management.commission_reception_rate'),
|
||||
'laundry_commission_processing_rate': _float('laundry_management.commission_processing_rate'),
|
||||
'laundry_commission_delivery_rate': _float('laundry_management.commission_delivery_rate'),
|
||||
'laundry_commission_account_id': _int_record('laundry_management.commission_account_id'),
|
||||
'laundry_require_session': _bool('laundry_management.require_session'),
|
||||
'laundry_cash_journal_id': _int_record('laundry_management.cash_journal_id'),
|
||||
'laundry_difference_account_id': _int_record('laundry_management.difference_account_id'),
|
||||
'laundry_default_paper': ICP.get_param('laundry_management.default_paper', 'a4'),
|
||||
})
|
||||
return res
|
||||
|
||||
def set_values(self):
|
||||
super().set_values()
|
||||
ICP = self.env['ir.config_parameter'].sudo()
|
||||
ICP.set_param('laundry_management.wa_auto_send', str(self.laundry_wa_auto_send))
|
||||
ICP.set_param('laundry_management.commission_enabled', str(self.laundry_commission_enabled))
|
||||
ICP.set_param('laundry_management.commission_type', self.laundry_commission_type or 'percentage')
|
||||
ICP.set_param('laundry_management.commission_reception_rate', str(self.laundry_commission_reception_rate))
|
||||
ICP.set_param('laundry_management.commission_processing_rate', str(self.laundry_commission_processing_rate))
|
||||
ICP.set_param('laundry_management.commission_delivery_rate', str(self.laundry_commission_delivery_rate))
|
||||
ICP.set_param('laundry_management.commission_account_id', str(self.laundry_commission_account_id.id or ''))
|
||||
ICP.set_param('laundry_management.require_session', str(self.laundry_require_session))
|
||||
ICP.set_param('laundry_management.cash_journal_id', str(self.laundry_cash_journal_id.id or ''))
|
||||
ICP.set_param('laundry_management.difference_account_id', str(self.laundry_difference_account_id.id or ''))
|
||||
ICP.set_param('laundry_management.default_paper', self.laundry_default_paper or 'a4')
|
||||
Reference in New Issue
Block a user