summaryrefslogtreecommitdiff
path: root/addons/point_of_sale/models/pos_payment.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/point_of_sale/models/pos_payment.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (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.py64
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 []