Medical Prescription Sales Processes

medical_prescription_sale
REPOSITORY
REPOSITORYOCA/vertical-medical
GIT
GIThttps://github.com/OCA/vertical-medical.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/vertical-medical/tree/10.0/medical_prescription_sale
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYMedical
LICENSE
LICENSEGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), LasLabs, Odoo Medical Team
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), LasLabs, Odoo Medical Team
COMMITTERS
COMMITTERSPedro M. Baeza, Jordi Ballester, Dave Lasley
WEBSITE
WEBSITEhttps://laslabs.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - base_locale_uom_default
OCA/vertical-medical:
    - medical_prescription
    - medical
    - medical_medicament
    - medical_medication
    - medical_disease
    - medical_pharmacy
odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - web_planner
    - procurement
    - stock_account
    - stock
    - barcodes
    - sale_crm
    - crm
    - base_action_rule
    - resource
    - calendar
    - web_calendar
    - fetchmail
    - utm
    - web_kanban_gauge
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
crm_case_form_view_oppor crm.lead.form crm.lead xpath Inherits crm.crm_case_form_view_oppor
medical_prescription_order_line_form_view Prescription Order Line medical.prescription.order.line xpath Inherits medical_prescription.medical_prescription_order_line_form_view
medical_prescription_order_line_search_view Prescription Order Line Search medical.prescription.order.line xpath Inherits medical_prescription.medical_prescription_order_line_search_view
medical_prescription_order_line_tree_view Prescription Order Lines medical.prescription.order.line xpath Inherits medical_prescription.medical_prescription_order_line_tree_view
medical_rx_sale_wizard_view_form medical.rx.sale.wizard.view.form rx.sale.wizard form New
medical_sale_wizard_view_form medical.sale.wizard.view.form medical.sale.wizard form New
view_order_form sale.order.form sale.order xpath Inherits sale.view_order_form
Models touched (10)

New fields (5)
  • is_prescription Boolean
    compute='_compute_prescription_order_and_patient_ids' default=False readonly=True
  • patient_ids Many2many → medical.patient
    comodel_name='medical.patient' compute='_compute_prescription_order_and_patient_ids' readonly=True string='Patients'
  • pharmacy_id Many2one → medical.pharmacy
    comodel_name='medical.pharmacy' string='Pharmacy'
  • prescription_order_ids Many2many → medical.prescription.order
    comodel_name='medical.prescription.order' compute='_compute_prescription_order_and_patient_ids' readonly=True string='Prescriptions'
  • prescription_order_line_ids Many2many → medical.prescription.order.line
    comodel_name='medical.prescription.order.line' string='Prescription Lines'
Public methods (0)

No public methods.

New fields (1)
  • is_prescription Boolean
    default=_compute_default_is_prescription readonly=True
Public methods (1)
  • makeOrder(self)
    @api.multi
    This function creates Quotation on given case. :return: Dictionary value of created sales order. :rtype: dict

New fields (2)
  • is_controlled Boolean
    help='Check this if the medicament is a controlled substance' string='Controlled Substance'
  • is_prescription Boolean
    help='Check this if a prescription is required for this medicament' string='Prescription Required'
Public methods (0)

No public methods.

New fields (3)
  • receive_date Datetime
    default=fields.Datetime.now help='When the Rx was received' string='Receipt Date'
  • receive_method Selection
    default='fax' help='How the Rx was received' string='Receipt Method' args: [('online', 'E-Prescription'), ('phone', 'Phoned In'), ('fax', 'Fax'), ('mail', 'Physical Mail'), ('transfer', 'Transferred In')]
  • verify_method Selection
    default='none' help='Method of Rx verification' args: [('none', 'Not Verified'), ('doctor_phone', 'Called Doctor')]
Public methods (0)

No public methods.

New fields (12)
  • can_dispense Boolean
    compute='_compute_can_dispense_and_qty' default=False help='Can this prescription be dispensed?' readonly=True
  • can_dispense_qty Float
    compute='_compute_can_dispense_and_qty' default=0.0 help='Amount that can be dispensed (using medicine dosage)'
  • cancelled_dispense_qty Float
    compute='_compute_dispensings_and_orders' default=0.0 help='Dispense qty cancelled (using medicine dosage)' readounly=True
  • dispensed_ids One2many → procurement.order
    compute='_compute_dispensings_and_orders' readonly=True args: 'procurement.order'
  • dispensed_qty Float
    compute='_compute_dispensings_and_orders' default=0.0 help='Amount already dispensed (using medicine dosage)' readonly=True
  • exception_dispense_qty Float
    compute='_compute_dispensings_and_orders' default=0.0 help='Qty of dispense exceptions (using medicine dosage)' readounly=True
  • pending_dispense_qty Float
    compute='_compute_dispensings_and_orders' default=0.0 help='Amount pending dispense (using medicine dosage)' readounly=True
  • receive_date Datetime
    default=fields.Datetime.now help='When the Rx was received' string='Receipt Date'
  • receive_method Selection
    default='fax' help='How the Rx was received' string='Receipt Method' args: [('online', 'E-Prescription'), ('phone', 'Phoned In'), ('fax', 'Fax'), ('mail', 'Physical Mail'), ('transfer', 'Transferred In')]
  • sale_order_ids Many2many → sale.order
    comodel_name='sale.order' compute='_compute_dispensings_and_orders' readonly=True
  • sale_order_line_ids One2many → sale.order.line
    comodel_name='sale.order.line' inverse_name='prescription_order_line_id' readonly=True
  • verify_method Selection
    default='none' help='Method of Rx verification' args: [('none', 'Not Verified'), ('doctor_phone', 'Called Doctor')]
Public methods (0)

No public methods.

New fields (8)
  • order_id Many2one → medical.sale.wizard
    comodel_name='medical.sale.wizard' readonly=True required=True string='Order'
  • prescription_order_line_id Many2one → medical.prescription.order.line
    comodel_name='medical.prescription.order.line' string='Prescription Line'
  • price_subtotal Float
    compute='_compute_all_amounts' digits_compute=dp.get_precision('Account') required=True
  • price_unit Float
    digits_compute=dp.get_precision('Product Price') required=True args: 'Unit Price'
  • product_id Many2one → product.product
    comodel_name='product.product' string='Product'
  • product_uom Many2one → product.uom
    comodel_name='product.uom' string='Unit of Measure'
  • product_uom_qty Float
    digits_compute=dp.get_precision('Product UoM') required=True args: 'Quantity'
  • sequence Integer
Public methods (0)

No public methods.

New fields (24)
  • amount_untaxed Float
    compute='_compute_all_amounts' digits_compute=dp.get_precision('Account')
  • client_order_ref Char
    string='Order Reference'
  • company_id Many2one → res.company
    comodel_name='res.company' required=True string='Company'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' string='Currency'
  • date_order Date
    string='Order Date'
  • fiscal_position Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' string='Fiscal Position'
  • line_cnt Integer
    compute='_compute_line_cnt' string='Order Line Count'
  • note Text
  • order_line One2many → medical.sale.line.wizard
    comodel_name='medical.sale.line.wizard' inverse_name='order_id' required=True string='Order Lines'
  • origin Char
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Customer'
  • partner_invoice_id Many2one → res.partner
    comodel_name='res.partner' string='Invoice Partner'
  • partner_shipping_id Many2one → res.partner
    comodel_name='res.partner' string='Ship To'
  • patient_id Many2one → medical.patient
    comodel_name='medical.patient' help='Patient (used for defaults when creating sale lines)' required=True string='Patient'
  • payment_term Many2one → account.payment.term
    comodel_name='account.payment.term' string='Payment Term'
  • pharmacy_id Many2one → medical.pharmacy
    comodel_name='medical.pharmacy' required=True string='Pharmacy'
  • prescription_order_id Many2one → medical.prescription.order
    comodel_name='medical.prescription.order' readonly=True required=True string='Prescription'
  • prescription_wizard_id Many2one → medical.rx.sale.wizard
    comodel_name='medical.rx.sale.wizard' default=_compute_default_session inverse_name='sale_wizard_ids' readonly=True
  • pricelist_id Many2one → product.pricelist
    comodel_name='product.pricelist' required=True string='Pricelist'
  • project_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' string='Project'
  • section_id Many2one → crm.case.section
    comodel_name='crm.case.section' string='Sales Team'
  • state Selection
    default='new' readonly=True args: [('new', _('Not Started')), ('start', _('Started')), ('done', _('Completed'))]
  • user_id Many2one → res.users
    comodel_name='res.users' readonly=True required=True string='Salesperson'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (1)
  • next_wizard(self)
    @api.multi

New fields (7)
  • date_order Datetime
    default=fields.Datetime.now help=_('Date for the new orders') required=True
  • pharmacy_id Many2one → medical.pharmacy
    comodel_name='medical.pharmacy' help=_('Pharmacy to dispense orders from') required=True string='Pharmacy'
  • prescription_line_ids Many2many → medical.prescription.order.line
    comodel_name='medical.prescription.order.line' default=_compute_default_session readonly=True required=True string='Prescription'
  • sale_wizard_ids One2many → medical.sale.wizard
    comodel_name='medical.sale.wizard' help=_('Orders to create when wizard is completed') inverse_name='prescription_wizard_id' string='Orders'
  • split_orders Selection
    default='patient' help=_('How to split the new orders') required=True args: [('partner', 'By Customer'), ('patient', 'By Patient'), ('all', 'By Rx Line')]
  • state Selection
    default='new' readonly=True args: [('new', _('Not Started')), ('start', _('Started')), ('partial', _('Open')), ('done', _('Completed'))]
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (3)
  • create_sale_wizards(self)
    @api.multi
  • do_rx_sale_conversions(self)
    @api.multi
  • next_wizard(self)
    @api.model

New fields (4)
  • patient_ids Many2many → medical.patient
    comodel_name='medical.patient' compute='_compute_patient_ids' readonly=True string='Patients'
  • pharmacy_id Many2one → medical.pharmacy
    comodel_name='medical.pharmacy' string='Pharmacy'
  • prescription_order_ids Many2many → medical.prescription.order
    comodel_name='medical.prescription.order' compute='_compute_prescription_order_ids' readonly=True string='Prescriptions'
  • prescription_order_line_ids Many2many → medical.prescription.order.line
    comodel_name='medical.prescription.order.line' compute='_compute_prescription_order_ids' readonly=True string='Prescription Lines'
Public methods (0)

No public methods.

New fields (4)
  • dispense_qty Float
    compute='_compute_dispense_qty' default=0.0 readonly=True
  • medication_id Many2one → medical.patient.medication
    comodel_name='medical.patient.medication' related='prescription_order_line_id.medical_medication_id' string='Medication'
  • patient_id Many2one → medical.patient
    comodel_name='medical.patient' related='prescription_order_line_id.patient_id' string='Patient'
  • prescription_order_line_id Many2one → medical.prescription.order.line
    comodel_name='medical.prescription.order.line' string='Prescription Line'
Public methods (0)

No public methods.