Initial commit: Odoomates Odoo packages (12 packages)
49
odoo-bringout-odoomates-om_hospital/README.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
# Odoo 16 Development Tutorials
|
||||
|
||||
Odoo 16 Development Tutorials
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-odoomates-om_hospital
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
This addon depends on:
|
||||
- sale
|
||||
- mail
|
||||
- website_slides
|
||||
- hr
|
||||
|
||||
## Manifest Information
|
||||
|
||||
- **Name**: Odoo 16 Development Tutorials
|
||||
- **Version**: 2.0.0
|
||||
- **Category**: Tutorials
|
||||
- **License**: AGPL-3
|
||||
- **Installable**: True
|
||||
|
||||
## Source
|
||||
|
||||
Custom addon from bringout-odoomates vendor, addon `om_hospital`.
|
||||
|
||||
## License
|
||||
|
||||
This package maintains the original AGPL-3 license from the addon.
|
||||
|
||||
## Documentation
|
||||
|
||||
- Overview: doc/OVERVIEW.md
|
||||
- Architecture: doc/ARCHITECTURE.md
|
||||
- Models: doc/MODELS.md
|
||||
- Controllers: doc/CONTROLLERS.md
|
||||
- Wizards: doc/WIZARDS.md
|
||||
- Reports: doc/REPORTS.md
|
||||
- Security: doc/SECURITY.md
|
||||
- Install: doc/INSTALL.md
|
||||
- Usage: doc/USAGE.md
|
||||
- Configuration: doc/CONFIGURATION.md
|
||||
- Dependencies: doc/DEPENDENCIES.md
|
||||
- Troubleshooting: doc/TROUBLESHOOTING.md
|
||||
- FAQ: doc/FAQ.md
|
||||
32
odoo-bringout-odoomates-om_hospital/doc/ARCHITECTURE.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
U[Users] -->|HTTP| V[Views and QWeb Templates]
|
||||
V --> C[Controllers]
|
||||
V --> W[Wizards – Transient Models]
|
||||
C --> M[Models and ORM]
|
||||
W --> M
|
||||
M --> R[Reports]
|
||||
DX[Data XML] --> M
|
||||
S[Security – ACLs and Groups] -. enforces .-> M
|
||||
|
||||
subgraph Om_hospital Module - om_hospital
|
||||
direction LR
|
||||
M:::layer
|
||||
W:::layer
|
||||
C:::layer
|
||||
V:::layer
|
||||
R:::layer
|
||||
S:::layer
|
||||
DX:::layer
|
||||
end
|
||||
|
||||
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
|
||||
```
|
||||
|
||||
Notes
|
||||
- Views include tree/form/kanban templates and report templates.
|
||||
- Controllers provide website/portal routes when present.
|
||||
- Wizards are UI flows implemented with `models.TransientModel`.
|
||||
- Data XML loads data/demo records; Security defines groups and access.
|
||||
3
odoo-bringout-odoomates-om_hospital/doc/CONFIGURATION.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# Configuration
|
||||
|
||||
Refer to Odoo settings for om_hospital. Configure related models, access rights, and options as needed.
|
||||
3
odoo-bringout-odoomates-om_hospital/doc/CONTROLLERS.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# Controllers
|
||||
|
||||
This module does not define custom HTTP controllers.
|
||||
8
odoo-bringout-odoomates-om_hospital/doc/DEPENDENCIES.md
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# Dependencies
|
||||
|
||||
This addon depends on:
|
||||
|
||||
- [sale](../../odoo-bringout-oca-ocb-sale)
|
||||
- [mail](../../odoo-bringout-oca-ocb-mail)
|
||||
- [website_slides](../../odoo-bringout-oca-ocb-website_slides)
|
||||
- [hr](../../odoo-bringout-oca-ocb-hr)
|
||||
4
odoo-bringout-odoomates-om_hospital/doc/FAQ.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# FAQ
|
||||
|
||||
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
|
||||
- Q: How to enable? A: Start server with --addon om_hospital or install in UI.
|
||||
7
odoo-bringout-odoomates-om_hospital/doc/INSTALL.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# Install
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-odoomates-om_hospital"
|
||||
# or
|
||||
uv pip install odoo-bringout-odoomates-om_hospital"
|
||||
```
|
||||
16
odoo-bringout-odoomates-om_hospital/doc/MODELS.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# Models
|
||||
|
||||
Detected core models and extensions in om_hospital.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class appointment_prescription_lines
|
||||
class hospital_appointment
|
||||
class hospital_doctor
|
||||
class hospital_patient
|
||||
class sale_order
|
||||
```
|
||||
|
||||
Notes
|
||||
- Classes show model technical names; fields omitted for brevity.
|
||||
- Items listed under _inherit are extensions of existing models.
|
||||
6
odoo-bringout-odoomates-om_hospital/doc/OVERVIEW.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
# Overview
|
||||
|
||||
Packaged Odoo addon: om_hospital. Provides features documented in upstream Odoo 16 under this addon.
|
||||
|
||||
- Source: OCA/OCB 16.0, addon om_hospital
|
||||
- License: LGPL-3
|
||||
31
odoo-bringout-odoomates-om_hospital/doc/REPORTS.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Reports
|
||||
|
||||
Report definitions and templates in om_hospital.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class PatientCardXlsx
|
||||
AbstractModel <|-- PatientCardXlsx
|
||||
```
|
||||
|
||||
## Available Reports
|
||||
|
||||
### PDF/Document Reports
|
||||
- **Patient Details** (PDF/Print)
|
||||
- **Patient Card** (PDF/Print)
|
||||
- **Patient Card Excel** (PDF/Print)
|
||||
|
||||
|
||||
## Report Files
|
||||
|
||||
- **__init__.py** (Python logic)
|
||||
- **patient_card_xls.py** (Python logic)
|
||||
- **patient_card.xml** (XML template/definition)
|
||||
- **patient_details_template.xml** (XML template/definition)
|
||||
- **report.xml** (XML template/definition)
|
||||
|
||||
## Notes
|
||||
- Named reports above are accessible through Odoo's reporting menu
|
||||
- Python files define report logic and data processing
|
||||
- XML files contain report templates, definitions, and formatting
|
||||
- Reports are integrated with Odoo's printing and email systems
|
||||
34
odoo-bringout-odoomates-om_hospital/doc/SECURITY.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Security
|
||||
|
||||
Access control and security definitions in om_hospital.
|
||||
|
||||
## Access Control Lists (ACLs)
|
||||
|
||||
Model access permissions defined in:
|
||||
- **[ir.model.access.csv](../om_hospital/security/ir.model.access.csv)**
|
||||
- 6 model access rules
|
||||
|
||||
## Record Rules
|
||||
|
||||
Row-level security rules defined in:
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "Security Layers"
|
||||
A[Users] --> B[Groups]
|
||||
B --> C[Access Control Lists]
|
||||
C --> D[Models]
|
||||
B --> E[Record Rules]
|
||||
E --> F[Individual Records]
|
||||
end
|
||||
```
|
||||
|
||||
Security files overview:
|
||||
- **[ir.model.access.csv](../om_hospital/security/ir.model.access.csv)**
|
||||
- Model access permissions (CRUD rights)
|
||||
|
||||
Notes
|
||||
- Access Control Lists define which groups can access which models
|
||||
- Record Rules provide row-level security (filter records by user/group)
|
||||
- Security groups organize users and define permission sets
|
||||
- All security is enforced at the ORM level by Odoo
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Troubleshooting
|
||||
|
||||
- Ensure Python and Odoo environment matches repo guidance.
|
||||
- Check database connectivity and logs if startup fails.
|
||||
- Validate that dependent addons listed in DEPENDENCIES.md are installed.
|
||||
7
odoo-bringout-odoomates-om_hospital/doc/USAGE.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# Usage
|
||||
|
||||
Start Odoo including this addon (from repo root):
|
||||
|
||||
```bash
|
||||
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon om_hospital
|
||||
```
|
||||
9
odoo-bringout-odoomates-om_hospital/doc/WIZARDS.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# Wizards
|
||||
|
||||
Transient models exposed as UI wizards in om_hospital.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class CreateAppointmentWizard
|
||||
class SearchAppointmentWizard
|
||||
```
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
from . import wizard
|
||||
from . import models
|
||||
from . import report
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': 'Odoo 16 Development Tutorials',
|
||||
'version': '2.0.0',
|
||||
'summary': 'Odoo 16 Development Tutorials',
|
||||
'sequence': -100,
|
||||
'description': """Odoo 16 Development Tutorials""",
|
||||
'category': 'Tutorials',
|
||||
'author': 'Odoo Mates',
|
||||
'maintainer': 'Odoo Mates',
|
||||
'website': 'https://www.odoomates.tech',
|
||||
'license': 'AGPL-3',
|
||||
'depends': [
|
||||
'sale',
|
||||
'mail',
|
||||
'website_slides',
|
||||
'hr',
|
||||
],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'data/data.xml',
|
||||
# 'data/slide_data_v12.xml',
|
||||
# 'data/slide_data_v13.xml',
|
||||
# 'data/slide_data_v14.xml',
|
||||
# 'data/slide_data_v15.xml',
|
||||
'wizard/create_appointment_view.xml',
|
||||
'wizard/search_appointment_view.xml',
|
||||
'views/patient_view.xml',
|
||||
'views/doctor_view.xml',
|
||||
'views/appointment_view.xml',
|
||||
'views/kids_view.xml',
|
||||
'views/patient_gender_view.xml',
|
||||
'views/sale.xml',
|
||||
'report/patient_details_template.xml',
|
||||
'report/patient_card.xml',
|
||||
'report/report.xml'
|
||||
],
|
||||
'demo': [],
|
||||
'live_test_url': 'https://www.youtube.com/watch?v=IeJFxmCG2Qs&list=PLqRRLx0cl0hpu9zH6o8gq6ORBoW5xMtA-&index=3',
|
||||
'images': ['static/description/banner.gif'],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
'auto_install': False,
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<!-- Sequences for hospital.patient -->
|
||||
<record id="seq_hopital_patient" model="ir.sequence">
|
||||
<field name="name">Patient Sequence</field>
|
||||
<field name="code">hospital.patient</field>
|
||||
<field name="prefix">HP</field>
|
||||
<field name="padding">5</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="seq_hopital_appointment" model="ir.sequence">
|
||||
<field name="name">Appointment Sequence</field>
|
||||
<field name="code">hospital.appointment</field>
|
||||
<field name="prefix">OT</field>
|
||||
<field name="padding">5</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,774 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="slide_odoo_12_development" model="slide.channel">
|
||||
<field name="name">Odoo 12 Development</field>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="enroll">public</field>
|
||||
<field name="channel_type">training</field>
|
||||
<field name="allow_comment" eval="True"/>
|
||||
<field name="promote_strategy">latest</field>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="image_1920" type="base64" file="om_hospital/static/src/img/odoo12_development.png"/>
|
||||
<field name="description">Learn How to Customize the Odoo ERP and Create New Modules.</field>
|
||||
<field name="create_date" eval="DateTime.now() - relativedelta(days=7)"/>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_1" model="slide.slide">
|
||||
<field name="name">Configure Odoo With Pycharm</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=p7SJW36lqVE</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">Steps to configure odoo development environment using pycharm IDE</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_2" model="slide.slide">
|
||||
<field name="name">Add Custom Modules And Custom Addons Path</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=DJyPx5u6sd0</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_3" model="slide.slide">
|
||||
<field name="name">Create Custom Module</field>
|
||||
<field name="sequence">3</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=BDepk0LhVuI</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_4" model="slide.slide">
|
||||
<field name="name">Create New Models</field>
|
||||
<field name="sequence">4</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=L6MxDR71_1k</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_5" model="slide.slide">
|
||||
<field name="name">Define New Menu and Actions</field>
|
||||
<field name="sequence">5</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=Tdg4YQowXyI</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_6" model="slide.slide">
|
||||
<field name="name">Define Tree and Form View</field>
|
||||
<field name="sequence">6</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=3JMEroi4DIk</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_7" model="slide.slide">
|
||||
<field name="name">Set Access Rights For Models</field>
|
||||
<field name="sequence">7</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=W5ya521uTlo</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_8" model="slide.slide">
|
||||
<field name="name">Rec name for Models</field>
|
||||
<field name="sequence">8</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=d_cyPsVc7vg</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_9" model="slide.slide">
|
||||
<field name="name">Add Chatter to Form View</field>
|
||||
<field name="sequence">9</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=5rI00Y1Gw7Y</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_10" model="slide.slide">
|
||||
<field name="name">Add New Sequence</field>
|
||||
<field name="sequence">10</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=ZfKzmfiqeg0</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_11" model="slide.slide">
|
||||
<field name="name">Inherit And Add Field to Existing Views</field>
|
||||
<field name="sequence">11</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=z1Tx7EGkPy0</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_12" model="slide.slide">
|
||||
<field name="name">Define Search View</field>
|
||||
<field name="sequence">12</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=hKigPT7GF7E</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_13" model="slide.slide">
|
||||
<field name="name">Compute Field and its Function</field>
|
||||
<field name="sequence">13</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=Mg80GxrKDOc</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_14" model="slide.slide">
|
||||
<field name="name">Track Field Value Changes</field>
|
||||
<field name="sequence">14</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=7lFvNCIZzkg</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_15" model="slide.slide">
|
||||
<field name="name">Set Default Filter For View</field>
|
||||
<field name="sequence">15</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=Q1i0vFXxGOE</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_16" model="slide.slide">
|
||||
<field name="name">How to Add Chatter to Form View in Odoo12</field>
|
||||
<field name="sequence">16</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=5rI00Y1Gw7Y</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_17" model="slide.slide">
|
||||
<field name="name">Add Constrains For A Field</field>
|
||||
<field name="sequence">17</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=ijS-N1CdiWU</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="slide_slide_odoo_12_development_18" model="slide.slide">
|
||||
<field name="name">Odoo Module Structure</field>
|
||||
<field name="sequence">18</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=EAbhAjAI2hA</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="slide_slide_odoo_12_development_19" model="slide.slide">
|
||||
<field name="name">Related Fields</field>
|
||||
<field name="sequence">19</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=pD6byjEvIx8</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="slide_slide_odoo_12_development_20" model="slide.slide">
|
||||
<field name="name">Set Order Of Records </field>
|
||||
<field name="sequence">20</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=zZRxO23NLDo</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_21" model="slide.slide">
|
||||
<field name="name">Set Default Value For The Field</field>
|
||||
<field name="sequence">21</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=fL_Jv1vmSSM</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_22" model="slide.slide">
|
||||
<field name="name">Add Smart Buttons(type object)</field>
|
||||
<field name="sequence">22</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=I93Lr-bprIc</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_23" model="slide.slide">
|
||||
<field name="name">Smart Button(type action)</field>
|
||||
<field name="sequence">23</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=NfYt028J8rA</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_24" model="slide.slide">
|
||||
<field name="name">Add States/Statusbar for Records</field>
|
||||
<field name="sequence">24</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=lPHWsw3Iclk</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_25" model="slide.slide">
|
||||
<field name="name">Control States and Statusbar Using Buttons - Workflow</field>
|
||||
<field name="sequence">25</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=3PA7XAky8mA</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_26" model="slide.slide">
|
||||
<field name="name">Create PDF Report - Part 1</field>
|
||||
<field name="sequence">26</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=SkKAXURqNfQ</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_27" model="slide.slide">
|
||||
<field name="name">Create PDF Report - Part 2</field>
|
||||
<field name="sequence">27</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=qAv5GAmIryI</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_28" model="slide.slide">
|
||||
<field name="name">Add Notebooks And Pages in Odoo Form View</field>
|
||||
<field name="sequence">28</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=gT96GevMEWU</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_29" model="slide.slide">
|
||||
<field name="name">Override Create Function</field>
|
||||
<field name="sequence">29</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=AS08H3G9x1U</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="slide_slide_odoo_12_development_9" model="slide.slide">
|
||||
<field name="name">Difference Between Demo and Data File</field>
|
||||
<field name="sequence">31</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=pguBgOA9vtM</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_32" model="slide.slide">
|
||||
<field name="name">Remove Report From Print Menu in Odoo</field>
|
||||
<field name="sequence">32</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=ktDKoq9bvaI</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_33" model="slide.slide">
|
||||
<field name="name">Create Data Files and Load Default Data</field>
|
||||
<field name="sequence">33</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=ZyABTIDll0U</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_34" model="slide.slide">
|
||||
<field name="name">Button Types in Odoo</field>
|
||||
<field name="sequence">34</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=_aCRtK0xOpQ</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_35" model="slide.slide">
|
||||
<field name="name">Add Archive Button In Odoo</field>
|
||||
<field name="sequence">35</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=JuEZgM_q1LI</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_36" model="slide.slide">
|
||||
<field name="name">Record Rules</field>
|
||||
<field name="sequence">36</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=p8gj1dEfYUM</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_37" model="slide.slide">
|
||||
<field name="name">Add One2many Fields</field>
|
||||
<field name="sequence">37</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=_O_tNBdg3HQ</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_38" model="slide.slide">
|
||||
<field name="name">Remove Create and Edit Option From Many2one Field</field>
|
||||
<field name="sequence">38</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=AEc2C3WZc54</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_39" model="slide.slide">
|
||||
<field name="name">Create a Wizard and Call it in Button Click</field>
|
||||
<field name="sequence">39</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=K60oF3-vaxA</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_40" model="slide.slide">
|
||||
<field name="name">Call Wizard From Menu Item Odoo</field>
|
||||
<field name="sequence">40</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=qpkVKy9JzEw</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_41" model="slide.slide">
|
||||
<field name="name">Set Default Value Using Context</field>
|
||||
<field name="sequence">41</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=XEs_01mDsCw</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_42" model="slide.slide">
|
||||
<field name="name">Onchange Functions</field>
|
||||
<field name="sequence">42</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=qyRhjyp1MeE</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_43" model="slide.slide">
|
||||
<field name="name">Create Record From Code</field>
|
||||
<field name="sequence">43</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=Jssb15ADeyg</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_44" model="slide.slide">
|
||||
<field name="name">Name Get Function</field>
|
||||
<field name="sequence">44</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=-1r3WSwtqxQ</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_45" model="slide.slide">
|
||||
<field name="name">Add New Action to Action Button</field>
|
||||
<field name="sequence">45</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=yGKYPtAeP7k</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_46" model="slide.slide">
|
||||
<field name="name">Create Email Template</field>
|
||||
<field name="sequence">46</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=rGfGHRS3iWw</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_47" model="slide.slide">
|
||||
<field name="name">Send Email From Code Using Email Template</field>
|
||||
<field name="sequence">47</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=CZVRmtv6re0</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_49" model="slide.slide">
|
||||
<field name="name">Create Excel/XLS Report</field>
|
||||
<field name="sequence">49</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=cCyMy2kxxZs</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_51" model="slide.slide">
|
||||
<field name="name">Message Post Function</field>
|
||||
<field name="sequence">51</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=J3MvgwHnR0A</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_52" model="slide.slide">
|
||||
<field name="name">Get Data From Database Tables</field>
|
||||
<field name="sequence">52</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=hUPSvL8GTQE</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_53" model="slide.slide">
|
||||
<field name="name">Override Write Function</field>
|
||||
<field name="sequence">53</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=v8sXFUi1SH4</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_54" model="slide.slide">
|
||||
<field name="name">Add Barcode To Report</field>
|
||||
<field name="sequence">54</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=bwT_ZtKWn9E</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_55" model="slide.slide">
|
||||
<field name="name">Create Scheduled Actions</field>
|
||||
<field name="sequence">55</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=_P_AVSNr6uU</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_56" model="slide.slide">
|
||||
<field name="name">Security in Odoo - Access Control, Record Rules and Group</field>
|
||||
<field name="sequence">56</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=mzg3EGD_6Gw</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_57" model="slide.slide">
|
||||
<field name="name">Show Field Only In Developer Mode</field>
|
||||
<field name="sequence">57</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=ibxbMDWMtBk</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_58" model="slide.slide">
|
||||
<field name="name">Upgrade Module From Terminal</field>
|
||||
<field name="sequence">58</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=ErzOia_A21w</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_59" model="slide.slide">
|
||||
<field name="name">Record Data To Backend Models From Website Form</field>
|
||||
<field name="sequence">59</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=8uYxWRlxL_U</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_60" model="slide.slide">
|
||||
<field name="name">Inherit And Modify Existing PDF Reports</field>
|
||||
<field name="sequence">60</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=l2tvrpfOR1E</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_62" model="slide.slide">
|
||||
<field name="name">Delete One2many Lines From Code </field>
|
||||
<field name="sequence">62</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=2pOIxhE_xuY</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_63" model="slide.slide">
|
||||
<field name="name">Migrate Odoo Modules To Another Version</field>
|
||||
<field name="sequence">63</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=IH9bQKrVLrU</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_64" model="slide.slide">
|
||||
<field name="name">Call A Python Function While Printing PDF Report</field>
|
||||
<field name="sequence">64</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=JGWc1KjyIBk</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_67" model="slide.slide">
|
||||
<field name="name">Give Domain For A Field Based On Another Field</field>
|
||||
<field name="sequence">67</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=IpXXYCsK2ow</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_68" model="slide.slide">
|
||||
<field name="name">Convert Datetime To Users TimeZone</field>
|
||||
<field name="sequence">68</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=ZxrDGTEU7B8</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_71" model="slide.slide">
|
||||
<field name="name">Delete Record From Code</field>
|
||||
<field name="sequence">71</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=Ra4t9qzj9h4</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_72" model="slide.slide">
|
||||
<field name="name">Default Get Function: Set Default Values For Fields</field>
|
||||
<field name="sequence">72</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=14mc1fIbVuU</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_76" model="slide.slide">
|
||||
<field name="name">How to Write Controllers And Render WebPage</field>
|
||||
<field name="sequence">76</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=udqdjmUN_2c</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_77" model="slide.slide">
|
||||
<field name="name">Write Controllers And Render WebPage Using Controllers</field>
|
||||
<field name="sequence">77</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=1zy4kswo6gY</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="slide_slide_odoo_12_development_80" model="slide.slide">
|
||||
<field name="name">Add Settings/Configuration For Module</field>
|
||||
<field name="sequence">80</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=MsVoYPQ4-J4</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_12_development_81" model="slide.slide">
|
||||
<field name="name">Mobile App Development - Authentication, Fetching Data and Creating Records Using Controller</field>
|
||||
<field name="sequence">81</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=wGvuRbCyytk</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_12_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="slide_odoo_13_development" model="slide.channel">
|
||||
<field name="name">Odoo 13 Developement</field>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="enroll">public</field>
|
||||
<field name="channel_type">training</field>
|
||||
<field name="allow_comment" eval="True"/>
|
||||
<field name="promote_strategy">latest</field>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="image_1920" type="base64" file="om_hospital/static/src/img/odoo13_development.png"/>
|
||||
<field name="description">Learn How to Customize the Odoo ERP and Create New Modules.</field>
|
||||
<field name="create_date" eval="DateTime.now() - relativedelta(days=7)"/>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_1" model="slide.slide">
|
||||
<field name="name">How To Configure Odoo With Pycharm</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=p7SJW36lqVE</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">Steps to configure odoo development environment using pycharm IDE</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_2" model="slide.slide">
|
||||
<field name="name">How To Create A New Module in Odoo13</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=0PDqeUG3azo</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">Steps to create a module from scratch in Odoo 13</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_3" model="slide.slide">
|
||||
<field name="name">How To Add SearchPanel in Odoo13</field>
|
||||
<field name="sequence">3</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=SO9MuESqB6c</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">Steps to add search view in odoo13</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_4" model="slide.slide">
|
||||
<field name="name">How To Add Archive Unarchive Option in Odoo13</field>
|
||||
<field name="sequence">4</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=pHkAZu9BMPQ</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">Steps to archive/unarchive button</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_5" model="slide.slide">
|
||||
<field name="name">Configure Odoo Template in Pycharm And Save Development Time</field>
|
||||
<field name="sequence">5</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=1f6QOvf_8lc</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">Steps to configure odoo pycharm template</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_6" model="slide.slide">
|
||||
<field name="name">How To Make Dynamic Tree View in Odoo13</field>
|
||||
<field name="sequence">6</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=UfWNwupq2CE</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">Steps to create dynamic tree view</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_7" model="slide.slide">
|
||||
<field name="name">How To Make Dynamic Tree View in Odoo13</field>
|
||||
<field name="sequence">7</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=Ex94lsvgO8w</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">How To Preview Videos In Odoo13 Form View Using New Widget</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_8" model="slide.slide">
|
||||
<field name="name">How To Use Daterange Widget in Odoo13 to Select Multiple Dates</field>
|
||||
<field name="sequence">8</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=vZOLRvecws0</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">How To Use Daterange Widget in Odoo13 to Select Multiple Dates</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_8" model="slide.slide">
|
||||
<field name="name">How To Use Daterange Widget in Odoo13 to Select Multiple Dates</field>
|
||||
<field name="sequence">8</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=vZOLRvecws0</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">How To Use Daterange Widget in Odoo13 to Select Multiple Dates</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_13_development_9" model="slide.slide">
|
||||
<field name="name">How To Debug Odoo Using Pycharm Debugger</field>
|
||||
<field name="sequence">9</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=r4VWfuD0rDA</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_13_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">How To Debug Odoo Using Pycharm Debugger</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="slide_odoo_14_development" model="slide.channel">
|
||||
<field name="name">Odoo 14 Developement</field>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="enroll">public</field>
|
||||
<field name="channel_type">training</field>
|
||||
<field name="allow_comment" eval="True"/>
|
||||
<field name="promote_strategy">latest</field>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="image_1920" type="base64" file="om_hospital/static/src/img/odoo14_development.png"/>
|
||||
<field name="description">Learn How to Customize the Odoo ERP and Create New Modules.</field>
|
||||
<field name="create_date" eval="DateTime.now() - relativedelta(days=7)"/>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_14_development_1" model="slide.slide">
|
||||
<field name="name">How To Configure Odoo With Pycharm</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=p7SJW36lqVE</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_14_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">Steps to configure odoo development environment using pycharm IDE</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_14_development_2" model="slide.slide">
|
||||
<field name="name">How To Add Custom Modules And Custom Addons Path In Odoo14</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=DJyPx5u6sd0</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_14_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_14_development_3" model="slide.slide">
|
||||
<field name="name">How To Create Module In Odoo 14</field>
|
||||
<field name="sequence">3</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=I8FNdellz3Y</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_14_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_14_development_4" model="slide.slide">
|
||||
<field name="name">How To Create New Models In Odoo 14</field>
|
||||
<field name="sequence">4</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=m7AZtSLv-wk</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_14_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_14_development_5" model="slide.slide">
|
||||
<field name="name">How To Set Access Rights For Newly Created Models In Odoo14</field>
|
||||
<field name="sequence">5</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=XcVMcJYHuzc</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_14_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_14_development_6" model="slide.slide">
|
||||
<field name="name">How To Create Menu And Actions In Odoo14</field>
|
||||
<field name="sequence">6</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=KFXoeEzwxzQ</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_14_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_14_development_7" model="slide.slide">
|
||||
<field name="name">How To Create Form View In Odoo</field>
|
||||
<field name="sequence">7</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=v0Qn-HKtir8</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_14_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_14_development_8" model="slide.slide">
|
||||
<field name="name">How To Create Tree View in Odoo</field>
|
||||
<field name="sequence">8</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=7hc3WxxWqKs</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_14_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_14_development_9" model="slide.slide">
|
||||
<field name="name">How To Inherit And Add New Fields To Existing Views</field>
|
||||
<field name="sequence">9</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=3iY3ea-wvjw</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_14_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="slide_odoo_15_development" model="slide.channel">
|
||||
<field name="name">Odoo 15 Developement</field>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="enroll">public</field>
|
||||
<field name="channel_type">training</field>
|
||||
<field name="allow_comment" eval="True"/>
|
||||
<field name="promote_strategy">latest</field>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="image_1920" type="base64" file="om_hospital/static/src/img/odoo15_development.png"/>
|
||||
<field name="description">Learn How to Customize the Odoo ERP and Create New Modules.</field>
|
||||
<field name="create_date" eval="DateTime.now() - relativedelta(days=7)"/>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_0" model="slide.slide">
|
||||
<field name="name">Introduction</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="slide_type">webpage</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">For odoo 15, we have added the videos we have recorded for odoo
|
||||
version 15. You can watch and follow this in odoo 15 and it will work without any problems.
|
||||
For any issues: odoomates@gmail.com
|
||||
Changes in Odoo 15: https://github.com/OCA/maintainer-tools/wiki/Migration-to-version-15.0
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_1" model="slide.slide">
|
||||
<field name="name">How To Configure Odoo With Pycharm</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=DKxwcMxV02U</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
<field name="description">Steps to configure odoo development environment using pycharm IDE</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_2" model="slide.slide">
|
||||
<field name="name">How To Add Custom Modules And Custom Addons Path In Odoo15</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=DJyPx5u6sd0</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_3" model="slide.slide">
|
||||
<field name="name">How To Create Module In Odoo 15</field>
|
||||
<field name="sequence">3</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=I8FNdellz3Y</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_4" model="slide.slide">
|
||||
<field name="name">How To Create New Models In Odoo 15</field>
|
||||
<field name="sequence">4</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=m7AZtSLv-wk</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_5" model="slide.slide">
|
||||
<field name="name">How To Set Access Rights For Newly Created Models In Odoo15</field>
|
||||
<field name="sequence">5</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=XcVMcJYHuzc</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_6" model="slide.slide">
|
||||
<field name="name">How To Create Menu And Actions In Odoo15</field>
|
||||
<field name="sequence">6</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=KFXoeEzwxzQ</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_7" model="slide.slide">
|
||||
<field name="name">How To Create Form View In Odoo</field>
|
||||
<field name="sequence">7</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=v0Qn-HKtir8</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_8" model="slide.slide">
|
||||
<field name="name">How To Create Tree View in Odoo</field>
|
||||
<field name="sequence">8</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=7hc3WxxWqKs</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
|
||||
<record id="slide_slide_odoo_15_development_9" model="slide.slide">
|
||||
<field name="name">How To Inherit And Add New Fields To Existing Views</field>
|
||||
<field name="sequence">9</field>
|
||||
<field name="url">https://www.youtube.com/watch?v=3iY3ea-wvjw</field>
|
||||
<field name="slide_type">video</field>
|
||||
<field name="channel_id" ref="om_hospital.slide_odoo_15_development"/>
|
||||
<field name="is_published" eval="True"/>
|
||||
<field name="is_preview" eval="True"/>
|
||||
<field name="completion_time">1</field>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
from . import patient
|
||||
from . import doctor
|
||||
from . import appointment
|
||||
from . import sale
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HospitalAppointment(models.Model):
|
||||
_name = "hospital.appointment"
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
_description = "Hospital Appointment"
|
||||
_order = "doctor_id,name,age"
|
||||
|
||||
name = fields.Char(string='Order Reference', required=True, copy=False, readonly=True,
|
||||
default=lambda self: _('New'))
|
||||
patient_id = fields.Many2one('hospital.patient', string="Patient", required=True)
|
||||
age = fields.Integer(string='Age', related='patient_id.age', tracking=True, store=True)
|
||||
doctor_id = fields.Many2one('hospital.doctor', string="Doctor", required=True)
|
||||
gender = fields.Selection([
|
||||
('male', 'Male'),
|
||||
('female', 'Female'),
|
||||
('other', 'Other'),
|
||||
], string="Gender")
|
||||
state = fields.Selection([('draft', 'Draft'), ('confirm', 'Confirmed'),
|
||||
('done', 'Done'), ('cancel', 'Cancelled')], default='draft',
|
||||
string="Status", tracking=True)
|
||||
note = fields.Text(string='Description')
|
||||
date_appointment = fields.Date(string="Date")
|
||||
date_checkup = fields.Datetime(string="Check Up Time")
|
||||
prescription = fields.Text(string="Prescription")
|
||||
prescription_line_ids = fields.One2many('appointment.prescription.lines', 'appointment_id',
|
||||
string="Prescription Lines")
|
||||
|
||||
def action_confirm(self):
|
||||
self.state = 'confirm'
|
||||
|
||||
def action_done(self):
|
||||
self.state = 'done'
|
||||
|
||||
def action_draft(self):
|
||||
self.state = 'draft'
|
||||
|
||||
def action_cancel(self):
|
||||
self.state = 'cancel'
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
if vals.get('name', _('New')) == _('New'):
|
||||
vals['name'] = self.env['ir.sequence'].next_by_code('hospital.appointment') or _('New')
|
||||
res = super(HospitalAppointment, self).create(vals)
|
||||
return res
|
||||
|
||||
@api.onchange('patient_id')
|
||||
def onchange_patient_id(self):
|
||||
if self.patient_id:
|
||||
if self.patient_id.gender:
|
||||
self.gender = self.patient_id.gender
|
||||
if self.patient_id.note:
|
||||
self.note = self.patient_id.note
|
||||
else:
|
||||
self.gender = ''
|
||||
self.note = ''
|
||||
|
||||
def unlink(self):
|
||||
if self.state == 'done':
|
||||
raise ValidationError(_("You Cannot Delete %s as it is in Done State" % self.name))
|
||||
return super(HospitalAppointment, self).unlink()
|
||||
|
||||
def action_url(self):
|
||||
return {
|
||||
'type': 'ir.actions.act_url',
|
||||
'target': 'new',
|
||||
'url': 'https://apps.odoo.com/apps/modules/14.0/%s/' % self.prescription,
|
||||
}
|
||||
|
||||
|
||||
class AppointmentPrescriptionLines(models.Model):
|
||||
_name = "appointment.prescription.lines"
|
||||
_description = "Appointment Prescription Lines"
|
||||
|
||||
name = fields.Char(string="Medicine", required=True)
|
||||
qty = fields.Integer(string="Quantity")
|
||||
appointment_id = fields.Many2one('hospital.appointment', string="Appointment")
|
||||
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
|
||||
|
||||
class HospitalDoctor(models.Model):
|
||||
_name = "hospital.doctor"
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
_description = "Hospital Doctor"
|
||||
_rec_name = 'doctor_name'
|
||||
|
||||
doctor_name = fields.Char(string='Name', required=True, tracking=True)
|
||||
age = fields.Integer(string='Age', tracking=True, copy=False)
|
||||
gender = fields.Selection([
|
||||
('male', 'Male'),
|
||||
('female', 'Female'),
|
||||
('other', 'Other'),
|
||||
], required=True, default='male', tracking=True)
|
||||
note = fields.Text(string='Description')
|
||||
image = fields.Binary(string="Patient Image")
|
||||
appointment_count = fields.Integer(string='Appointment Count', compute='_compute_appointment_count')
|
||||
active = fields.Boolean(string="Active", default=True)
|
||||
|
||||
def copy(self, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
if not default.get('doctor_name'):
|
||||
default['doctor_name'] = _("%s (Copy)", self.doctor_name)
|
||||
default['note'] = "Copied Record"
|
||||
return super(HospitalDoctor, self).copy(default)
|
||||
|
||||
def _compute_appointment_count(self):
|
||||
for rec in self:
|
||||
appointment_count = self.env['hospital.appointment'].search_count([('doctor_id', '=', rec.id)])
|
||||
rec.appointment_count = appointment_count
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class HospitalPatient(models.Model):
|
||||
_name = "hospital.patient"
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
_description = "Hospital Patient"
|
||||
_order = "id desc"
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
res = super(HospitalPatient, self).default_get(fields)
|
||||
res['note'] = 'NEW Patient Created'
|
||||
return res
|
||||
|
||||
name = fields.Char(string='Name', required=True, tracking=True)
|
||||
reference = fields.Char(string='Order Reference', required=True, copy=False, readonly=True,
|
||||
default=lambda self: _('New'))
|
||||
age = fields.Integer(string='Age', tracking=True)
|
||||
gender = fields.Selection([
|
||||
('male', 'Male'),
|
||||
('female', 'Female'),
|
||||
('other', 'Other'),
|
||||
], required=True, default='male', tracking=True)
|
||||
note = fields.Text(string='Description')
|
||||
state = fields.Selection([('draft', 'Draft'), ('confirm', 'Confirmed'),
|
||||
('done', 'Done'), ('cancel', 'Cancelled')], default='draft',
|
||||
string="Status", tracking=True)
|
||||
responsible_id = fields.Many2one('res.partner', string="Responsible")
|
||||
appointment_count = fields.Integer(string='Appointment Count', compute='_compute_appointment_count')
|
||||
image = fields.Binary(string="Patient Image")
|
||||
appointment_ids = fields.One2many('hospital.appointment', 'patient_id', string="Appointments")
|
||||
|
||||
def _compute_appointment_count(self):
|
||||
for rec in self:
|
||||
appointment_count = self.env['hospital.appointment'].search_count([('patient_id', '=', rec.id)])
|
||||
rec.appointment_count = appointment_count
|
||||
|
||||
def action_confirm(self):
|
||||
for rec in self:
|
||||
rec.state = 'confirm'
|
||||
|
||||
def action_done(self):
|
||||
for rec in self:
|
||||
rec.state = 'done'
|
||||
|
||||
def action_draft(self):
|
||||
for rec in self:
|
||||
rec.state = 'draft'
|
||||
|
||||
def action_cancel(self):
|
||||
for rec in self:
|
||||
rec.state = 'cancel'
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
if not vals.get('note'):
|
||||
vals['note'] = 'New Patient'
|
||||
if vals.get('reference', _('New')) == _('New'):
|
||||
vals['reference'] = self.env['ir.sequence'].next_by_code('hospital.patient') or _('New')
|
||||
res = super(HospitalPatient, self).create(vals)
|
||||
return res
|
||||
|
||||
@api.constrains('name')
|
||||
def check_name(self):
|
||||
for rec in self:
|
||||
patients = self.env['hospital.patient'].search([('name', '=', rec.name), ('id', '!=', rec.id)])
|
||||
if patients:
|
||||
raise ValidationError(_("Name %s Already Exists" % rec.name))
|
||||
|
||||
@api.constrains('age')
|
||||
def check_age(self):
|
||||
for rec in self:
|
||||
if rec.age == 0:
|
||||
raise ValidationError(_("Age Cannot Be Zero .. !"))
|
||||
|
||||
def name_get(self):
|
||||
result = []
|
||||
for rec in self:
|
||||
name = '[' + rec.reference + '] ' + rec.name
|
||||
result.append((rec.id, name))
|
||||
return result
|
||||
|
||||
def action_open_appointments(self):
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': 'Appointments',
|
||||
'res_model': 'hospital.appointment',
|
||||
'domain': [('patient_id', '=', self.id)],
|
||||
'context': {'default_patient_id': self.id},
|
||||
'view_mode': 'tree,form',
|
||||
'target': 'current',
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class SaleOrder(models.Model):
|
||||
_inherit = "sale.order"
|
||||
|
||||
sale_description = fields.Char(string='Sale Description')
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# from . import patient_card_xls
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<template id="report_patient_id_card">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-call="web.basic_layout">
|
||||
<div class="page">
|
||||
<div class="oe_structure"/>
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<table class="table table-condensed" style="border: 3px solid black !important;">
|
||||
<tr>
|
||||
<td width="40%">
|
||||
<p style="text-align:center;padding-top:10px;">
|
||||
<img t-if="not o.image"
|
||||
t-att-src="'/web/static/src/img/placeholder.png'" height="140"
|
||||
border="1" width="120"/>
|
||||
<img t-if="o.image"
|
||||
t-att-src="'data:image/png;base64,%s' % to_text(o.image)"
|
||||
height="140" border="1" width="120"/>
|
||||
</p>
|
||||
</td>
|
||||
<td width="60%">
|
||||
<table>
|
||||
<tr>
|
||||
<td colspan="3" class="text-center">
|
||||
<span t-field="o.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<span>
|
||||
<strong>Age:</strong>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span>:</span>
|
||||
</td>
|
||||
<td>
|
||||
<span t-field="o.age"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<span>
|
||||
<strong>Reference:</strong>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span>:</span>
|
||||
</td>
|
||||
<td>
|
||||
<span t-field="o.reference"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import base64
|
||||
import io
|
||||
from odoo import models
|
||||
|
||||
|
||||
class PatientCardXlsx(models.AbstractModel):
|
||||
_name = 'report.om_hospital.report_patient_id_card_xls'
|
||||
_inherit = 'report.report_xlsx.abstract'
|
||||
|
||||
def generate_xlsx_report(self, workbook, data, patients):
|
||||
bold = workbook.add_format({'bold': True})
|
||||
format_1 = workbook.add_format({'bold': True, 'align': 'center', 'bg_color': 'yellow'})
|
||||
|
||||
for obj in patients:
|
||||
sheet = workbook.add_worksheet(obj.name)
|
||||
row = 3
|
||||
col = 3
|
||||
sheet.set_column('D:D', 12)
|
||||
sheet.set_column('E:E', 13)
|
||||
|
||||
row += 1
|
||||
sheet.merge_range(row, col, row, col + 1, 'ID Card', format_1)
|
||||
|
||||
row += 1
|
||||
if obj.image:
|
||||
patient_image = io.BytesIO(base64.b64decode(obj.image))
|
||||
sheet.insert_image(row, col, "image.png", {'image_data': patient_image, 'x_scale': 0.5, 'y_scale': 0.5})
|
||||
|
||||
row += 6
|
||||
sheet.write(row, col, 'Name', bold)
|
||||
sheet.write(row, col + 1, obj.name)
|
||||
row += 1
|
||||
sheet.write(row, col, 'Age', bold)
|
||||
sheet.write(row, col + 1, obj.age)
|
||||
row += 1
|
||||
sheet.write(row, col, 'Reference', bold)
|
||||
sheet.write(row, col + 1, obj.reference)
|
||||
|
||||
row += 2
|
||||
sheet.merge_range(row, col, row + 1, col + 1, '', format_1)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<template id="report_patient_detail">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-call="web.external_layout">
|
||||
<div class="page">
|
||||
<div class="oe_structure"/>
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<table class="table table-condensed" style="border: 3px solid black !important;">
|
||||
<tr>
|
||||
<td width="40%">
|
||||
<p style="text-align:center;padding-top:10px;">
|
||||
<img t-if="not o.image"
|
||||
t-att-src="'/web/static/src/img/placeholder.png'" height="140"
|
||||
border="1" width="120"/>
|
||||
<img t-if="o.image"
|
||||
t-att-src="'data:image/png;base64,%s' % to_text(o.image)"
|
||||
height="140" border="1" width="120"/>
|
||||
</p>
|
||||
</td>
|
||||
<td width="60%">
|
||||
<table>
|
||||
<tr>
|
||||
<td colspan="3" class="text-center">
|
||||
<span t-field="o.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<span>
|
||||
<strong>Age:</strong>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span>:</span>
|
||||
</td>
|
||||
<td>
|
||||
<span t-field="o.age"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<span>
|
||||
<strong>Reference:</strong>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span>:</span>
|
||||
</td>
|
||||
<td>
|
||||
<span t-field="o.reference"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
|
||||
<t t-if="o.appointment_ids">
|
||||
<span>Appointment Details</span>
|
||||
<table class="table table-sm o_main_table" name="appointment">
|
||||
<thead>
|
||||
<tr>
|
||||
<th name="th_reference" class="text-start">
|
||||
<span>Reference</span>
|
||||
</th>
|
||||
<th name="th_age" class="text-start">
|
||||
<span>Age</span>
|
||||
</th>
|
||||
<th name="th_doctor" class="text-start">
|
||||
<span>Doctor</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<t t-set="appointment_count" t-value="0"/>
|
||||
<t t-foreach="o.appointment_ids" t-as="line">
|
||||
<t t-set="appointment_count" t-value="appointment_count + 1"/>
|
||||
<tr>
|
||||
<td>
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
<td>
|
||||
<span t-field="line.age"/>
|
||||
</td>
|
||||
<td>
|
||||
<span t-field="line.doctor_id.doctor_name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<strong>Total Appointments</strong>
|
||||
</td>
|
||||
<td>
|
||||
<t t-esc="appointment_count"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</t>
|
||||
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="report_patient_details" model="ir.actions.report">
|
||||
<field name="name">Patient Details</field>
|
||||
<field name="model">hospital.patient</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">om_hospital.report_patient_detail</field>
|
||||
<field name="report_file">om_hospital.report_patient_detail</field>
|
||||
<field name="binding_model_id" ref="model_hospital_patient"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<record id="report_patient_card" model="ir.actions.report">
|
||||
<field name="name">Patient Card</field>
|
||||
<field name="model">hospital.patient</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">om_hospital.report_patient_id_card</field>
|
||||
<field name="report_file">om_hospital.report_patient_id_card</field>
|
||||
<field name="binding_model_id" ref="model_hospital_patient"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- <record id="report_patient_card_xls" model="ir.actions.report">-->
|
||||
<!-- <field name="name">Patient Card Excel</field>-->
|
||||
<!-- <field name="model">hospital.patient</field>-->
|
||||
<!-- <field name="report_type">xlsx</field>-->
|
||||
<!-- <field name="report_name">om_hospital.report_patient_id_card_xls</field>-->
|
||||
<!-- <field name="report_file">om_hospital.report_patient_id_card_xls</field>-->
|
||||
<!-- <field name="binding_model_id" ref="model_hospital_patient"/>-->
|
||||
<!-- <field name="binding_type">report</field>-->
|
||||
<!-- </record>-->
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hospital_patient,access.hospital.patient,model_hospital_patient,,1,1,1,1
|
||||
access_hospital_doctor,access.hospital.doctor,model_hospital_doctor,,1,1,1,1
|
||||
access_hospital_appointment,access.hospital.appointment,model_hospital_appointment,,1,1,1,1
|
||||
access_create_appointment_wizard,access.create.appointment.wizard,model_create_appointment_wizard,,1,1,1,1
|
||||
access_search_appointment_wizard,access.search.appointment.wizard,model_search_appointment_wizard,,1,1,1,1
|
||||
access_appointment_prescription_lines,access.appointment.prescription.lines,model_appointment_prescription_lines,,1,1,1,1
|
||||
|
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 530 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 161 KiB |
|
After Width: | Height: | Size: 214 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
|
@ -0,0 +1,140 @@
|
|||
<section class="oe_container oe_dark">
|
||||
<div class="col-md-12">
|
||||
<h2 class="oe_slogan" style="font-size: 35px;color:#2C0091"><b>Odoo Development Tutorials</b></h2>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="col-md-12">
|
||||
<h2 class="oe_slogan" style="font-size: 35px;color:#000000"><b>Become a Odoo Developer Easily. Almost all the
|
||||
basic topics covered, Configure Odoo and Pycharm, Create Your First Module. How to Create New Models, Define
|
||||
New Menu, Action and Different Views. Basics of Creating PDF Report and Excel Reports. Statusbar, State and
|
||||
WorkFlows, Wizard etc</b></h2>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_centeralign oe_websiteonly">
|
||||
<h4 class="oe_slogan"><a href="https://www.youtube.com/channel/UCVKlUZP7HAhdQgs-9iTJklQ?sub_confirmation=1" target="_blank" style="color: #FFFFFF !important; border-radius: 0; background-color: #9c676e; border-color: #005ca7; padding: 15px; font-weight: bold;">
|
||||
<i class="fa fa-youtube"></i>
|
||||
Subscribe and Support US
|
||||
</a></h4>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div style="text-align:center;">
|
||||
<p class="fa fa-hand-o-right" style="color:CRIMSON;font-size: 25px;">
|
||||
<span style="color:#2dd280;font-size: 15px;">Development Tutorials in Odoo15, Odoo14, Odoo13 and Odoo12 versions.</span>
|
||||
</p><br/>
|
||||
<p class="fa fa-hand-o-right" style="color:CRIMSON;font-size: 25px;">
|
||||
<span style="color:#2dd280;font-size: 15px;">How to configure odoo and pycharm.</span>
|
||||
</p><br/>
|
||||
<p class="fa fa-hand-o-right" style="color:CRIMSON;font-size: 25px;">
|
||||
<span style="color:#2dd280;font-size: 15px;">Create your First Module.</span>
|
||||
</p><br/>
|
||||
<p class="fa fa-hand-o-right" style="color:CRIMSON;font-size: 25px;">
|
||||
<span style="color:#2dd280;font-size: 15px;">How to Create New Models, Define
|
||||
New Menu, Action and Different Views.</span>
|
||||
</p><br/>
|
||||
<p class="fa fa-hand-o-right" style="color:CRIMSON;font-size: 25px;">
|
||||
<span style="color:#2dd280;font-size: 15px;">Basics of Creating PDF Report and Excel Reports. Statusbar, State and
|
||||
WorkFlows, Wizard etc</span>
|
||||
</p><br/>
|
||||
</div>
|
||||
<br/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h3 class="oe_slogan" style="color:#332c3c;font-size: 28px;">Development Tutorials in Odoo15, Odoo14 , Odoo13 and Odoo12 versions.</h3>
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="om_develop.png" style="height:400px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h3 class="oe_slogan" style="color:#332c3c;font-size: 28px;">Odoo15 Development Courses.</h3>
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="develop_15.png" style="height:400px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h3 class="oe_slogan" style="color:#332c3c;font-size: 28px;">Odoo14 Development Courses.</h3>
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="develop_14.png" style="height:400px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h3 class="oe_slogan" style="color:#332c3c;font-size: 28px;">Odoo13 Development Courses.</h3>
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="develop_13.png" style="height:400px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h3 class="oe_slogan" style="color:#332c3c;font-size: 28px;">Odoo12 Development Courses.</h3>
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="develop_12.png" style="height:400px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<hr style="width: 100%;height: 4px;background: #2C0091;margin: 0px 0px;">
|
||||
<hr style="width: 100%;height: 4px;background: #148963;margin: 0px 0px;">
|
||||
<section class="oe_container oe_dark">
|
||||
<div class="oe_row ">
|
||||
<div class="oe_slogan text-center">
|
||||
<img src="odoo_mates.png"/>
|
||||
<div style="color:#269900;">
|
||||
<h3 style="color:#2C0091;font-size: 25px;">If you have any queries or doubt just contact us:</h3><br>
|
||||
<h3 style="color:#2C0091;font-size: 20px;">Email: <a href="odoomates@gmail.com">odoomates@gmail.com</a> <br></h3>
|
||||
</div>
|
||||
<div class="oe_slogan">
|
||||
<h2>
|
||||
<a target="_blank" href="https://www.facebook.com/odoomate/" target="new">
|
||||
<i class="fa fa-facebook-square" style="font-size:38px;"></i>
|
||||
</a>
|
||||
<a target="_blank" href="https://twitter.com/odoomates/" target="new">
|
||||
<i class="fa fa-twitter" style="font-size:38px;"></i>
|
||||
</a>
|
||||
<a href="#" target="_blank">
|
||||
<i class="fa fa-linkedin" style="font-size:38px;"></i>
|
||||
</a>
|
||||
<a target="_blank" href="https://www.youtube.com/channel/UCVKlUZP7HAhdQgs-9iTJklQ">
|
||||
<i class="fa fa-youtube-play" style="font-size:38px;"></i>
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<hr style="width: 100%;height: 4px;background: #148963;margin: 0px 0px;">
|
||||
<hr style="width: 100%;height: 4px;background: #2C0091;margin: 0px 0px;">
|
||||
|
||||
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 454 KiB |
|
|
@ -0,0 +1,163 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="action_confirm_appointments" model="ir.actions.server">
|
||||
<field name="name">Confirm Appointment</field>
|
||||
<field name="type">ir.actions.server</field>
|
||||
<field name="model_id" ref="model_hospital_appointment"/>
|
||||
<field name="binding_model_id" ref="model_hospital_appointment"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">records.action_confirm()</field>
|
||||
</record>
|
||||
|
||||
<record id="view_appointment_tree" model="ir.ui.view">
|
||||
<field name="name">hospital.appointment.tree</field>
|
||||
<field name="model">hospital.appointment</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree multi_edit="1">
|
||||
<header>
|
||||
<button name="action_done" string="Mark As Done" class="btn-primary"
|
||||
type="object"/>
|
||||
</header>
|
||||
<field name="name"/>
|
||||
<field name="doctor_id"/>
|
||||
<field name="patient_id"/>
|
||||
<field name="age" optional="show"/>
|
||||
<field name="gender" optional="show"/>
|
||||
<field name="date_appointment" optional="show"/>
|
||||
<field name="date_checkup" optional="hide"/>
|
||||
<field name="note" optional="show"/>
|
||||
<field name="state" optional="show"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_appointment_form" model="ir.ui.view">
|
||||
<field name="name">hospital.appointment.form</field>
|
||||
<field name="model">hospital.appointment</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<header>
|
||||
<button id="button_confirm" name="action_confirm" string="Confirm" class="btn-primary" states="draft"
|
||||
confirm="Are you sure that you need to confirm ?"
|
||||
type="object"/>
|
||||
<button id="button_done" name="action_done" string="Mark As Done" class="btn-primary" states="confirm"
|
||||
type="object"/>
|
||||
<button id="button_draft" name="action_draft" string="Set To Draft" class="btn-primary"
|
||||
states="cancel" type="object"/>
|
||||
<button id="button_cancel" name="action_cancel" string="Cancel" states="draft,done,confirm"
|
||||
confirm="Are you sure that you need to cancel ?"
|
||||
type="object"/>
|
||||
<button name="action_url" string="Open URL" class="btn-primary"
|
||||
type="object"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,done,confirm"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" readonly="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="patient_id"/>
|
||||
<field name="gender" readonly="1" force_save="1"/>
|
||||
<field name="age"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="doctor_id"/>
|
||||
<field name="date_appointment"/>
|
||||
<field name="date_checkup"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Doctor Prescription" name="doctor_prescription">
|
||||
<group>
|
||||
<field name="prescription"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Medicine" name="medicine">
|
||||
<field name="prescription_line_ids">
|
||||
<tree editable="bottom">
|
||||
<field name="name"/>
|
||||
<field name="qty"/>
|
||||
</tree>
|
||||
<form>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="qty"/>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Other Info" name="other_info">
|
||||
<field name="note"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_appointment_search" model="ir.ui.view">
|
||||
<field name="name">hospital.appointment.search</field>
|
||||
<field name="model">hospital.appointment</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Patients">
|
||||
<field name="name"/>
|
||||
<field name="patient_id"/>
|
||||
<separator/>
|
||||
<filter string="Draft" name="draft" domain="[('state', '=', 'draft')]"/>
|
||||
<group expand="1" string="Group By">
|
||||
<filter string="Patient" name="patient_id" context="{'group_by':'patient_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hospital_appointment" model="ir.actions.act_window">
|
||||
<field name="name">Appointments</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hospital.appointment</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{'search_default_draft': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create your first appointment !
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_appointment_root"
|
||||
name="Appointments"
|
||||
parent="menu_hospital_root"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem id="menu_appointment"
|
||||
name="Appointments"
|
||||
parent="menu_appointment_root"
|
||||
action="action_hospital_appointment"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="menu_create_appointment"
|
||||
name="Create Appointment"
|
||||
parent="menu_appointment_root"
|
||||
action="action_create_appointment"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem id="menu_search_appointment"
|
||||
name="Search Appointment"
|
||||
parent="menu_appointment_root"
|
||||
action="action_search_appointment"
|
||||
sequence="30"/>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="action_open_appointments" model="ir.actions.act_window">
|
||||
<field name="name">Appointments</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hospital.appointment</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('doctor_id','=', active_id)]</field>
|
||||
<field name="context">{'default_doctor_id': active_id}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create your first appointment !
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_doctor_kanban" model="ir.ui.view">
|
||||
<field name="name">hospital.doctor.kanban</field>
|
||||
<field name="model">hospital.doctor</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban sample="1">
|
||||
<field name="id"/>
|
||||
<field name="doctor_name"/>
|
||||
<field name="gender"/>
|
||||
<field name="age"/>
|
||||
<field name="note"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_global_click">
|
||||
<div class="oe_kanban_details">
|
||||
<ul>
|
||||
<li>
|
||||
Name: <field name="doctor_name"/>
|
||||
</li>
|
||||
<li>
|
||||
Age: <field name="age"/>
|
||||
</li>
|
||||
<li>
|
||||
Gender: <field name="gender"/>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_doctor_tree" model="ir.ui.view">
|
||||
<field name="name">hospital.doctor.tree</field>
|
||||
<field name="model">hospital.doctor</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree sample="1">
|
||||
<field name="doctor_name"/>
|
||||
<field name="gender"/>
|
||||
<field name="age"/>
|
||||
<field name="note"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_doctor_form" model="ir.ui.view">
|
||||
<field name="name">hospital.doctor.form</field>
|
||||
<field name="model">hospital.doctor</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="%(om_hospital.action_open_appointments)d" type="action"
|
||||
class="oe_stat_button" icon="fa-calendar">
|
||||
<div class="o_stat_info">
|
||||
<field name="appointment_count" class="o_stat_value"/>
|
||||
<span class="o_stat_text">Appointments</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<field name="image" widget="image" class="oe_avatar"/>
|
||||
<group>
|
||||
<group>
|
||||
<field name="doctor_name"/>
|
||||
<field name="age"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="gender"/>
|
||||
<field name="note"/>
|
||||
<field name="active" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_doctor_search" model="ir.ui.view">
|
||||
<field name="name">hospital.doctor.search</field>
|
||||
<field name="model">hospital.doctor</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Doctors">
|
||||
<field name="doctor_name"/>
|
||||
<field name="note"/>
|
||||
<separator/>
|
||||
<filter string="Male" name="male" domain="[('gender', '=', 'male')]"/>
|
||||
<filter string="Female" name="female" domain="[('gender', '=', 'female')]"/>
|
||||
<filter string="Others" name="other" domain="[('gender', '=', 'other')]"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
|
||||
<group expand="1" string="Group By">
|
||||
<filter string="Gender" name="gender" context="{'group_by':'gender'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hospital_doctor" model="ir.actions.act_window">
|
||||
<field name="name">Doctors</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hospital.doctor</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create your first doctor!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_doctor_root"
|
||||
name="Doctors"
|
||||
parent="menu_hospital_root"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="menu_doctor"
|
||||
name="Doctors"
|
||||
parent="menu_doctor_root"
|
||||
action="action_hospital_doctor"
|
||||
sequence="10"/>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="action_hospital_kids" model="ir.actions.act_window">
|
||||
<field name="name">Kids</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hospital.patient</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="domain">[('age', '<=', 18)]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create your first kids!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_kids"
|
||||
name="Kids"
|
||||
parent="menu_patient_root"
|
||||
action="action_hospital_kids"
|
||||
sequence="20"/>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="action_male_patients" model="ir.actions.act_window">
|
||||
<field name="name">Male Patients</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hospital.patient</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="context">{'hide_gender': 1}</field>
|
||||
<field name="domain">[('gender', '=', 'male')]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create your first male patient!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_male_patients"
|
||||
name="Male Patients"
|
||||
parent="menu_patient_root"
|
||||
action="action_male_patients"
|
||||
sequence="30"/>
|
||||
|
||||
<record id="action_female_patients" model="ir.actions.act_window">
|
||||
<field name="name">Female Patients</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hospital.patient</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="context">{'default_gender': 'female', 'default_note': 'New Patient', 'hide_gender': 1}</field>
|
||||
<field name="domain">[('gender', '=', 'female')]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create your female patient !
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_female_patients"
|
||||
name="Female Patients"
|
||||
parent="menu_patient_root"
|
||||
action="action_female_patients"
|
||||
sequence="40"/>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,185 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="action_create_appointments" model="ir.actions.server">
|
||||
<field name="name">Create Appointment</field>
|
||||
<field name="model_id" ref="om_hospital.model_hospital_patient"/>
|
||||
<field name="binding_model_id" ref="om_hospital.model_hospital_patient"/>
|
||||
<field name="binding_view_types">list,form</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
if record:
|
||||
action_values = env.ref('om_hospital.action_create_appointment').sudo().read()[0]
|
||||
action_values.update({'context': env.context})
|
||||
action = action_values
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_patient_kanban" model="ir.ui.view">
|
||||
<field name="name">hospital.patient.kanban</field>
|
||||
<field name="model">hospital.patient</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban default_order="id asc">
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
<field name="reference"/>
|
||||
<field name="gender"/>
|
||||
<field name="age"/>
|
||||
<field name="note"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_global_click">
|
||||
<div class="oe_kanban_details">
|
||||
<ul>
|
||||
<li>
|
||||
ID: <field name="reference"/>
|
||||
</li>
|
||||
<li>
|
||||
Name: <field name="name"/>
|
||||
</li>
|
||||
<li>
|
||||
Age: <field name="age"/>
|
||||
</li>
|
||||
<li>
|
||||
Gender: <field name="gender"/>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_patient_tree" model="ir.ui.view">
|
||||
<field name="name">hospital.patient.tree</field>
|
||||
<field name="model">hospital.patient</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="reference"/>
|
||||
<field name="name"/>
|
||||
<field name="responsible_id"/>
|
||||
<field name="gender"/>
|
||||
<field name="age"/>
|
||||
<field name="note"/>
|
||||
<field name="appointment_count"/>
|
||||
<!-- <field name="state"/>-->
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_patient_form" model="ir.ui.view">
|
||||
<field name="name">hospital.patient.form</field>
|
||||
<field name="model">hospital.patient</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<header>
|
||||
<!-- <button id="button_confirm" name="action_confirm" string="Confirm" class="btn-primary" states="draft"-->
|
||||
<!-- confirm="Are you sure that you need to confirm ?"-->
|
||||
<!-- type="object"/>-->
|
||||
<!-- <button id="button_done" name="action_done" string="Mark As Done" class="btn-primary" states="confirm"-->
|
||||
<!-- type="object"/>-->
|
||||
<!-- <button id="button_draft" name="action_draft" string="Set To Draft" class="btn-primary"-->
|
||||
<!-- states="cancel" type="object"/>-->
|
||||
<!-- <button id="button_cancel" name="action_cancel" string="Cancel" states="draft,done,confirm"-->
|
||||
<!-- confirm="Are you sure that you need to cancel ?"-->
|
||||
<!-- type="object"/>-->
|
||||
<!-- <button id="button_create_appointment" name="%(om_hospital.action_create_appointment)d"-->
|
||||
<!-- string="Create Appointment" class="btn-primary"-->
|
||||
<!-- type="action"/>-->
|
||||
<!-- <field name="state" widget="statusbar" statusbar_visible="draft,done,confirm"/>-->
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="action_open_appointments" type="object" class="oe_stat_button" icon="fa-calendar">
|
||||
<div class="o_stat_info">
|
||||
<field name="appointment_count" class="o_stat_value"/>
|
||||
<span class="o_stat_text">Appointments</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<field name="image" widget="image" class="oe_avatar"/>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="reference" readonly="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="responsible_id"/>
|
||||
<field name="age"/>
|
||||
<field name="appointment_count"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="gender" invisible="context.get('hide_gender')"/>
|
||||
<field name="note"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Appointments" name="appointment">
|
||||
<field name="appointment_ids" readonly="1">
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_patient_search" model="ir.ui.view">
|
||||
<field name="name">hospital.patient.search</field>
|
||||
<field name="model">hospital.patient</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Patients">
|
||||
<field name="name"/>
|
||||
<field name="note"/>
|
||||
<separator/>
|
||||
<filter string="Male" name="male" domain="[('gender', '=', 'male')]"/>
|
||||
<filter string="Female" name="female" domain="[('gender', '=', 'female')]"/>
|
||||
<filter string="Others" name="other" domain="[('gender', '=', 'other')]"/>
|
||||
<group expand="1" string="Group By">
|
||||
<filter string="Gender" name="gender" context="{'group_by':'gender'}"/>
|
||||
<filter string="Patient Name" name="patient_name" context="{'group_by':'name'}"/>
|
||||
<filter string="Responsible" name="responsible_id" context="{'group_by':'responsible_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hospital_patient" model="ir.actions.act_window">
|
||||
<field name="name">Patients</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hospital.patient</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="context">{}</field>
|
||||
<!-- <field name="context">{'search_default_responsible_id': 1}</field>-->
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create your first patient!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_hospital_root"
|
||||
name="Hospital"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="menu_patient_root"
|
||||
name="Patients"
|
||||
parent="menu_hospital_root"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="menu_patient"
|
||||
name="Patients"
|
||||
parent="menu_patient_root"
|
||||
action="action_hospital_patient"
|
||||
sequence="10"/>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_order_form_inherit" model="ir.ui.view">
|
||||
<field name="name">sale.order.inherited</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='payment_term_id']" position="after">
|
||||
<field name="sale_description"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_order_tree_inherit" model="ir.ui.view">
|
||||
<field name="name">sale.order.inherited</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="inherit_id" ref="sale.view_quotation_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='partner_id']" position="after">
|
||||
<field name="sale_description"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_sale_appointment"
|
||||
name="Appointments"
|
||||
parent="sale.sale_order_menu"
|
||||
sequence="2"
|
||||
action="action_hospital_appointment"/>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
from . import create_appointment
|
||||
from . import search_appointment
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
|
||||
|
||||
class CreateAppointmentWizard(models.TransientModel):
|
||||
_name = "create.appointment.wizard"
|
||||
_description = "Create Appointment Wizard"
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
res = super(CreateAppointmentWizard, self).default_get(fields)
|
||||
if self._context.get('active_id'):
|
||||
res['patient_id'] = self._context.get('active_id')
|
||||
return res
|
||||
|
||||
date_appointment = fields.Date(string='Date', required=False)
|
||||
patient_id = fields.Many2one('hospital.patient', string="Patient", required=True)
|
||||
|
||||
def action_create_appointment(self):
|
||||
vals = {
|
||||
'patient_id': self.patient_id.id,
|
||||
'doctor_id': 2,
|
||||
'date_appointment': self.date_appointment
|
||||
}
|
||||
appointment_rec = self.env['hospital.appointment'].create(vals)
|
||||
return {
|
||||
'name': _('Appointment'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_mode': 'form',
|
||||
'res_model': 'hospital.appointment',
|
||||
'res_id': appointment_rec.id,
|
||||
}
|
||||
|
||||
# def action_view_appointment(self):
|
||||
# # action = self.env.ref('om_hospital.action_hospital_appointment').read()[0]
|
||||
# # action['domain'] = [('patient_id', '=', self.patient_id.id)]
|
||||
# # return action
|
||||
#
|
||||
# action = self.env['ir.actions.actions']._for_xml_id("om_hospital.action_hospital_appointment")
|
||||
# action['domain'] = [('patient_id', '=', self.patient_id.id)]
|
||||
# return action
|
||||
#
|
||||
# # return {
|
||||
# # 'type': 'ir.actions.act_window',
|
||||
# # 'name': 'Appointments',
|
||||
# # 'res_model': 'hospital.appointment',
|
||||
# # 'view_type': 'form',
|
||||
# # 'domain': [('patient_id', '=', self.patient_id.id)],
|
||||
# # 'view_mode': 'tree,form',
|
||||
# # 'target': 'current',
|
||||
# # }
|
||||
# # return action
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_create_appointment_form" model="ir.ui.view">
|
||||
<field name="name">create.appointment.wizard.form</field>
|
||||
<field name="model">create.appointment.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Create New Appointment">
|
||||
<group>
|
||||
<field name="date_appointment"/>
|
||||
<field name="patient_id"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_create_appointment" type="object" string="Create" class="btn-primary"/>
|
||||
<!-- <button name="action_view_appointment" type="object" string="View Appointments" class="btn-primary"/>-->
|
||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_create_appointment" model="ir.actions.act_window">
|
||||
<field name="name">Create Appointment</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">create.appointment.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="view_create_appointment_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
|
||||
|
||||
class SearchAppointmentWizard(models.TransientModel):
|
||||
_name = "search.appointment.wizard"
|
||||
_description = "Search Appointment Wizard"
|
||||
|
||||
patient_id = fields.Many2one('hospital.patient', string="Patient", required=True)
|
||||
|
||||
def action_search_appointment_m1(self):
|
||||
action = self.env.ref('om_hospital.action_hospital_appointment').read()[0]
|
||||
action['domain'] = [('patient_id', '=', self.patient_id.id)]
|
||||
return action
|
||||
|
||||
def action_search_appointment_m2(self):
|
||||
action = self.env['ir.actions.actions']._for_xml_id("om_hospital.action_hospital_appointment")
|
||||
action['domain'] = [('patient_id', '=', self.patient_id.id)]
|
||||
return action
|
||||
|
||||
def action_search_appointment_m3(self):
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': 'Appointments',
|
||||
'res_model': 'hospital.appointment',
|
||||
'view_type': 'form',
|
||||
'domain': [('patient_id', '=', self.patient_id.id)],
|
||||
'view_mode': 'tree,form',
|
||||
'target': 'current',
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_search_appointment_form" model="ir.ui.view">
|
||||
<field name="name">search.appointment.wizard.form</field>
|
||||
<field name="model">search.appointment.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Search Appointment">
|
||||
<group>
|
||||
<field name="patient_id"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_search_appointment_m1" type="object" string="Search Appointments (M1)"
|
||||
class="btn-primary"/>
|
||||
<button name="action_search_appointment_m2" type="object" string="Search Appointments (M2)"
|
||||
class="btn-primary"/>
|
||||
<button name="action_search_appointment_m3" type="object" string="Search Appointments (M3)"
|
||||
class="btn-primary"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_search_appointment" model="ir.actions.act_window">
|
||||
<field name="name">View Appointment</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">search.appointment.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="view_search_appointment_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
45
odoo-bringout-odoomates-om_hospital/pyproject.toml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[project]
|
||||
name = "odoo-bringout-odoomates-om_hospital"
|
||||
version = "16.0.0"
|
||||
description = "Odoo 16 Development Tutorials - Odoo 16 Development Tutorials"
|
||||
authors = [
|
||||
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
|
||||
]
|
||||
dependencies = [
|
||||
"odoo-bringout-oca-ocb-sale>=16.0.0",
|
||||
"odoo-bringout-oca-ocb-mail>=16.0.0",
|
||||
"odoo-bringout-odoomates-website_slides>=16.0.0",
|
||||
"odoo-bringout-oca-ocb-hr>=16.0.0",
|
||||
"requests>=2.25.1"
|
||||
]
|
||||
readme = "README.md"
|
||||
requires-python = ">= 3.11"
|
||||
classifiers = [
|
||||
"Development Status :: 5 - Production/Stable",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Topic :: Office/Business",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
homepage = "https://github.com/bringout/0"
|
||||
repository = "https://github.com/bringout/0"
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.hatch.metadata]
|
||||
allow-direct-references = true
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["om_hospital"]
|
||||
|
||||
[tool.rye]
|
||||
managed = true
|
||||
dev-dependencies = [
|
||||
"pytest>=8.4.1",
|
||||
]
|
||||