TIP: You can type at any time to perform a new search.

Security findings

Repository
odoo/odoo · module folder
Module version
1.0.2
Category
Sales/Point of Sale
Folder size
32.08 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://www.odoo.com/app/point-of-sale-shop
Last tracking update
2026-10-05 12:14:52
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Raphael Collet, Thibault Delavallée, odoo, Odoo Translation Bot, Christophe Matthieu, Denis Ledoux, Aaron Bohy, Géry Debongnie, Yannick Tivisse, qsm-odoo, Pierre Masereel, Jorge Pinna Puissant, Arnold Moyaux, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, William Henrotin, Sébastien Theys, Julien Mougenot, Anh Thao Pham (pta), David Beguin, Brice bib Bartoletti, Tiffany Chang (tic), fja-odoo, Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, Romain Estievenart, Miquel Raïch, william-andre, Nicolas Bayet, luvi, adr, Renaud Thiry, rhe-odoo, jbw-odoo, David Monnom (moda), tsm-odoo, Louis Wicket (wil), Pedram (PEBR), Mylyna Hy, Victor Piryns (pivi), amdi-odoo, Gauthier Wala (gawa), Pierre-Yves Dufays, Andrew Gavgavian, Dylan Kiss (dyki), Chong Wang (cwg), tong-odoo, Xavier Bol (xbo), Brieuc-brd, Paweł Fertyk, Sarah Bellefroid, Louis Travaux, Adrien Guilliams (adgu), Arnaud Sibille, omra-odoo, shag-odoo, sesn-odoo, guva-odoo, Youssef Bashandy, lase@odoo.com, Aurelien MARIE (auma), reka-odoo, Sven Fuehr, kmod-odoo, kcv-odoo, odoostan, Louis Gobert, Agustin Castro Bugallo, Chrysanthe (chgo), sami odoo, asno-odoo, mano-odoo, Harsh Shah, hatr-odoo, Parth Solanki[PASO], Majed Alhanash (malh), manv-afk, Max Whale, parp-odoo, Loukas Wets (lowe), yaso, Patricia Daloze (pda), Xavier Luyckx (xlu), Elisabeth Dickinson, Stéphane Diez, Claire (clbr), Abdo Mongy, unka-odoo, prep-odoo, Léo Gizard, Hesham Saleh, paan-odoo, Jitendra Prajapat, David Monnom, Arthur Nanson, pkgu-odoo, Mohammad Abdulmoneim (abdu), Pierre Lamotte (pila), Pierre Pulinckx, Bastien PIERRE, Michaël Mattiello, Corentin Heinix (cohe), Corentin Lombard, Sherif Gabr, Mahdi Alijani (malj), anko-odoo, chha-odoo, Krzysztof Magusiak (krma), Ajit Singh, dvsh-odoo, joseph, zadh-odoo, Robin Engels (roen), sagu-odoo, vpan-odoo, dhruv, vlst-odoo, Radu Macocian (admac), Guillaume V, Sylvio Poliart (sypol), Maeva De Keyser (MDEK), zorbmax, Harrison Hutton, utma-odoo, Meet Jivani [MEJI], Hadi El Yakhni, Tyler Landivar (tylan), nsirjacobs, Giorgio Tocco (gito), MAGREMENT, romc-odoo, Ze Chen (zeche), mohannedah, Lulu Grimalkin (lugr), rare-odoo, igbe, Lancelot Semal, sjai-odoo, Laurent Smet (LAS), Julien Launois (jula), Laetitia (ldau), adip-odoo, Quentin Colla (qucol), Kai Chang (kacha), Martin Doyen, path-odoo, Waleed Elgamal, h4818, Eliott Loop (oplo-odoo), Amr Elkhatieb, Adnan Sabbir, Uemus, Nisarg (nipl), Louis, YoussefM890, Ravij Parikh, Mazen, srap-odoo, Leonardo Medina, Traina Ludo, rpka-odoo, Stephane Vanmeerhaeghe (stva), Thomas (thsc), Léopold Cantraine, Pierre (pco), Eve Lin (evlin), abhk-odoo, Youssef (abyo), smjo-odoo, mson-odoo, Farah (ahmfa), Julien Carion, ELCO, Moamen(msho), Khaj-odoo, chpa-odoo, adgu-odoo, Shubham Agarwal, Mohamed Ben-Tahri, Oussema Heni, Shubham Agarwal(shag), jipr-odoo, krpat-odoo, Abhishek Khant, FedericoBraidi, Louis Wicket, Vedant Pandey (vpan-odoo), Julien Coppin (jucop), Francois Vasamillet (frva), Mohamed (moaln), jean (jebou), Julien Piron, nby, Jean Schoenlaub, pusu-odoo, Elisabeth Dickinson (edi), Aditi Pawar(adpaw), Lou !, Ahmed Hamila
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
l10n_account_withholding_tax_pos, l10n_ar_pos, l10n_be_pos, l10n_ch_pos, l10n_co_pos, l10n_eg_edi_pos, l10n_es_edi_tbai_pos, l10n_es_edi_verifactu_pos, l10n_es_pos, l10n_fr_pdp_pos, l10n_fr_pos_cert, l10n_gcc_pos, l10n_id_pos, l10n_in_pos, l10n_mt_pos, l10n_my_edi_pos, l10n_pe_pos, l10n_test_pos_qr_payment, l10n_tw_edi_ecpay_pos, l10n_vn_edi_viettel_pos, pos_account_tax_python, pos_adyen, pos_bancontact_pay, pos_cashdro, pos_cashmatic, pos_discount, pos_dpopay, pos_edi_ubl, pos_event, pos_glory_cash, pos_hr, pos_imin, pos_loyalty, pos_mercado_pago, pos_mollie, pos_online_payment, pos_partner_autocomplete, pos_pine_labs, pos_qfpay, pos_razorpay, pos_restaurant, pos_safaricom, pos_sale, pos_sms, pos_stock, pos_stripe, pos_viva_com
Description

Code Analysis info_outline

Views touched (86)
XML IDNameModelTypeStatus
digest_digest_view_form digest.digest.view.form.inherit.point_of_sale digest.digest form Inherits digest.digest_digest_view_form
point_of_sale.company_info_receipt point_of_sale.company_info_receipt ir.ui.view qweb New
point_of_sale.customer_display_index POS Customer Display ir.ui.view qweb New
point_of_sale.index POS Index ir.ui.view qweb New
point_of_sale.pos_cash_move_receipt point_of_sale.pos_cash_move_receipt ir.ui.view qweb New
point_of_sale.pos_order_change_receipt point_of_sale.pos_order_change_receipt ir.ui.view qweb New
point_of_sale.pos_order_change_receipt_line point_of_sale.pos_order_change_receipt_line ir.ui.view qweb New
point_of_sale.pos_order_change_receipt_zpl point_of_sale.pos_order_change_receipt_zpl ir.ui.view qweb New
point_of_sale.pos_order_receipt point_of_sale.pos_order_receipt ir.ui.view qweb New
point_of_sale.pos_order_receipt_footer point_of_sale.pos_order_receipt_footer ir.ui.view qweb New
point_of_sale.pos_order_receipt_header point_of_sale.pos_order_receipt_header ir.ui.view qweb New
point_of_sale.pos_order_receipt_style point_of_sale.pos_order_receipt_style ir.ui.view qweb New
point_of_sale.pos_orderline_receipt point_of_sale.pos_orderline_receipt ir.ui.view qweb New
point_of_sale.pos_orderline_receipt_information point_of_sale.pos_orderline_receipt_information ir.ui.view qweb New
point_of_sale.pos_sale_details_receipt point_of_sale.pos_sale_details_receipt ir.ui.view qweb New
point_of_sale.pos_sale_details_receipt_product_line point_of_sale.pos_sale_details_receipt_product_line ir.ui.view qweb New
point_of_sale.pos_tip_receipt point_of_sale.pos_tip_receipt ir.ui.view qweb New
point_of_sale.product_combo_view_form product.combo.form.inherit.point.of.sale product.combo form Inherits product.product_combo_view_form
point_of_sale.report_invoice_document point_of_sale.report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
point_of_sale.view_confirm_action_wizard pos.confirmation.wizard.form pos.confirmation.wizard form New
point_of_sale.view_pos_make_invoice Create Invoice(s) pos.make.invoice form New
pos_config_view_form pos.config.form.view pos.config form New
pos_daily_sales_html_container pos_daily_sales_html_container ir.ui.view qweb New
pos_daily_sales_report_layout Daily Sales Report layout ir.ui.view qweb New
pos_payment_method_view_form pos.payment.method.form pos.payment.method form New
pos_payment_method_view_search pos.payment.search.view pos.payment.method search New
pos_payment_method_view_tree pos.payment.method.list pos.payment.method list New
pos_rounding_form_view_inherited pos.cash.rounding.form.inherited account.cash.rounding form Inherits account.rounding_form_view
pos_session_sales_details pos_session_sales_details ir.ui.view qweb New
product_pos_category_form_view pos.category.form pos.category form New
product_pos_category_tree_view pos.category.list pos.category list New
product_pricelist_view_kanban_pos product.pricelist.kanban.pos product.pricelist kanban Inherits product.product_pricelist_view_kanban
product_tag_form_view_inherit_point_of_sale product.tag.form.inherit.point.of.sale product.tag form Inherits product.product_tag_form_view
product_template_form_view product.template.form.inherit product.template form Inherits product.product_template_form_view
product_template_only_form_view product.template.product.form.inherit product.template form Inherits product.product_template_only_form_view
product_template_search_view_pos product.template.search.pos.form product.template form Inherits product.product_template_search_view
product_template_tree_view_point_of_sale product.template.view.list.point_of_sale product.template list Inherits product.product_template_tree_view
product_template_view_form_normalized_pos product.template.view.form.normalized product.template form New
report_pos_order_view_tree report.pos.order.view.list report.pos.order list New
report_saledetails report_saledetails ir.ui.view qweb New
report_userlabel report_userlabel ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.point_of_sale res.config.settings form Inherits base.res_config_settings_view_form
ticket_request_with_code Invoice Request ir.ui.view qweb New
ticket_validation_screen ticket_validation_screen ir.ui.view qweb New
uom_uom_view_form uom.uom.view.form.inherit.point.of.sale uom.uom form Inherits uom.uom_uom_view_form
view_account_journal_pos_user_form account.move.pos.form.inherit account.move form Inherits account.view_move_form
view_partner_form_pos_ui res.partner.form.pos.ui res.partner form New
view_partner_property_form res.partner.pos.form.inherit res.partner form Inherits base.view_partner_form
view_pos_bill_form pos.bill.form pos.bill form New
view_pos_bill_tree pos.bill.list pos.bill list New
view_pos_category_kanban pos.category.kanban pos.category kanban New
view_pos_category_search pos.category.search.view pos.category search New
view_pos_config_kanban pos.config.kanban.view pos.config kanban New
view_pos_config_search pos.config.search.view pos.config search New
view_pos_config_tree pos.config.list.view pos.config list New
view_pos_daily_sales_reports_wizard pos.daily.sales.reports.wizard.form pos.daily.sales.reports.wizard form New
view_pos_details_wizard pos.details.wizard.form pos.details.wizard form New
view_pos_note_tree Note Models pos.note list New
view_pos_order_filter pos.order.list.select pos.order search New
view_pos_order_kanban pos.order.kanban pos.order kanban New
view_pos_order_line pos.order.line.list pos.order.line list New
view_pos_order_line_form pos.order.line.form pos.order.line form New
view_pos_order_pivot pos.order.pivot pos.order pivot New
view_pos_order_search pos.order.search.view pos.order search New
view_pos_order_tree pos.order.list pos.order list New
view_pos_order_tree_all_sales_lines pos.order.line.all.sales.list pos.order.line list New
view_pos_order_tree_no_session_id pos.order.tree_no_session_id pos.order list Inherits point_of_sale.view_pos_order_tree
view_pos_payment pos.make.payment.form pos.make.payment form New
view_pos_payment_form pos.payment.form pos.payment form New
view_pos_payment_method_kanban pos.payment.method.kanban pos.payment.method kanban New
view_pos_payment_search pos.payment.search.view pos.payment search New
view_pos_payment_tree pos.payment.list pos.payment list New
view_pos_pos_form pos.order.form pos.order form New
view_pos_preset_form pos.preset.form pos.preset form New
view_pos_preset_tree pos.preset.list pos.preset list New
view_pos_price_inclusion_wizard_form pos.price.inclusion.wizard.form pos.price.inclusion.wizard form New
view_pos_printer Printers pos.printer list New
view_pos_printer_form Printers pos.printer form New
view_pos_printer_kanban pos.printer.kanban pos.printer kanban New
view_pos_session_form pos.session.form.view pos.session form New
view_pos_session_kanban pos.session.kanban pos.session kanban New
view_pos_session_search pos.session.search.view pos.session search New
view_pos_session_tree pos.session.list.view pos.session list New
view_report_pos_order_graph report.pos.order.graph report.pos.order graph New
view_report_pos_order_pivot report.pos.order.pivot report.pos.order pivot New
view_report_pos_order_search report.pos.order.search report.pos.order search New
HTTP endpoints (11)
Route(s)HandlerAuthTypeMethodsFlags
/web/image/pos.config/<id>/<string:field>, /web/image/pos.config/<id>/<string:field>/<int:width>x<int:height> PointOfSaleBinary.point_of_sale_content_image public http ALL
/pos/ticket PosController.invoice_request_screen public http ALL sudo website
/pos/web, /pos/ui PosController.old_pos_web user http ALL
/pos/ping PosController.pos_ping user jsonrpc ALL
/pos/receipt/<order_id> PosController.pos_receipt_download user http ALL
/pos/ui/<config_id>, /pos/ui/<config_id>/<path:subpath> PosController.pos_web user http ALL sudo
/pos/service-worker.js PosController.pos_web_service_worker user http ALL
/pos/sale_details_report PosController.print_sale_details user http ALL
/pos/ticket/validate PosController.show_ticket_validation_screen public http ALL sudo website
/pos_customer_display/<id_>/<identifier> PosCustomerDisplay.pos_customer_display public http ALL sudo website
/pos_customer_display/register-device PosCustomerDisplay.register_device public jsonrpc ALL sudo website
Models touched (67)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • pos_session_id One2many → pos.session
    string='POS Sessions' args: 'pos.session', 'bank_statement_id'
Public methods (0)

No public methods.

New fields (1)
  • pos_session_id Many2one → pos.session
    copy=False index='btree_not_null' string='Session' args: 'pos.session'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_archive(self)

New fields (1)
  • pos_payment_method_ids One2many → pos.payment.method
    string='Point of Sale Payment Methods' args: 'pos.payment.method', 'journal_id'
Public methods (1)
  • action_archive(self)

New fields (9)
  • pos_order_count Integer
    compute='_compute_origin_pos_count' string='POS Order Count'
  • pos_order_ids One2many → pos.order
    args: 'pos.order', 'account_move'
  • pos_payment_ids One2many → pos.payment
    args: 'pos.payment', 'account_move_id'
  • pos_refunded_invoice_ids Many2many → account.move
    args: 'account.move', 'refunded_invoices', 'refund_account_move', 'original_account_move'
  • pos_session_correction_id Many2one → pos.session
    index='btree_not_null' string='POS Sessions from Corrections' args: 'pos.session'
  • pos_session_ids One2many → pos.session
    compute='_compute_pos_sessions' search='_search_pos_sessions' string='POS Sessions' args: 'pos.session'
  • pos_session_refunds_id Many2one → pos.session
    index='btree_not_null' string='POS Sessions from Refunds' args: 'pos.session'
  • pos_session_sales_id Many2one → pos.session
    index='btree_not_null' string='POS Sessions from Sales' args: 'pos.session'
  • reversed_pos_order_id Many2one → pos.order
    help='The pos order that was reverted after closing the session to create an invoice for it.' index='btree_not_null' string='Reversed POS Order' args: 'pos.order'
Public methods (2)
  • action_view_source_pos_orders(self)
  • button_draft(self)

New fields (1)
  • pos_order_line_id Many2one → pos.order.line
    help='POS order line that generated this invoice line.' index='btree_not_null' string='POS Order Line' args: 'pos.order.line'
Public methods (0)

No public methods.

New fields (3)
  • force_outstanding_account_id Many2one → account.account
    check_company=True index='btree_not_null' args: 'account.account', 'Forced Outstanding Account'
  • pos_payment_method_id Many2one → pos.payment.method
    args: 'pos.payment.method', 'POS Payment Method'
  • pos_session_id Many2one → pos.session
    index='btree_not_null' args: 'pos.session', 'POS Session'
Public methods (0)

No public methods.

New fields (1)
  • pos_order_line_ids Many2many → pos.order.line
    column1='account_tax_id' column2='pos_order_line_id' comodel_name='pos.order.line' copy=False readonly=True relation='account_tax_pos_order_line_rel'
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • type Selection
    ondelete={'weight': 'set default', 'price': 'set default', 'discount': 'set default', 'client': 'set default', 'cashier': 'set default'} selection_add=[('weight', 'Weighted Product'), ('price', 'Priced Product'), ('discount', 'Discounted Product'), ('client', 'Client'), ('cashier', 'Cashier')]
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • kpi_pos_total Boolean
    args: 'POS Sales'
  • kpi_pos_total_value Monetary
    compute='_compute_kpi_pos_total_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True args: 'Name'
  • pos_config_ids Many2many → pos.config
    string='Point of Sales' args: 'pos.config'
  • value Float
    digits=(16, 4) required=True args: 'Value'
Public methods (0)

No public methods.

New fields (1)
  • access_token Char
    copy=False args: 'Security Token'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (14)
  • active Boolean
    default=True
  • child_ids One2many → pos.category
    string='Children Categories' args: 'pos.category', 'parent_id'
  • color Integer
    default=get_default_color required=False args: 'Color'
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True args: 'Complete Name'
  • has_image Boolean
    compute='_compute_has_image'
  • hour_after Float
    default=0.0 help='The product will be available after this hour for online order and self order.' string='Availability After'
  • hour_until Float
    default=24.0 help='The product will be available until this hour for online order and self order.' string='Availability Until'
  • image_128 Image
    max_height=128 max_width=128 related='image_512' store=True args: 'Image 128'
  • image_512 Image
    max_height=512 max_width=512 args: 'Image'
  • name Char
    required=True string='Category Name' translate=True
  • parent_id Many2one → pos.category
    index=True string='Parent Category' args: 'pos.category'
  • pos_config_ids Many2many → pos.config
    string='Linked PoS Configurations' args: 'pos.config'
  • product_count Integer
    compute='_compute_product_count'
  • sequence Integer
    default=_default_sequence help='Gives the sequence order when displaying a list of product categories.'
Public methods (3)
  • action_archive(self)
  • action_open_associated_products(self)
  • get_default_color(self)

New fields (105)
  • access_token Char
    default=<expr> args: 'Access Token'
  • active Boolean
    default=True
  • amount_authorized_diff Float
    help='This field depicts the maximum difference allowed between the ending balance and the theoretical cash when closing a session, for non-POS managers. If this maximum is reached, the user will have an error message at the closing of his session saying that he needs to contact his manager.' args: 'Amount Authorized Difference'
  • auto_validate_electronic_payment Boolean
    default=True help='Automatically validates orders paid with an electronic payment (terminals, qr codes, ...).'
  • available_preset_ids Many2many → pos.preset
    string='Available Presets' args: 'pos.preset'
  • available_pricelist_ids Many2many → product.pricelist
    help='Make several pricelists available in the Point of Sale. You can also apply a pricelist to specific customers from their contact form (in Sales tab). To be valid, this pricelist must be listed here as an available pricelist. Otherwise the default pricelist will apply.' string='Available Pricelists' args: 'product.pricelist'
  • basic_receipt Boolean
    help='Print gift ticket without prices. Can be used for gifts.' string='Gift Receipt'
  • cash_control Boolean
    compute='_compute_cash_control' help='Check the amount of the cashbox at opening and closing.' string='Advanced Cash Control'
  • cash_rounding Boolean
    string='Total Rounding'
  • closing_journal_id Many2one → account.journal
    check_company=True compute='_compute_closing_journal_id' domain=[('type', '=', 'sale')] help='Journal used specifically for PoS session closing and reverse entries' ondelete='restrict' precompute=True readonly=False required=True store=True string='Closing Journal' args: 'account.journal'
  • company_has_template Boolean
    compute='_compute_company_has_template' string='Company has chart of accounts'
  • company_id Many2one → res.company
    default=<expr> index=True required=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency' compute_sudo=True store=True string='Currency' args: 'res.currency'
  • current_cash_register_balance Float
    compute='_compute_current_cash_register_balance' string='Cash Register'
  • current_session_id Many2one → pos.session
    compute='_compute_current_session' search='_search_current_session' string='Current Session' args: 'pos.session'
  • current_session_state Char
    compute='_compute_current_session'
  • current_user_id Many2one → res.users
    compute='_compute_current_session_user' string='Current Session Responsible' args: 'res.users'
  • custom_email Char
    readonly=False string='Email'
  • custom_logo Image
    readonly=False string='Logo'
  • custom_logo_name Char
    string='Logo Name'
  • custom_phone Char
    readonly=False string='Phone Nb'
  • custom_receipt_address Char
    readonly=False string='Address'
  • custom_website Char
    readonly=False string='Website'
  • customer_display_bg_img Image
    max_height=1920 max_width=1920 string='Background Image'
  • customer_display_bg_img_name Char
    string='Background Image Name'
  • default_bill_ids Many2many → pos.bill
    string='Coins/Bills' args: 'pos.bill'
  • default_fiscal_position_id Many2one → account.fiscal.position
    string='Default Fiscal Position' args: 'account.fiscal.position'
  • default_partner_id Many2one → res.partner
    check_company=True default=_default_partner help='The default customer used in PoS session closing' required=True string='Default Customer' args: 'res.partner'
  • default_preset_id Many2one → pos.preset
    string='Default Preset' args: 'pos.preset'
  • device_seq_id Many2one → ir.sequence
    copy=False readonly=True string='Device Sequence' args: 'ir.sequence'
  • email Char
    compute='_compute_custom_info' readonly=False store=True string='Receipt email'
  • fallback_nomenclature_id Many2one → barcode.nomenclature
    string='Fallback Nomenclature' args: 'barcode.nomenclature'
  • fast_payment_method_ids Many2many → pos.payment.method
    compute='_compute_fast_payment_method_ids' help='These payment methods will be available for fast payment' readonly=False relation='pos_payment_method_config_fast_validation_relation' store=True string='Fast Payment Methods' args: 'pos.payment.method'
  • fiscal_position_ids Many2many → account.fiscal.position
    help='This is useful for restaurants with onsite and take-away services that imply specific tax rates.' string='Fiscal Positions' args: 'account.fiscal.position'
  • group_pos_manager_id Many2one → res.groups
    default=_get_group_pos_manager help='This field is there to pass the id of the pos manager group to the point of sale client.' string='Point of Sale Manager Group' args: 'res.groups'
  • group_pos_user_id Many2one → res.groups
    default=_get_group_pos_user help='This field is there to pass the id of the pos user group to the point of sale client.' string='Point of Sale User Group' args: 'res.groups'
  • has_active_session Boolean
    compute='_compute_current_session'
  • iface_available_categ_ids Many2many → pos.category
    help='The point of sale will only display products which are within one of the selected category trees. If no category is specified, all available products will be shown' string='Available PoS Product Categories' args: 'pos.category'
  • iface_big_scrollbars Boolean
    help='For imprecise industrial touchscreens.' args: 'Large Scrollbars'
  • iface_group_by_categ Boolean
    help='Display products grouped by categories.' args: 'Group products by categories'
  • iface_print_auto Boolean
    default=False help='The receipt will automatically be printed at the end of each order.' string='Automatic Receipt Printing'
  • iface_printbill Boolean
    help='Allows to print the Bill before payment.' string='Bill Printing'
  • iface_tax_included Selection
    default='total' required=True string='Tax Display' args: [('subtotal', 'Tax-Excluded Price'), ('total', 'Tax-Included Price')]
  • iface_tipproduct Boolean
    string='Product tips'
  • is_installed_account_accountant Boolean
    compute='_compute_is_installed_account_accountant' string='Is the Full Accounting Installed'
  • is_margins_costs_accessible_to_every_user Boolean
    default=False help='When disabled, only PoS manager can view the margin and cost of product among the Product info.' string='Margins & Costs'
  • journal_id Many2one → account.journal
    check_company=True default=_default_sale_journal domain=[('type', '=', 'sale')] help='Journal used for customer invoices and refunds credit notes. ' ondelete='restrict' string='Point of Sale Journal' args: 'account.journal'
  • kanban_dashboard_graph Text
    compute='_kanban_dashboard_graph'
  • last_data_change Datetime
    compute='_compute_local_data_integrity' readonly=True store=True string='Last Write Date'
  • last_session_closing_date Date
    compute='_compute_last_session'
  • limit_categories Boolean
    args: 'Restrict Categories'
  • logo Image
    compute='_compute_custom_info' readonly=False store=True string='Receipt logo'
  • manual_discount Boolean
    default=True string='Line Discounts'
  • module_pos_appointment Boolean
    args: 'Online Booking'
  • module_pos_avatax Boolean
    help='Use automatic taxes mapping with Avatax in PoS' args: 'AvaTax PoS Integration'
  • module_pos_discount Boolean
    args: 'Global Discounts'
  • module_pos_hr Boolean
    help='Show employee login screen'
  • module_pos_restaurant Boolean
    args: 'Is a Bar/Restaurant'
  • module_pos_sms Boolean
    help='Activate SMS feature for point_of_sale' string='SMS Enabled'
  • name Char
    help='An internal identification of the point of sale.' required=True string='Point of Sale' translate=True
  • note_ids Many2many → pos.note
    help='The predefined notes of this point of sale.' string='Note Models' args: 'pos.note'
  • only_round_cash_method Boolean
    string='Only apply rounding on cash'
  • order_backend_seq_id Many2one → ir.sequence
    copy=False readonly=True string='Order Backend Sequence' args: 'ir.sequence'
  • order_line_seq_id Many2one → ir.sequence
    copy=False readonly=True string='Order Line Sequence' args: 'ir.sequence'
  • order_seq_id Many2one → ir.sequence
    copy=False readonly=True string='Order Sequence' args: 'ir.sequence'
  • other_devices Boolean
    help='Connect printers to your PoS.' string='Other Devices'
  • payment_method_ids Many2many → pos.payment.method
    bypass_search_access=True check_company=True comodel_name='pos.payment.method' copy=False default=<expr> string='Payment Methods'
  • phone Char
    compute='_compute_custom_info' readonly=False store=True string='Receipt phone'
  • pos_session_duration Char
    compute='_compute_current_session_user'
  • pos_session_state Char
    compute='_compute_current_session_user'
  • pos_session_username Char
    compute='_compute_current_session_user'
  • pos_snooze_ids One2many → pos.snooze
    string='Snoozed Records' args: 'pos.snooze', 'pos_config_id'
  • preparation_devices Boolean
    help='Connect preparation printers to print to the bar, kitchen,...' string='Preparation devices'
  • preparation_printer_ids Many2many → pos.printer
    domain="[('use_type', '=', 'preparation')]" string='Preparation Printers' args: 'pos.printer', 'pos_config_printer_rel', 'config_id', 'printer_id'
  • pricelist_id Many2one → product.pricelist
    help='The pricelist used if no customer is selected or if the customer has no Sale Pricelist configured if any.' string='Default Pricelist' args: 'product.pricelist'
  • receipt_address Char
    compute='_compute_custom_info' readonly=False store=True string='Receipt address'
  • receipt_footer Text
    help='A short text that will be inserted as a footer in the printed receipt.' string='Receipt Footer'
  • receipt_header Text
    help='A short text that will be inserted as a header in the printed receipt.' string='Receipt Header'
  • receipt_printer_ids Many2many → pos.printer
    domain="[('use_type', '=', 'receipt')]" string='Receipt Printers' args: 'pos.printer', 'pos_config_receipt_printer_rel', 'config_id', 'printer_id'
  • restrict_price_control Boolean
    help='Only users with Manager access rights for PoS app can modify the product prices on orders.' string='Restrict Price Modifications to Managers'
  • rounding_method Many2one → account.cash.rounding
    string='Rounding Method' args: 'account.cash.rounding'
  • session_closing_daily_hour Float
    default=4.0 help="The hour at which the session will be automatically closed when the closing mode is set to 'Daily'." string='Daily Closing Hour'
  • session_closing_mode Selection
    default='daily' readonly=True string='Closing Mode' args: [('daily', 'Daily'), ('closing', 'At closing')]
  • session_ids One2many → pos.session
    string='Sessions' args: 'pos.session', 'config_id'
  • set_maximum_difference Boolean
    help='Set a maximum difference allowed between the expected and counted money during the closing of the session.' args: 'Set Maximum Difference'
  • set_tip_after_payment Boolean
    help='Adjust the amount authorized by payment terminals to add a tip after the customers left or at the end of the day.' args: 'Set Tip After Payment'
  • show_category_images Boolean
    default=True help='Show category images in the Point of Sale interface.' string='Show Category Images'
  • show_product_images Boolean
    default=True help='Show product images in the Point of Sale interface.' string='Show Product Images'
  • statistics_for_current_session Json
    compute='_compute_statistics_for_session' string='Session Statistics'
  • tax_regime_selection Boolean
    args: 'Tax Regime Selection value'
  • tip_percentage_1 Integer
    default=15 string='Tip Percentage 1'
  • tip_percentage_2 Integer
    default=20 string='Tip Percentage 2'
  • tip_percentage_3 Integer
    default=25 string='Tip Percentage 3'
  • tip_product_id Many2one → product.product
    default=_get_default_tip_product help='This product is used as reference on customer receipts.' string='Tip Product' args: 'product.product'
  • trusted_config_ids Many2many → pos.config
    column1='is_trusting' column2='is_trusted' domain="[('company_id', '=', company_id)]" relation='pos_config_trust_relation' string='Trusted Point of Sale Configurations' args: 'pos.config'
  • use_closing_entry_by_product Boolean
    help='Display the breakdown of sales lines by product in the automatically generated closing entry.' string='Closing Entry by product'
  • use_custom_receipt_info Boolean
    default=False help='Fill in if your shop does not have the same info as your company' string='Customise info'
  • use_download_invoice Boolean
    help='Automatically download the invoice PDF when an order is invoiced.' string='Download Invoice'
  • use_fast_payment Boolean
    help='Enable fast payment methods to validate orders on the product screen.' args: 'Fast Payment Validation'
  • use_header_or_footer Boolean
    args: 'Custom Header & Footer'
  • use_order_printer Boolean
    args: 'Order Printer'
  • use_presets Boolean
    args: 'Use Presets'
  • use_pricelist Boolean
    args: 'Use a pricelist.'
  • uuid Char
    copy=False default=<expr> help='A globally unique identifier for this pos configuration, used to prevent conflicts in client-generated data.' readonly=True
  • website Char
    compute='_compute_custom_info' readonly=False store=True string='Receipt website'
Public methods (28)
  • action_cash_bank_statement(self)
  • action_open_ui(self)
  • action_pos_config_modal_edit(self)
  • close_session_snoozes(self)
    Unlink all snoozes that don't have an end_time when the session is closed
  • close_ui(self)
  • create(self, vals_list)
    @api.model_create_multi
  • execute(self)
  • get_limited_partners_loading(self, offset=0)
  • get_pos_kanban_view_state(self)
    @api.model
  • get_record_by_ref(self, recordRefs)
  • get_statistics_for_session(self, session)
  • install_pos_restaurant(self)
    @api.model
  • link_category_form_pos(self, category)
  • load_demo_data(self)
  • load_onboarding_bakery_scenario(self, with_demo_data=True)
    @api.model
  • load_onboarding_clothes_scenario(self, with_demo_data=True)
    @api.model
  • load_onboarding_furniture_scenario(self, with_demo_data=True)
    @api.model
  • load_onboarding_retail_scenario(self, with_demo_data=False)
    @api.model
  • load_pos_data_force_loading(self)
    @api.model
  • notify_synchronisation(self, session_id, device_identifier, records={})
  • open_existing_session_cb(self)
    close session button access session form to validate entries
  • open_session_if_not_opened(self)
  • open_ui(self)
    Open the pos interface with config_id as an extra argument. In vanilla PoS each user can only have one active session, therefore it was not needed to pass the config_id on opening a session. It is also possible to login to sessions created by other users. :returns: dict
  • read_config_open_orders(self, domain, record_ids=[])
  • register_new_device_identifier(self)
  • unlink(self)
  • update_customer_display(self, order, identifier)
  • write(self, vals)

New fields (1)
  • message Text
    default=_default_message readonly=True
Public methods (2)
  • action_confirm(self)
  • get_selected_orders(self)

New fields (1)
  • pos_session_id Many2one → pos.session
    required=True args: 'pos.session'
Public methods (1)
  • generate_report(self)

New fields (3)
  • end_date Datetime
    default=fields.Datetime.now required=True
  • pos_config_ids Many2many → pos.config
    default=<expr> args: 'pos.config', 'pos_detail_configs'
  • start_date Datetime
    default=_default_start_date required=True
Public methods (1)
  • generate_report(self)

New fields (0)

No new fields.

Public methods (1)
  • load_pos_data_force_loading(self)
    @api.model
    Override this method to force loading of all records of this model each time the POS starts (ignoring the local cache).

New fields (2)
  • consolidated_billing Boolean
    default=True help='Create one invoice for all orders related to same customer and same invoicing address' string='Consolidated Billing'
  • count Integer
    compute='_compute_order_count' string='Order Count'
Public methods (1)
  • action_create_invoices(self)

New fields (5)
  • amount Float
    default=_default_amount digits=0 required=True
  • config_id Many2one → pos.config
    default=_default_config required=True string='Point of Sale Configuration' args: 'pos.config'
  • payment_date Datetime
    default=<expr> required=True string='Payment Date'
  • payment_method_id Many2one → pos.payment.method
    default=_default_payment_method required=True string='Payment Method' args: 'pos.payment.method'
  • payment_name Char
    string='Payment Reference'
Public methods (2)
  • check(self)
    Check the order: if the order is not paid: continue payment, if the order is paid print ticket.
  • launch_payment(self)

New fields (3)
  • color Integer
    string='Color'
  • name Char
    required=True
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (56)
  • account_move Many2one → account.move
    copy=False index='btree_not_null' readonly=True string='Invoice' args: 'account.move'
  • amount_difference Monetary
    readonly=True string='Difference'
  • amount_paid Monetary
    required=True string='Paid'
  • amount_return Monetary
    readonly=True required=True string='Returned'
  • amount_tax Monetary
    readonly=True required=True string='Taxes'
  • amount_total Monetary
    readonly=True required=True string='Total'
  • available_payment_method_ids Many2many → pos.payment.method
    readonly=True related='config_id.payment_method_ids' store=False string='Available Payment Methods' args: 'pos.payment.method'
  • company_id Many2one → res.company
    index=True readonly=True required=True string='Company' args: 'res.company'
  • config_id Many2one → pos.config
    compute='_compute_order_config_id' index=True readonly=False store=True string='Point of Sale' args: 'pos.config'
  • country_code Char
    related='company_id.account_fiscal_country_id.code'
  • currency_id Many2one → res.currency
    related='config_id.currency_id' string='Currency' args: 'res.currency'
  • currency_rate Float
    compute='_compute_currency_rate' compute_sudo=True digits=0 help='The rate of the currency to the currency of rate applicable at the date of the order' readonly=True store=True args: 'Currency Rate'
  • date_order Datetime
    default=fields.Datetime.now index=True readonly=True string='Date'
  • defer_invoice_pdf Boolean
    index=True string='Defer Invoice PDF Generation'
  • email Char
    compute='_compute_contact_details' readonly=False store=True string='Email'
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' readonly=False string='Fiscal Position'
  • floating_order_name Char
    string='Order Name'
  • general_customer_note Text
    string='General Customer Note'
  • has_deleted_line Boolean
    string='Has Deleted Line'
  • has_refundable_lines Boolean
    compute='_compute_has_refundable_lines' args: 'Has Refundable Lines'
  • internal_note Text
    string='Internal Note'
  • invoice_status Selection
    compute='_compute_is_invoiced' string='Invoice Status' args: [('invoiced', 'Fully Invoiced'), ('to_invoice', 'To Invoice')]
  • is_edited Boolean
    compute='_compute_is_edited' string='Edited'
  • is_globally_invoiced Boolean
    compute='_compute_is_invoiced' args: 'Is Globally Invoiced'
  • is_refund Boolean
    default=False readonly=True string='Is Refund'
  • is_singly_invoiced Boolean
    compute='_compute_is_invoiced' args: 'Is Singly Invoiced'
  • is_tipped Boolean
    readonly=True args: 'Is this already tipped?'
  • is_total_cost_computed Boolean
    compute='_compute_is_total_cost_computed' help='Allows to know if all the total cost of the order lines have already been computed'
  • lines One2many → pos.order.line
    copy=True string='Order Lines' args: 'pos.order.line', 'order_id'
  • margin Monetary
    compute='_compute_margin' string='Margin'
  • margin_percent Float
    compute='_compute_margin' digits=(12, 4) string='Margin (%)'
  • mobile Char
    compute='_compute_contact_details' readonly=False store=True string='Mobile'
  • name Char
    copy=False default='/' readonly=True required=True string='Order Ref'
  • nb_print Integer
    copy=False default=0 readonly=True string='Number of Print'
  • partner_id Many2one → res.partner
    change_default=True index='btree_not_null' string='Customer' args: 'res.partner'
  • payment_ids One2many → pos.payment
    string='Payments' args: 'pos.payment', 'pos_order_id'
  • pos_reference Char
    copy=False index=True readonly=True string='Receipt Number'
  • prep_order_ids One2many → pos.prep.order
    string='Preparation orders' args: 'pos.prep.order', 'pos_order_id'
  • preset_id Many2one → pos.preset
    string='Preset' args: 'pos.preset'
  • preset_time Datetime
    help='Hour of the day for the order' string='Hour'
  • pricelist_id Many2one → product.pricelist
    string='Pricelist' args: 'product.pricelist'
  • print_history Json
    copy=False args: 'Print History'
  • refund_orders_count Integer
    compute='_compute_refund_related_fields' help='Number of orders where items from this order were refunded' args: 'Number of Refund Orders'
  • refunded_order_id Many2one → pos.order
    compute='_compute_refund_related_fields' help='Order from which items were refunded in this order' args: 'pos.order'
  • reversed_move_ids One2many → account.move
    help='List of journal entries created when this POS order was reversed and invoiced after session close.' string='Reversal Journal Entries' args: 'account.move', 'reversed_pos_order_id'
  • sale_journal Many2one → account.journal
    ondelete='restrict' readonly=True related='session_id.config_id.journal_id' store=True string='Sales Journal' args: 'account.journal'
  • sequence_number Integer
    copy=False help='A session-unique sequence number for the order. Negative if generated from the client' string='Sequence Number'
  • session_id Many2one → pos.session
    domain="[('state', '=', 'opened')]" index=True string='Session' args: 'pos.session'
  • source Selection
    default='pos' selection=[('pos', 'Point of Sale')] string='Origin'
  • state Selection
    copy=False default='draft' index=True readonly=True args: [('draft', 'New'), ('cancel', 'Cancelled'), ('paid', 'Paid'), ('done', 'Posted')], 'Status'
  • ticket_code Char
    help='5 digits alphanumeric code to be used by portal user to request an invoice'
  • tip_amount Monetary
    readonly=True string='Tip Amount'
  • to_invoice Boolean
    copy=False args: 'To invoice'
  • tracking_number Char
    copy=False readonly=True string='Order Number'
  • user_id Many2one → res.users
    comodel_name='res.users' default=<expr> help='Employee who uses the cash register.' string='Employee'
  • uuid Char
    copy=False default=<expr> readonly=True string='Uuid'
Public methods (28)
  • action_create_invoices(self)
  • action_invoice_download_pdf(self)
  • action_pos_order_cancel(self)
  • action_pos_order_invoice(self)
  • action_pos_order_paid(self)
  • action_pos_order_receipt(self)
  • action_send_mail(self)
  • action_send_receipt(self, email)
  • action_view_invoice(self)
  • action_view_refund_orders(self)
  • action_view_refunded_order(self)
  • add_payment(self, data)
    Create a new payment for the order
  • ask_for_ticket_printing(self)
  • cancel_order_from_pos(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_example_order_data(self)
    @api.model
  • get_reference_last_part(self)
  • is_refund_or_negative(self)
  • process_saved_payments(self, order, existing_order)
    This will process and save payment related changes by ensuring necessary updates are performed on UI
  • read_pos_data(self, data, config)
  • read_pos_data_uuid(self, uuid)
    @api.model
  • read_pos_orders(self, domain=False)
    @api.model
  • refund(self)
  • remove_from_ui(self, server_ids)
    @api.model
    Remove orders from the frontend PoS application Remove orders from the server by id. :param server_ids: list of the id's of orders to remove from the server. :type server_ids: list. :returns: list -- list of db-ids for the removed orders.
  • search_order_ids(self, config_id, domain, limit, offset, state_filter='paid')
    @api.model
    Search for orders that satisfy the given domain, limit and offset. state_filter: 'paid' for non-draft/non-cancelled orders, 'cancelled' for cancelled orders.
  • sync_from_ui(self, orders)
    @api.model
    Create and update Orders from the frontend PoS application. Create new orders and update orders that are in draft status. If an order already exists with a status different from 'draft' it will be discarded, otherwise it will be saved to the database. If saved with 'draft' status the order can be overwritten later by this function. :param orders: dictionary with the orders to be created. :type orders: dict. :returns: list of db-ids for the created and updated orders. :rtype: list
  • update_order_partner(self, order)
  • write(self, vals)

New fields (35)
  • attribute_value_ids Many2many → product.template.attribute.value
    string='Selected Attributes' args: 'product.template.attribute.value'
  • combo_item_id Many2one → product.combo.item
    string='Combo Item' args: 'product.combo.item'
  • combo_line_ids One2many → pos.order.line
    string='Combo Lines' args: 'pos.order.line', 'combo_parent_id'
  • combo_parent_id Many2one → pos.order.line
    index='btree_not_null' string='Combo Parent' args: 'pos.order.line'
  • company_id Many2one → res.company
    related='order_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    related='order_id.currency_id' args: 'res.currency'
  • custom_attribute_value_ids One2many → product.attribute.custom.value
    comodel_name='product.attribute.custom.value' inverse_name='pos_order_line_id' readonly=False store=True string='Custom Values'
  • customer_note Char
    args: 'Customer Note'
  • discount Float
    digits=0 string='Discount (%)'
  • extra_tax_data Json
  • full_product_name Char
    args: 'Full Product Name'
  • is_edited Boolean
    args: 'Edited'
  • is_total_cost_computed Boolean
    help='Allows to know if the total cost has already been computed or not'
  • margin Monetary
    compute='_compute_margin' string='Margin'
  • margin_percent Float
    compute='_compute_margin' digits=(12, 4) string='Margin (%)'
  • name Char
    copy=False required=True string='Line No'
  • note Char
    args: 'Product Note'
  • notice Char
    string='Discount Notice'
  • order_id Many2one → pos.order
    index=True ondelete='cascade' required=True string='Order Ref' args: 'pos.order'
  • prep_line_ids One2many → pos.prep.line
    string='Preparation lines' args: 'pos.prep.line', 'pos_order_line_id'
  • price_extra Float
    string='Price extra'
  • price_subtotal Monetary
    readonly=True required=True string='Tax Excl.'
  • price_subtotal_incl Monetary
    readonly=True required=True string='Tax Incl.'
  • price_type Selection
    default='original' string='Price Type' args: [('original', 'Original'), ('manual', 'Manual'), ('automatic', 'Automatic')]
  • price_unit Float
    digits=0 string='Unit Price'
  • product_id Many2one → product.product
    domain=[('sale_ok', '=', True)] index=True required=True string='Product' args: 'product.product'
  • product_uom_id Many2one → uom.uom
    related='product_id.uom_id' string='Product Unit' args: 'uom.uom'
  • qty Float
    default=1 digits='Product Unit' args: 'Quantity'
  • refund_orderline_ids One2many → pos.order.line
    help='Orderlines in this field are the lines that refunded this orderline.' args: 'pos.order.line', 'refunded_orderline_id', 'Refund Order Lines'
  • refunded_orderline_id Many2one → pos.order.line
    help='If this orderline is a refund, then the refunded orderline is specified in this field.' index='btree_not_null' args: 'pos.order.line', 'Refunded Order Line'
  • refunded_qty Float
    compute='_compute_refund_qty' help='Number of items refunded in this orderline.' args: 'Refunded Quantity'
  • tax_ids Many2many → account.tax
    column1='pos_order_line_id' column2='account_tax_id' comodel_name='account.tax' readonly=True relation='account_tax_pos_order_line_rel' string='Taxes'
  • tax_ids_after_fiscal_position Many2many → account.tax
    compute='_get_tax_ids_after_fiscal_position' string='Taxes to Apply' args: 'account.tax'
  • total_cost Float
    min_display_digits='Product Price' readonly=True string='Total cost'
  • uuid Char
    copy=False default=<expr> readonly=True string='Uuid'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • order_receipt_generate_data(self, basic_receipt=False)
  • order_receipt_generate_html(self, basic_receipt=False)
  • order_receipt_generate_image(self, basic_receipt=False, width=500, height=0)

New fields (28)
  • account_move_id Many2one → account.move
    index='btree_not_null' args: 'account.move'
  • amount Monetary
    currency_field='currency_id' help='Total amount of the payment.' required=True string='Amount'
  • amount_currency Monetary
    currency_field='foreign_currency_id' help="Total amount of the payment in the order's currency." string='Amount in currency'
  • card_brand Char
    help='The brand of the payment card (e.g. Visa, AMEX, ...)' string='Brand of card'
  • card_no Char
    string='Card Number(Last 4 Digit)'
  • card_type Char
    help='The type of the payment card (e.g. CREDIT CARD OR DEBIT CARD)' string='Type of card used'
  • cardholder_name Char
    string='Card Owner name'
  • company_id Many2one → res.company
    related='pos_order_id.company_id' store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    related='pos_order_id.currency_id' string='Currency' args: 'res.currency'
  • currency_rate Float
    help='Conversion rate from company currency to order currency.' string='Conversion Rate'
  • foreign_currency_id Many2one → res.currency
    help="The currency in which the payment was made, if different from the order's currency." string='Foreign Currency' args: 'res.currency'
  • is_change Boolean
    default=False string='Is this payment change?'
  • name Char
    readonly=True string='Label'
  • partner_id Many2one → res.partner
    related='pos_order_id.partner_id' string='Customer' args: 'res.partner'
  • payment_date Datetime
    default=<expr> readonly=True required=True string='Date'
  • payment_method_authcode Char
    string='Payment APPR Code'
  • payment_method_id Many2one → pos.payment.method
    required=True string='Payment Method' args: 'pos.payment.method'
  • payment_method_issuer_bank Char
    string='Payment Issuer Bank'
  • payment_method_payment_mode Char
    string='Payment Mode'
  • payment_ref_no Char
    help='Payment reference number from payment provider terminal' string='Payment reference number'
  • payment_status Char
    string='Payment Status'
  • pos_order_id Many2one → pos.order
    index=True ondelete='cascade' required=True string='Order' args: 'pos.order'
  • qr_code Char
    copy=False readonly=True string='QR Code'
  • session_id Many2one → pos.session
    index=True related='pos_order_id.session_id' store=True string='Session' args: 'pos.session'
  • ticket Char
    string='Payment Receipt Info'
  • transaction_id Char
    string='Payment Transaction ID'
  • user_id Many2one → res.users
    related='session_id.user_id' string='Employee' args: 'res.users'
  • uuid Char
    copy=False default=<expr> readonly=True string='Uuid'
Public methods (0)

No public methods.

New fields (23)
  • account_bank_statement_id Many2one → account.bank.statement
    readonly=True string='Cash Lines' args: 'account.bank.statement'
  • active Boolean
    default=True
  • all_providers_installed Boolean
    compute='_compute_all_providers_installed'
  • available_payment_method_types Json
    compute='_compute_available_payment_method_types'
  • available_payment_providers Json
    compute='_compute_available_payment_providers'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • config_ids Many2many → pos.config
    check_company=True string='Point of Sale' args: 'pos.config'
  • currency_ids Many2many → res.currency
    string='Currencies' args: 'res.currency'
  • custom_image Image
    max_height=90 max_width=90 args: 'Custom Image'
  • default_pos_receivable_account_name Char
    related='company_id.account_default_pos_receivable_account_id.display_name' string='Default Receivable Account Name'
  • default_qr Char
    compute='_compute_qr'
  • hide_qr_code_method Boolean
    compute='_compute_hide_qr_code_method'
  • image Image
    compute='_compute_image' inverse='_inverse_image' max_height=90 max_width=90
  • journal_id Many2one → account.journal
    check_company=True domain=['|', '&', ('type', '=', 'cash'), ('pos_payment_method_ids', '=', False), ('type', '=', 'bank')] help='Leave empty to use the receivable account of customer.\nDefines the journal where to book the accumulated payments (or individual payment if Identify Customer is true) after closing the session.\nFor cash journal, we directly write to the default account in the journal via statement lines.\nFor bank journal, we write to the outstanding account specified in this payment method.\nOnly cash and bank journals are allowed.' index='btree_not_null' ondelete='restrict' string='Journal' args: 'account.journal'
  • name Char
    help='Defines the name of the payment method that will be displayed in the Point of Sale when the payments are selected.' required=True string='Method' translate=True
  • open_session_ids Many2many → pos.session
    compute='_compute_open_session_ids' help='Open PoS sessions that are using this payment method.' string='Pos Sessions' args: 'pos.session'
  • outstanding_account_id Many2one → account.account
    check_company=True help='Account used as outstanding account when creating accounting payment records for bank payments.' ondelete='restrict' string='Outstanding Account' args: 'account.account'
  • payment_method_type Selection
    default='none' required=True selection=<expr> string='Integration'
  • payment_provider Selection
    help='Payment provider that will be used to process payments made with this payment method.' selection=<expr> string='Payment Provider'
  • qr_code_method Selection
    copy=False help='Type of QR-code to be generated for this payment method.' selection=<expr> string='QR Code Format'
  • receivable_account_id Many2one → account.account
    check_company=True domain=[('account_type', '=', 'asset_receivable')] help="Leave empty to use the default account from the company setting.\nOverrides the company's receivable account (for Point of Sale) used in the journal entries." ondelete='restrict' string='Intermediary Account' args: 'account.account'
  • sequence Integer
    copy=False default=_default_sequence
  • type Selection
    required=True selection=[('cash', 'Cash'), ('bank', 'Bank'), ('pay_later', 'Customer Account')]
Public methods (6)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_payment_providers(self)
    @api.model
  • get_provider_status(self)
    @api.model
  • get_qr_code_value(self, amount, free_communication, structured_communication, currency, debtor_partner)
    Returns the payment payload to encode in the QR-code. The QR-code image itself is drawn by the POS client, so this must be the raw value the bank application expects (e.g. the EMV string), not the URL of a report rendering it.
  • write(self, vals)

New fields (9)
  • attribute_value_ids Many2many → product.template.attribute.value
    string='Selected Attributes' args: 'product.template.attribute.value', 'pos_prep_line_product_template_attribute_value_rel'
  • cancelled Float
    default=0 args: 'Quantity of cancelled product'
  • combo_line_ids One2many → pos.prep.line
    args: 'pos.prep.line', 'combo_parent_id'
  • combo_parent_id Many2one → pos.prep.line
    compute='_compute_combo_fields' index='btree_not_null' store=True args: 'pos.prep.line'
  • pos_order_line_id Many2one → pos.order.line
    index='btree_not_null' string='Original pos order line' args: 'pos.order.line'
  • prep_order_id Many2one → pos.prep.order
    index='btree_not_null' ondelete='cascade' string='Preparation Order' args: 'pos.prep.order'
  • product_id Many2one → product.product
    string='Product ID' args: 'product.product'
  • quantity Float
    required=True args: 'Quantity'
  • uuid Char
    copy=False default=<expr> readonly=True string='Uuid'
Public methods (0)

No public methods.

New fields (3)
  • pos_order_id Many2one → pos.order
    index='btree_not_null' ondelete='cascade' string='Order' args: 'pos.order'
  • prep_line_ids One2many → pos.prep.line
    string='Preparation Lines' args: 'pos.prep.line', 'prep_order_id'
  • uuid Char
    copy=False default=<expr> readonly=True string='Uuid'
Public methods (1)
  • update_last_order_change(self, order)
    @api.model
    This method is use to create order changes for orders than was created from a self ordering device. Indeed, those orders are not created from the PoS itself, so no change is created.

New fields (21)
  • attendance_ids One2many
    readonly=False related='resource_calendar_id.attendance_ids' string='Attendances'
  • color Integer
    default=0 string='Color'
  • count_linked_config Integer
    compute='_compute_count_linked_config'
  • count_linked_orders Integer
    compute='_compute_count_linked_orders'
  • fiscal_position_id Many2one → account.fiscal.position
    string='Fiscal Position' args: 'account.fiscal.position'
  • has_image Boolean
    compute='_compute_has_image'
  • identification Selection
    default='none' required=True string='Identification' args: [('none', 'Not required'), ('address', 'Address'), ('name', 'Name')]
  • image_128 Image
    max_height=128 max_width=128 related='image_512' store=True string='Image 128'
  • image_512 Image
    max_height=512 max_width=512 string='Image'
  • interval_time Integer
    default=20 string='Interval time (in min)'
  • is_return Boolean
    default=False help='All quantity in the cart will be in negative. Ideal for return managment.' string='Return mode'
  • name Char
    required=True string='Label' translate=True
  • pricelist_id Many2one → product.pricelist
    string='Pricelist' args: 'product.pricelist'
  • resource_calendar_id Many2one → resource.calendar
    args: 'resource.calendar', 'Resource'
  • service_fee Boolean
    default=False string='Service Fee'
  • service_fee_amount Float
    default=0.0 string='Amount'
  • service_fee_based_on Selection
    default='pre_discount' string='Based on' args: [('pre_discount', 'Order total before discount(s)'), ('post_discount', 'Order total after discount(s)')]
  • service_fee_product_id Many2one → product.product
    default=<expr> string='Service Fee Product' args: 'product.product'
  • service_fee_type Selection
    default='percent' string='Type' args: [('fixed', 'Fixed Price'), ('percent', 'Percent')]
  • slots_per_interval Integer
    default=5 string='Capacity'
  • use_timing Boolean
    default=False string='Manage orders by time'
Public methods (3)
  • action_open_linked_config(self)
  • action_open_linked_orders(self)
  • get_available_slots(self)

New fields (2)
  • config_id Many2one → pos.config
    readonly=True required=True args: 'pos.config'
  • example_text Html
    compute='_compute_example_text' readonly=True
Public methods (3)
  • action_discard(self)
  • action_tax_excluded(self)
  • action_tax_included(self)

New fields (12)
  • is_split_per_product Boolean
    help='Print one ticket for each product instead of one ticket grouping all products of the order.' string='Split per product'
  • name Char
    default='Printer' help='An internal identification of the printer' required=True args: 'Printer Name'
  • paper_size Selection
    default='80' required=True selection=[('80', 'Standard 80mm'), ('58', 'Standard 58mm'), ('label', 'Zebra (>=2.75in)'), *EPSON_MODELS] string='Paper Size'
  • paper_size_keys Char
    compute='_compute_paper_size_keys'
  • pos_config_ids Many2many → pos.config
    string='Point of Sale' args: 'pos.config', 'pos_config_receipt_printer_rel', 'printer_id', 'config_id'
  • printer_ip Char
    help="Local IP address of an Epson receipt printer, or its serial number if the 'Automatic Certificate Update' option is enabled in the printer settings. It can also be the IP address of a Zebra network printer." string='Printer IP Address'
  • printer_type Selection
    default='epson_epos' selection=[('epson_epos', 'ePoS')] string='Printer Type'
  • product_categories_ids Many2many → pos.category
    string='Printed Product Categories' args: 'pos.category', 'printer_category_rel', 'printer_id', 'category_id'
  • timeout Integer
    default=15000 help='Time in milliseconds before considering that the printer is not responding.' string='Connection Timeout (ms)'
  • use_cashdrawer Boolean
    help='Automatically open the cashdrawer.' string='Link Cashdrawer'
  • use_lna Boolean
    string='Use Local Network Access'
  • use_type Selection
    default='preparation' selection=[('preparation', 'Preparation'), ('receipt', 'Receipt')] string='Type'
Public methods (0)

No public methods.

New fields (27)
  • account_move_count Integer
    compute='_compute_account_move_count' string='Number of related journal entries'
  • bank_statement_id Many2one → account.bank.statement
    index='btree_not_null' readonly=True string='Bank Statement' args: 'account.bank.statement'
  • bank_statement_line_ids One2many → account.bank.statement.line
    readonly=True related='bank_statement_id.line_ids' string='Bank Statement Lines' args: 'account.bank.statement.line'
  • closing_balance Monetary
    readonly=True related='bank_statement_id.balance_end_real' string='Closing Balance'
  • closing_difference Monetary
    compute='_compute_closing_difference' string='Closing Difference'
  • closing_notes Text
    string='Closing Notes'
  • company_id Many2one → res.company
    readonly=True related='config_id.company_id' string='Company' args: 'res.company'
  • config_id Many2one → pos.config
    index=True required=True string='Point of Sale' args: 'pos.config'
  • correction_move_ids One2many → account.move
    index=True string='Correction Entries' args: 'account.move', 'pos_session_correction_id'
  • currency_id Many2one → res.currency
    readonly=False related='config_id.currency_id' string='Currency' args: 'res.currency'
  • is_in_company_currency Boolean
    compute='_compute_is_in_company_currency' args: 'Is Using Company Currency'
  • move_ids Many2many → account.move
    compute='_compute_move_ids' search='_search_move_ids' string='Related Journal Entries' args: 'account.move'
  • name Char
    default='/' readonly=True string='Session ID'
  • opening_balance Monetary
    readonly=True related='bank_statement_id.balance_start' string='Opening Balance'
  • opening_notes Text
    string='Opening Notes'
  • order_count Integer
    compute='_compute_order_count'
  • order_ids One2many → pos.order
    string='Orders' args: 'pos.order', 'session_id'
  • payment_method_ids Many2many → pos.payment.method
    related='config_id.payment_method_ids' string='Payment Methods' args: 'pos.payment.method'
  • refund_move_count Integer
    compute='_compute_account_move_count' string='Number of related refunds journal entries'
  • refund_move_ids One2many → account.move
    index=True string='Refunds Entry' args: 'account.move', 'pos_session_refunds_id'
  • sale_move_count Integer
    compute='_compute_account_move_count' string='Number of related sales journal entries'
  • sale_move_ids One2many → account.move
    index=True string='Sales Entry' args: 'account.move', 'pos_session_sales_id'
  • start_at Datetime
    readonly=True string='Opening Date'
  • state Selection
    copy=False default='opening_control' index=True readonly=True required=True string='Status' args: [('opening_control', 'Opening Control'), ('opened', 'In Progress'), ('closing_control', 'Closing Control'), ('closed', 'Closed & Posted')]
  • stop_at Datetime
    copy=False readonly=True string='Closing Date'
  • total_payments_amount Float
    compute='_compute_total_payments_amount' string='Total Payments Amount'
  • user_id Many2one → res.users
    default=<expr> index=True ondelete='restrict' readonly=False required=True string='Opened By' args: 'res.users'
Public methods (20)
  • action_show_payments_list(self)
  • action_view_order(self)
  • close_session_from_ui(self, payment_method_closing={})
    Main entry point for closing a session from the UI. It will perform all necessary checks and operations to close the session
  • create(self, vals_list)
    @api.model_create_multi
  • delete_cash_in_out(self, absl_id, partner_id)
  • delete_opening_control_session(self)
  • filter_local_data(self, models_to_filter)
  • get_cash_in_out_list(self)
  • get_closing_control_data(self)
  • get_order_count_by_preset(self)
  • get_pos_ui_product_pricelist_item_by_product(self, product_tmpl_ids, product_ids, config_id)
  • get_session_orders(self)
  • load_data(self, local_data={})
    Load POS data for the session, optionally scoped by what the client already holds. param local_data: dict with the following optional keys: - ``models`` (list): restrict the response to these model names only. - ``records`` (dict): per-model mapping of ``{id: write_date}`` already in the client cache; used to compute records that should be removed locally, or updated. - ``search_params`` (dict): per-model overrides for ``domain``, ``offset``, ``limit``, and ``context`` passed to ``_load_pos_metadata``. - ``only_records`` (bool): if ``True``, return ``{model: [records]}`` without metadata (fields, relations, etc.). :return: A dictionary where the keys are the model names and the values are list of records if ``only_records`` is ``True``, or a dictionary with the following keys: - ``records``: list of records - ``fields``: list of fields - ``relations``: list of relations - ``to_remove``: list of ids that should be removed from the client cache. Present only if local_data['records'] is not empty.
  • log_partner_message(self, partner_id, action, message_type)
  • open_frontend_cb(self)
    Open the pos interface with config_id as an extra argument. In vanilla PoS each user can only have one active session, therefore it was not needed to pass the config_id on opening a session. It is also possible to login to sessions created by other users. :returns: dict
  • post_close_register_message(self)
  • set_opening_control(self, cashbox_value: int, notes: str)
    Public method to open the session. This calls the internal logic and, if successful, assigns the sequence name. DO NOT INHERIT THIS METHOD. Inherit _set_opening_control_data instead.
  • show_linked_account_move(self)
  • try_cash_in_out(self, _type, amount, reason, partner_id)
  • write(self, vals)

New fields (5)
  • end_time Datetime
    required=False string='End Time'
  • pos_config_id Many2one → pos.config
    index=True ondelete='cascade' required=True string='POS Config' args: 'pos.config'
  • product_template_id Many2one → product.template
    ondelete='cascade' string='Product' args: 'product.template'
  • start_time Datetime
    required=True string='Start Time'
  • type Selection
    default='product' required=True selection=[('product', 'Product')] string='Snoozed for?'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • pos_order_line_id Many2one → pos.order.line
    index='btree_not_null' ondelete='cascade' string='PoS Order Line' args: 'pos.order.line'
  • uuid Char
    copy=False default=<expr> readonly=True string='Uuid'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • is_upsell Boolean
    default=False help='Indicates if the combo is an upsell to the customer. This can be compared to a minimum quantity of 0.' string='Is Upsell'
  • qty_free Integer
    default=1 help='Number of free items included in the combo.' string='Free quantity'
  • qty_max Integer
    default=1 help='Maximum number of items to select in the combo.' string='Maximum quantity'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • action_archive(self)
  • create(self, vals_list)
    @api.model

New fields (2)
  • has_image Boolean
    compute='_compute_has_image'
  • pos_description Html
    string='Description' translate=True
Public methods (1)
  • write(self, vals)

New fields (7)
  • available_in_pos Boolean
    default=False help='Check if you want this product to appear in the Point of Sale.' string='Available in POS'
  • color Integer
    compute='_compute_color' readonly=False store=True args: 'Color Index'
  • pos_categ_ids Many2many → pos.category
    help='Category used in the Point of Sale.' string='Point of Sale Category' args: 'pos.category'
  • pos_optional_product_ids Many2many → product.template
    column1='src_id' column2='dest_id' comodel_name='product.template' help='Optional products are suggested when customers add items to their cart (e.g., adding a burger suggests cold drinks or fries).' relation='pos_product_optional_rel' string='POS Optional Products'
  • pos_sequence Integer
    copy=False default=_default_pos_sequence help='Determine the display order in the POS Terminal' string='POS Sequence'
  • public_description Html
    string='Product Description' translate=True
  • to_weight Boolean
    help="Enable this option if the product should be sold by weight. When enabled and scale is not avalable, the 'Price' button will update the quantity instead of the unit price. This applies to both normal POS usage and when integrated with a hardware scale." string='To Weigh'
Public methods (6)
  • action_archive(self)
  • create_product_variant_from_pos(self, attribute_value_ids, config_id)
    Create a product variant from the POS interface.
  • get_product_info_pos(self, price, quantity, pos_config_id, product_variant_id=False)
  • load_product_from_pos(self, config_id, domain, offset=0, limit=None)
    @api.model
  • set_pos_sequence(self, sequence_by_id)
    @api.model
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • get_sale_details(self, date_start=False, date_stop=False, config_ids=False, session_ids=False, **kwargs)
    @api.model
    Serialise the orders of the requested time period, configs and sessions. :param date_start: The dateTime to start, default today 00:00:00. :type date_start: str. :param date_stop: The dateTime to stop, default date_start + 23:59:59. :type date_stop: str. :param config_ids: Pos Config id's to include. :type config_ids: list of numbers. :param session_ids: Pos Config id's to include. :type session_ids: list of numbers. :returns: dict -- Serialised sales.

New fields (27)
  • average_price Monetary
    aggregator='avg' readonly=True string='Average Price'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • config_id Many2one → pos.config
    readonly=True string='Point of Sale' args: 'pos.config'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • date Datetime
    readonly=True string='Order Date'
  • delay_validation Integer
    readonly=True string='Delay Validation'
  • invoiced Boolean
    readonly=True
  • journal_id Many2one → account.journal
    readonly=True string='Journal' args: 'account.journal'
  • margin Monetary
    readonly=True string='Margin'
  • nbr_lines Integer
    readonly=True string='Sale Line Count'
  • order_id Many2one → pos.order
    readonly=True string='Order' args: 'pos.order'
  • partner_id Many2one → res.partner
    readonly=True string='Customer' args: 'res.partner'
  • payment_method_id Many2one → pos.payment.method
    readonly=True string='Payment Method' args: 'pos.payment.method'
  • pos_categ_id Many2one → pos.category
    readonly=True string='Point of Sale Category' args: 'pos.category'
  • preset_id Many2one → pos.preset
    readonly=True string='Preset' args: 'pos.preset'
  • price_sub_total Monetary
    readonly=True string='Subtotal w/o discount'
  • price_subtotal_excl Monetary
    readonly=True string='Subtotal w/o Tax'
  • price_total Monetary
    readonly=True string='Total Price'
  • pricelist_id Many2one → product.pricelist
    readonly=True string='Pricelist' args: 'product.pricelist'
  • product_categ_id Many2one → product.category
    readonly=True string='Product Category' args: 'product.category'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • product_qty Integer
    readonly=True string='Product Quantity'
  • product_tmpl_id Many2one → product.template
    readonly=True string='Product Template' args: 'product.template'
  • session_id Many2one → pos.session
    readonly=True string='Session' args: 'pos.session'
  • state Selection
    readonly=True string='Status' args: [('draft', 'New'), ('paid', 'Paid'), ('done', 'Posted'), ('cancel', 'Cancelled')]
  • total_discount Monetary
    readonly=True string='Total Discount'
  • user_id Many2one → res.users
    readonly=True string='User' args: 'res.users'
Public methods (1)
  • init(self)

New fields (4)
  • point_of_sale_ticket_portal_url_display_mode Selection
    default='qr_code_and_url' help='Choose how the URL to the portal will be print on the receipt.' required=True string='Print' args: [('qr_code', 'QR code'), ('url', 'URL'), ('qr_code_and_url', 'QR code + URL')]
  • point_of_sale_ticket_unique_code Boolean
    help='Add a 5-digit code on the receipt to allow the user to request the invoice for an order on the portal.' string='Generate a code on ticket'
  • point_of_sale_use_ticket_qr_code Boolean
    default=True help="Print information on the receipt to allow the customer to easily access the invoice anytime, from Odoo's portal." string='Self-service invoicing'
  • receipt_address Char
    compute='_get_receipt_address' store=False
Public methods (1)
  • validate_lock_dates(self)
    @api.constrains('fiscalyear_lock_date', 'tax_lock_date', 'sale_lock_date', 'hard_lock_date')
    This constrains makes it impossible to change the relevant lock dates if some open POS session would violate them. Without that, these POS sessions could not be closed (since the closing entries violate the lock dates).

New fields (97)
  • barcode_nomenclature_id Many2one → barcode.nomenclature
    readonly=False related='company_id.nomenclature_id' args: 'barcode.nomenclature'
  • custom_address_placeholder Char
    readonly=False related='pos_config_id.company_id.receipt_address'
  • custom_email_placeholder Char
    readonly=False related='pos_config_id.company_id.email'
  • custom_phone_placeholder Char
    readonly=False related='pos_config_id.company_id.phone' string='phone placeholder'
  • custom_website_placeholder Char
    readonly=False related='pos_config_id.company_id.website'
  • group_pos_preset Boolean
    help='Hide or show the Presets menu in the Point of Sale configuration.' implied_group='point_of_sale.group_pos_preset' string='Presets'
  • module_l10n_at_pos Boolean
    help='Configure Fiskaly credentials required for Austrian RKSV fiscalization' string='Austria Fiscalization'
  • module_pos_adyen Boolean
    help='The transactions are processed by Adyen. Set your Adyen credentials on the related payment method.' string='Adyen Payment Terminal'
  • module_pos_dpopay Boolean
    help='The transactions are processed by DPO Pay. Set your DPO Pay credentials on the related payment method.' string='DPO Pay Payment Terminal'
  • module_pos_mercado_pago Boolean
    help='The transactions are processed by Mercado Pago. Set your Mercado Pago credentials on the related payment method.' string='Mercado Pago Payment Terminal'
  • module_pos_pine_labs Boolean
    help='The transactions are processed by Pine Labs. Set your Pine Labs credentials on the related payment method.' string='Pine Labs Payment Terminal'
  • module_pos_pricer Boolean
    help='Display the price of your products through electronic price tags' string='Pricer electronic price tags'
  • module_pos_qfpay Boolean
    help='The transactions are processed by QFPay. Set your QFPay credentials on the related payment method.' string='QFPay Payment Terminal'
  • module_pos_razorpay Boolean
    help='The transactions are processed by Razorpay. Set your Razorpay credentials on the related payment method.' string='Razorpay Payment Terminal'
  • module_pos_stripe Boolean
    help='The transactions are processed by Stripe. Set your Stripe credentials on the related payment method.' string='Stripe Payment Terminal'
  • module_pos_viva_com Boolean
    help='The transactions are processed by Viva.com on terminal or tap on phone.' string='Viva.com Payment Terminal'
  • point_of_sale_ticket_portal_url_display_mode Selection
    readonly=False related='company_id.point_of_sale_ticket_portal_url_display_mode' required=True
  • point_of_sale_ticket_unique_code Boolean
    readonly=False related='company_id.point_of_sale_ticket_unique_code'
  • point_of_sale_use_ticket_qr_code Boolean
    readonly=False related='company_id.point_of_sale_use_ticket_qr_code'
  • pos_allowed_pricelist_ids Many2many → product.pricelist
    compute='_compute_pos_allowed_pricelist_ids' args: 'product.pricelist'
  • pos_amount_authorized_diff Float
    readonly=False related='pos_config_id.amount_authorized_diff'
  • pos_auto_validate_electronic_payment Boolean
    readonly=False related='pos_config_id.auto_validate_electronic_payment' string='Automatically validates orders paid with an electronic payment (terminals, qr codes, ...).'
  • pos_available_preset_ids Many2many → pos.preset
    readonly=False related='pos_config_id.available_preset_ids' args: 'pos.preset'
  • pos_available_pricelist_ids Many2many → product.pricelist
    compute='_compute_pos_pricelist_id' readonly=False store=True string='Available Pricelists' args: 'product.pricelist'
  • pos_basic_receipt Boolean
    readonly=False related='pos_config_id.basic_receipt'
  • pos_cash_control Boolean
    related='pos_config_id.cash_control'
  • pos_cash_rounding Boolean
    readonly=False related='pos_config_id.cash_rounding' string='Total Rounding (PoS)'
  • pos_closing_journal_id Many2one
    readonly=False related='pos_config_id.closing_journal_id'
  • pos_company_has_template Boolean
    related='pos_config_id.company_has_template'
  • pos_config_id Many2one → pos.config
    default=<expr> string='Point of Sale' args: 'pos.config'
  • pos_custom_email Char
    readonly=False related='pos_config_id.custom_email' string='email placeholder'
  • pos_custom_logo Image
    readonly=False related='pos_config_id.custom_logo'
  • pos_custom_logo_name Char
    readonly=False related='pos_config_id.custom_logo_name'
  • pos_custom_phone Char
    readonly=False related='pos_config_id.custom_phone'
  • pos_custom_receipt_address Char
    readonly=False related='pos_config_id.custom_receipt_address'
  • pos_custom_website Char
    readonly=False related='pos_config_id.custom_website'
  • pos_customer_display_bg_img Image
    readonly=False related='pos_config_id.customer_display_bg_img'
  • pos_customer_display_bg_img_name Char
    readonly=False related='pos_config_id.customer_display_bg_img_name'
  • pos_default_bill_ids Many2many
    readonly=False related='pos_config_id.default_bill_ids'
  • pos_default_fiscal_position_id Many2one → account.fiscal.position
    check_company=True compute='_compute_pos_fiscal_positions' readonly=False store=True string='Default Fiscal Position' args: 'account.fiscal.position'
  • pos_default_partner_id Many2one
    readonly=False related='pos_config_id.default_partner_id'
  • pos_default_preset_id Many2one → pos.preset
    readonly=False related='pos_config_id.default_preset_id' args: 'pos.preset'
  • pos_fallback_nomenclature_id Many2one
    domain="[('id', '!=', barcode_nomenclature_id)]" readonly=False related='pos_config_id.fallback_nomenclature_id'
  • pos_fast_payment_method_ids Many2many
    readonly=False related='pos_config_id.fast_payment_method_ids'
  • pos_fiscal_position_ids Many2many → account.fiscal.position
    check_company=True compute='_compute_pos_fiscal_positions' readonly=False store=True string='Fiscal Positions' args: 'account.fiscal.position'
  • pos_has_active_session Boolean
    related='pos_config_id.has_active_session'
  • pos_iface_available_categ_ids Many2many → pos.category
    compute='_compute_pos_iface_available_categ_ids' readonly=False store=True string='Available PoS Product Categories' args: 'pos.category'
  • pos_iface_big_scrollbars Boolean
    readonly=False related='pos_config_id.iface_big_scrollbars'
  • pos_iface_group_by_categ Boolean
    readonly=False related='pos_config_id.iface_group_by_categ'
  • pos_iface_print_auto Boolean
    readonly=False related='pos_config_id.iface_print_auto'
  • pos_iface_printbill Boolean
    readonly=False related='pos_config_id.iface_printbill'
  • pos_iface_tax_included Selection
    readonly=False related='pos_config_id.iface_tax_included'
  • pos_iface_tipproduct Boolean
    readonly=False related='pos_config_id.iface_tipproduct'
  • pos_is_margins_costs_accessible_to_every_user Boolean
    readonly=False related='pos_config_id.is_margins_costs_accessible_to_every_user'
  • pos_journal_id Many2one
    readonly=False related='pos_config_id.journal_id'
  • pos_limit_categories Boolean
    readonly=False related='pos_config_id.limit_categories'
  • pos_manual_discount Boolean
    readonly=False related='pos_config_id.manual_discount'
  • pos_module_pos_appointment Boolean
    readonly=False related='pos_config_id.module_pos_appointment'
  • pos_module_pos_avatax Boolean
    readonly=False related='pos_config_id.module_pos_avatax'
  • pos_module_pos_discount Boolean
    readonly=False related='pos_config_id.module_pos_discount'
  • pos_module_pos_hr Boolean
    readonly=False related='pos_config_id.module_pos_hr'
  • pos_module_pos_restaurant Boolean
    readonly=False related='pos_config_id.module_pos_restaurant'
  • pos_module_pos_sms Boolean
    readonly=False related='pos_config_id.module_pos_sms'
  • pos_note_ids Many2many
    readonly=False related='pos_config_id.note_ids'
  • pos_only_round_cash_method Boolean
    readonly=False related='pos_config_id.only_round_cash_method'
  • pos_other_devices Boolean
    readonly=False related='pos_config_id.other_devices'
  • pos_payment_method_ids Many2many
    readonly=False related='pos_config_id.payment_method_ids'
  • pos_preparation_devices Boolean
    readonly=False related='pos_config_id.preparation_devices'
  • pos_preparation_printer_ids Many2many
    domain="[('use_type', '=', 'preparation')]" readonly=False related='pos_config_id.preparation_printer_ids'
  • pos_pricelist_id Many2one → product.pricelist
    compute='_compute_pos_pricelist_id' readonly=False store=True string='Default Pricelist' args: 'product.pricelist'
  • pos_receipt_footer Text
    compute='_compute_pos_receipt_header_footer' readonly=False store=True string='Receipt Footer'
  • pos_receipt_header Text
    compute='_compute_pos_receipt_header_footer' readonly=False store=True string='Receipt Header'
  • pos_receipt_printer_ids Many2many
    domain="[('use_type', '=', 'receipt')]" readonly=False related='pos_config_id.receipt_printer_ids'
  • pos_restrict_price_control Boolean
    readonly=False related='pos_config_id.restrict_price_control'
  • pos_rounding_method Many2one
    readonly=False related='pos_config_id.rounding_method'
  • pos_selectable_categ_ids Many2many → pos.category
    compute='_compute_pos_selectable_categ_ids' args: 'pos.category'
  • pos_session_closing_daily_hour Float
    readonly=False related='pos_config_id.session_closing_daily_hour'
  • pos_session_closing_mode Selection
    readonly=False related='pos_config_id.session_closing_mode'
  • pos_set_maximum_difference Boolean
    readonly=False related='pos_config_id.set_maximum_difference'
  • pos_set_tip_after_payment Boolean
    readonly=False related='pos_config_id.set_tip_after_payment' store=True
  • pos_show_category_images Boolean
    readonly=False related='pos_config_id.show_category_images'
  • pos_show_product_images Boolean
    readonly=False related='pos_config_id.show_product_images'
  • pos_tax_regime_selection Boolean
    readonly=False related='pos_config_id.tax_regime_selection'
  • pos_tip_percentage_1 Integer
    readonly=False related='pos_config_id.tip_percentage_1'
  • pos_tip_percentage_2 Integer
    readonly=False related='pos_config_id.tip_percentage_2'
  • pos_tip_percentage_3 Integer
    readonly=False related='pos_config_id.tip_percentage_3'
  • pos_tip_product_id Many2one
    readonly=False related='pos_config_id.tip_product_id' store=True
  • pos_trusted_config_ids Many2many
    domain="[('id', '!=', pos_config_id), ('module_pos_restaurant', '=', False)]" readonly=False related='pos_config_id.trusted_config_ids'
  • pos_use_closing_entry_by_product Boolean
    readonly=False related='pos_config_id.use_closing_entry_by_product'
  • pos_use_custom_receipt_info Boolean
    readonly=False related='pos_config_id.use_custom_receipt_info'
  • pos_use_download_invoice Boolean
    readonly=False related='pos_config_id.use_download_invoice'
  • pos_use_fast_payment Boolean
    readonly=False related='pos_config_id.use_fast_payment'
  • pos_use_header_or_footer Boolean
    readonly=False related='pos_config_id.use_header_or_footer'
  • pos_use_presets Boolean
    readonly=False related='pos_config_id.use_presets'
  • pos_use_pricelist Boolean
    readonly=False related='pos_config_id.use_pricelist'
  • sale_tax_id Many2one → account.tax
    check_company=True readonly=False related='company_id.account_sale_tax_id' string='Default Sale Tax' args: 'account.tax'
  • use_kiosk_mode Boolean
    default=False string='Is Kiosk Mode'
Public methods (8)
  • action_launch_cron_generate_invoice_period(self)
  • action_pos_config_create_new(self)
  • action_pos_printer_dialog(self)
  • create(self, vals_list)
    @api.model_create_multi
  • open_payment_method_form(self)
  • pos_close_ui(self)
  • pos_open_ui(self)
  • set_values(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • fiscal_position_id Many2one → account.fiscal.position
    compute='_compute_fiscal_position_id' help='Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. The default value comes from the customer.' string='Automatic Fiscal Position' args: 'account.fiscal.position'
  • invoice_emails Char
    compute='_compute_invoice_emails' readonly=True
  • pos_order_count Integer
    compute='_compute_pos_order' groups='point_of_sale.group_pos_user' help='The number of point of sales orders related to this customer'
  • pos_order_ids One2many → pos.order
    readonly=True args: 'pos.order', 'partner_id'
Public methods (3)
  • action_open_partner_view(self)
  • action_view_pos_order(self)
    This function returns an action that displays the pos orders from partner.
  • open_commercial_entity(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • is_pos_groupable Boolean
    help='Check if you want to group products of this unit in point of sale orders' string='Group Products in POS'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…