diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/point_of_sale/models/pos_payment.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/point_of_sale/models/pos_payment.py')
| -rw-r--r-- | addons/point_of_sale/models/pos_payment.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/addons/point_of_sale/models/pos_payment.py b/addons/point_of_sale/models/pos_payment.py new file mode 100644 index 00000000..fe43e07d --- /dev/null +++ b/addons/point_of_sale/models/pos_payment.py @@ -0,0 +1,64 @@ +from odoo import api, fields, models, _ +from odoo.tools import formatLang +from odoo.exceptions import ValidationError + + +class PosPayment(models.Model): + """ Used to register payments made in a pos.order. + + See `payment_ids` field of pos.order model. + The main characteristics of pos.payment can be read from + `payment_method_id`. + """ + + _name = "pos.payment" + _description = "Point of Sale Payments" + _order = "id desc" + + name = fields.Char(string='Label', readonly=True) + pos_order_id = fields.Many2one('pos.order', string='Order', required=True) + amount = fields.Monetary(string='Amount', required=True, currency_field='currency_id', readonly=True, help="Total amount of the payment.") + payment_method_id = fields.Many2one('pos.payment.method', string='Payment Method', required=True) + payment_date = fields.Datetime(string='Date', required=True, readonly=True, default=lambda self: fields.Datetime.now()) + currency_id = fields.Many2one('res.currency', string='Currency', related='pos_order_id.currency_id') + currency_rate = fields.Float(string='Conversion Rate', related='pos_order_id.currency_rate', help='Conversion rate from company currency to order currency.') + partner_id = fields.Many2one('res.partner', string='Customer', related='pos_order_id.partner_id') + session_id = fields.Many2one('pos.session', string='Session', related='pos_order_id.session_id', store=True, index=True) + company_id = fields.Many2one('res.company', string='Company', related='pos_order_id.company_id') # TODO: add store=True in master + card_type = fields.Char('Type of card used') + cardholder_name = fields.Char('Cardholder Name') + transaction_id = fields.Char('Payment Transaction ID') + payment_status = fields.Char('Payment Status') + ticket = fields.Char('Payment Receipt Info') + is_change = fields.Boolean(string='Is this payment change?', default=False) + + @api.model + def name_get(self): + res = [] + for payment in self: + if payment.name: + res.append((payment.id, '%s %s' % (payment.name, formatLang(self.env, payment.amount, currency_obj=payment.currency_id)))) + else: + res.append((payment.id, formatLang(self.env, payment.amount, currency_obj=payment.currency_id))) + return res + + @api.constrains('payment_method_id') + def _check_payment_method_id(self): + for payment in self: + if payment.payment_method_id not in payment.session_id.config_id.payment_method_ids: + raise ValidationError(_('The payment method selected is not allowed in the config of the POS session.')) + + def _export_for_ui(self, payment): + return { + 'payment_method_id': payment.payment_method_id.id, + 'amount': payment.amount, + 'payment_status': payment.payment_status, + 'card_type': payment.card_type, + 'cardholder_name': payment.cardholder_name, + 'transaction_id': payment.transaction_id, + 'ticket': payment.ticket, + 'is_change': payment.is_change, + } + + def export_for_ui(self): + return self.mapped(self._export_for_ui) if self else [] |
