@ -0,0 +1,152 @@ |
|||
# POS Receipt UI Customizer for Odoo 18 |
|||
|
|||
[](https://www.odoo.com) |
|||
[](https://opensource.org/licenses/MIT) |
|||
|
|||
## Overview |
|||
|
|||
Option to customise POS Receipts through UI |
|||
|
|||
## Features |
|||
|
|||
- 🧾**Adding of Receipt Design.** |
|||
- 🎛️️**Choosing for Current Receipt Design.** |
|||
- 🌐**Choosing of Receipt in Frontend.** |
|||
- ✏️**Editing of Receipt Design.** |
|||
|
|||
|
|||
## Screenshots |
|||
|
|||
Here are some glimpses of POS Receipt UI Customizer: |
|||
|
|||
### Default Receipt of POS. |
|||
|
|||
<div> |
|||
<tr> |
|||
<td align="center"> |
|||
<img src="static/description/assets/screenshots/1.png" alt="Feature 1" width="500" style="border: none;"/> |
|||
</td> |
|||
</tr> |
|||
</div> |
|||
|
|||
### Receipt Designs |
|||
|
|||
<div> |
|||
<tr> |
|||
<td align="center"> |
|||
<img src="static/description/assets/screenshots/2.png" alt="Feature 1" width="500" style="border: none;border-radius: 5px;"/> |
|||
</td> |
|||
</tr> |
|||
</div> |
|||
<div> |
|||
<tr> |
|||
<td align="center"> |
|||
<img src="static/description/assets/screenshots/3.png" alt="Feature 1" width="500" style="border: none;border-radius: 5px;"/> |
|||
</td> |
|||
</tr> |
|||
</div> |
|||
|
|||
### Choose receipt design for POS. |
|||
<div> |
|||
<tr> |
|||
<td align="center"> |
|||
<img src="static/description/assets/screenshots/4.png" alt="Feature 1" width="500" style="border: none;border-radius: 5px;"/> |
|||
</td> |
|||
</tr> |
|||
</div> |
|||
<div> |
|||
<tr> |
|||
<td align="center"> |
|||
<img src="static/description/assets/screenshots/5.png" alt="Feature 1" width="500" style="border: none;border-radius: 5px;"/> |
|||
</td> |
|||
</tr> |
|||
</div> |
|||
|
|||
### Edit receipt designs for POS. |
|||
<div> |
|||
<tr> |
|||
<td align="center"> |
|||
<img src="static/description/assets/screenshots/6.png" alt="Feature 1" width="500" style="border: none;border-radius: 5px;"/> |
|||
</td> |
|||
</tr> |
|||
</div> |
|||
<div> |
|||
<tr> |
|||
<td align="center"> |
|||
<img src="static/description/assets/screenshots/7.png" alt="Feature 1" width="500" style="border: none;border-radius: 5px;"/> |
|||
</td> |
|||
</tr> |
|||
</div> |
|||
|
|||
### Chosen receipt in the frontend |
|||
|
|||
<div> |
|||
<tr> |
|||
<td align="center"> |
|||
<img src="static/description/assets/screenshots/8.png" alt="Feature 1" width="500" style="border: none;"/> |
|||
</td> |
|||
</tr> |
|||
</div> |
|||
<div> |
|||
<tr> |
|||
<td align="center"> |
|||
<img src="static/description/assets/screenshots/9.png" alt="Feature 1" width="500" style="border: none;"/> |
|||
</td> |
|||
</tr> |
|||
</div> |
|||
|
|||
## Prerequisites |
|||
|
|||
Before you begin, ensure you have the following installed: |
|||
|
|||
- An active Odoo Community/Enterprise Edition instance (local or hosted) |
|||
|
|||
## Configuration |
|||
|
|||
* No additional configurations needed. |
|||
|
|||
## Contributing |
|||
|
|||
We welcome contributions! To get started: |
|||
|
|||
1. Fork the repository. |
|||
|
|||
2. Create a new branch: |
|||
``` |
|||
git checkout -b feature/your-feature-name |
|||
``` |
|||
3. Make changes and commit: |
|||
``` |
|||
git commit -m "Add your message here" |
|||
``` |
|||
4. Push your changes: |
|||
``` |
|||
git push origin feature/your-feature-name |
|||
``` |
|||
5. Create a Pull Request on GitHub. |
|||
|
|||
--- |
|||
|
|||
- Submit a pull request with a clear description of your changes. |
|||
|
|||
## License |
|||
|
|||
This project is licensed under the AGPL-3. Feel free to use, modify, and distribute it as needed. |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>` |
|||
|
|||
## Contact |
|||
|
|||
* Mail Contact : odoo@cybrosys.com |
|||
* Website : https://cybrosys.com |
|||
|
|||
|
|||
Maintainer |
|||
========== |
|||
 |
|||
https://cybrosys.com |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
For support and more information, please visit https://www.cybrosys.com |
|||
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Neeraj JR (<https://www.cybrosys.com>) |
|||
# |
|||
# This program is free software: you can modify |
|||
# it under the terms of the GNU Affero General Public License (AGPL) as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from . import models |
|||
@ -0,0 +1,66 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Neeraj JR (<https://www.cybrosys.com>) |
|||
# |
|||
# This program is free software: you can modify |
|||
# it under the terms of the GNU Affero General Public License (AGPL) as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
{ |
|||
'name': 'POS Receipt UI Customizer', |
|||
'version': '18.0.1.0.0', |
|||
'category': 'Point of Sale', |
|||
'live_test_url': 'https://www.youtube.com/watch?v=sHQUam5F5Qs', |
|||
'summary': "POS Receipt, Receipt Design, POS Receipt Template, Design " |
|||
"Report, Custom Receipt, POS Report, Customise Receipt, Odoo18, " |
|||
"Odoo Apps", |
|||
'description': "Option to select the customised Receipts for each POS. So, " |
|||
"we can easily updated the Receipt Design for better styles", |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.cybrosys.com', |
|||
'depends': ['base', 'point_of_sale', 'web'], |
|||
'data': [ |
|||
'security/ir.model.access.csv', |
|||
'data/pos_receipt_design1_data.xml', |
|||
'data/pos_receipt_design2_data.xml', |
|||
'data/pos_receipt_design3_data.xml', |
|||
'views/pos_receipt_views.xml', |
|||
'views/pos_config_views.xml', |
|||
'views/res_config_settings_views.xml', |
|||
], |
|||
'assets': { |
|||
'point_of_sale._assets_pos': [ |
|||
'pos_receipt_ui_customizer/static/src/js/receipt_design.js', |
|||
'pos_receipt_ui_customizer/static/src/xml/order_receipt.xml', |
|||
], |
|||
'web.assets_backend': [ |
|||
'pos_receipt_ui_customizer/static/src/js/layout_customisation.js', |
|||
'pos_receipt_ui_customizer/static/src/xml/action.xml', |
|||
'pos_receipt_ui_customizer/static/src/css/style.css', |
|||
'https://cdn.jsdelivr.net/npm/medium-editor@5.23.3/dist/js/medium-editor.min.js', |
|||
'https://cdn.jsdelivr.net/npm/medium-editor@5.23.3/dist/css/medium-editor.min.css', |
|||
'https://cdn.jsdelivr.net/npm/medium-editor@5.23.3/dist/css/themes/default.min.css', |
|||
], |
|||
}, |
|||
'images': ['static/description/banner.png'], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False |
|||
} |
|||
@ -0,0 +1,105 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<record id="pos_receipt_design1" model="pos.receipt"> |
|||
<field name="name">Design 1</field> |
|||
<field name="design_receipt"><![CDATA[ |
|||
<div class="pos-receipt"> |
|||
<div style = "border-radius: inherit;"> |
|||
<div style="text-align:center;"> |
|||
<t t-if="env.services.pos.config.logo"> |
|||
<img t-att-src="'data:image/png;base64,' + env.services.pos.config.logo" |
|||
class="pos-receipt-logo"/> |
|||
<br /> |
|||
</t> |
|||
</div> |
|||
<div class="pos-receipt-contact"> |
|||
<div style="text-align:center; font-size:13px; height: 90px;"> |
|||
<div> |
|||
Name : |
|||
<span class="placeholder-span">[[ company.name ]]</span> |
|||
</div> |
|||
<div> |
|||
Phone : |
|||
<span class="placeholder-span">[[ company.phone ]]</span> |
|||
</div> |
|||
<div> |
|||
Email : |
|||
<span class="placeholder-span">[[ company.email ]]</span> |
|||
</div> |
|||
<div> |
|||
Website : |
|||
<span class="placeholder-span">[[ company.website ]]</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<br/><br/><br/> |
|||
</div> |
|||
<div class="drop-area"> |
|||
</div> |
|||
<!-- Table --> |
|||
<div> |
|||
<table class="receipt-orderlines" |
|||
style="width:100%; border-collapse:collapse; font-size:15px; margin-top:10px;"> |
|||
<tr style="border-bottom:1px dashed black;"> |
|||
<th style="text-align:left; padding:4px; width:60%;">Product</th> |
|||
<th style="text-align:left; padding:4px; width:20%;">Qty</th> |
|||
<th style="text-align:left; padding:4px; width:20%;">Amount</th> |
|||
</tr> |
|||
<t t-if="props.orderlines and props.orderlines.length"> |
|||
<tr t-foreach="props.orderlines" t-as="orderline" t-key="orderline_index"> |
|||
<td style="padding:4px; text-align:left; word-break:break-word;"> |
|||
<t t-esc="orderline.productName"/> |
|||
<t t-if="!orderline"> |
|||
<div style="font-size:12px; font-style:italic; color:#808080;"> |
|||
<span>orderline.name</span> |
|||
</div> |
|||
</t> |
|||
</td> |
|||
<td style="padding:4px; text-align:left; font-size:14px;"> |
|||
<t t-esc="orderline.qty"/> |
|||
<t t-if="!orderline"> |
|||
<div style="font-size:12px; font-style:italic; color:#808080;"> |
|||
orderline.qty |
|||
</div> |
|||
</t> |
|||
</td> |
|||
<td style="padding:4px; text-align:left; font-size:14px;"> |
|||
<t t-esc="orderline.price"/> |
|||
<t t-if="!orderline"> |
|||
<div style="font-size:12px; font-style:italic; color:#808080;"> |
|||
orderline.price |
|||
</div> |
|||
</t> |
|||
</td> |
|||
</tr> |
|||
</t> |
|||
</table> |
|||
</div> |
|||
<br/> |
|||
<br/> |
|||
<!-- Totals Section --> |
|||
<div id="subtotalDiv" class="selectable-box" |
|||
style="font-weight:700; justify-content:center;"> |
|||
Subtotal : |
|||
<span class="placeholder-span">[[ receipt.total_without_tax ]]</span> |
|||
</div> |
|||
<br/> |
|||
<div id="totalDiv" class="selectable-box" |
|||
style="font-weight:700; justify-content:center;"> |
|||
TOTAL : |
|||
<span class="placeholder-span">[[ receipt.amount_total ]]</span> |
|||
</div> |
|||
<div class='before-footer' /> |
|||
<br/><br/> |
|||
<!-- Footer --> |
|||
|
|||
</div> |
|||
<br/><br/> |
|||
<div class="qrArea" style="justify-content:center; display:flex; margin-bottom:3rem;"></div> |
|||
<div style="font-size:14px; text-align:center;"> |
|||
Thank You... Please Visit Again ... |
|||
</div> |
|||
</div>]]></field> |
|||
</record> |
|||
|
|||
</odoo> |
|||
@ -0,0 +1,83 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<record id="pos_receipt_design2" model="pos.receipt"> |
|||
<field name="name">Design 2</field> |
|||
<field name="design_receipt"><![CDATA[ |
|||
<div class="pos-receipt" style="font-family: sans-serif; padding: 8px;"> |
|||
|
|||
<!-- HEADER --> |
|||
<div style="text-align:center; padding:10px 0; border-bottom:2px solid #000;"> |
|||
<t t-if="env.services.pos.config.logo"> |
|||
<img t-att-src="'data:image/png;base64,' + env.services.pos.config.logo" |
|||
style="max-width:120px; margin-bottom:5px;"/> |
|||
</t> |
|||
<div style="font-size:18px; font-weight:700; margin-top:6px;"> |
|||
[[ company.name ]] |
|||
</div> |
|||
<div style="font-size:13px; margin-top:4px;"> |
|||
<div>Phone: <span class="placeholder-span">[[ company.phone ]]</span></div> |
|||
<div>Email: <span class="placeholder-span">[[ company.email ]]</span></div> |
|||
<div>Website: <span class="placeholder-span">[[ company.website ]]</span></div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- ORDERLINES SECTION --> |
|||
<div style="margin-top:15px;"> |
|||
<div style="font-weight:700; border-bottom:1px solid #000; padding-bottom:5px;"> |
|||
Order Details |
|||
</div> |
|||
|
|||
<table style="width:100%; border-collapse:collapse; margin-top:6px; font-size:14px;"> |
|||
<tr style="border-bottom:1px dashed #555;"> |
|||
<th style="text-align:left; padding:4px;">Product</th> |
|||
<th style="text-align:center; padding:4px;">Qty</th> |
|||
<th style="text-align:right; padding:4px;">Amount</th> |
|||
</tr> |
|||
|
|||
<t t-if="props.orderlines and props.orderlines.length"> |
|||
<tr t-foreach="props.orderlines" t-as="orderline" t-key="orderline_index" |
|||
style="border-bottom:1px dotted #ccc;"> |
|||
<td style="padding:4px; width:60%; word-break:break-word;"> |
|||
<t t-esc="orderline.productName"/> |
|||
</td> |
|||
<td style="padding:4px; text-align:center; width:20%;"> |
|||
<t t-esc="orderline.qty"/> |
|||
</td> |
|||
<td style="padding:4px; text-align:right; width:20%;"> |
|||
<t t-esc="orderline.price"/> |
|||
</td> |
|||
</tr> |
|||
</t> |
|||
</table> |
|||
</div> |
|||
|
|||
<!-- TOTAL SECTION BOX --> |
|||
<div style="margin-top:18px; padding:10px; border:2px dashed #555; border-radius:6px;"> |
|||
<div style="display:flex; justify-content:space-between; margin-bottom:8px;"> |
|||
<span style="font-weight:600;">Subtotal</span> |
|||
<span class="placeholder-span">[[ receipt.total_without_tax ]]</span> |
|||
</div> |
|||
|
|||
<div style="display:flex; justify-content:space-between; font-size:18px; font-weight:700;"> |
|||
<span>Total</span> |
|||
<span class="placeholder-span">[[ receipt.amount_total ]]</span> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- RECEIPT INFO --> |
|||
<div style="text-align:center; margin-top:20px; font-size:14px;"> |
|||
<div><t t-esc="props.receipt.name"/></div> |
|||
<div><t t-esc="props.receipt.date"/></div> |
|||
</div> |
|||
|
|||
<!-- QR AREA --> |
|||
<div class="qrArea" style="display:flex; justify-content:center; margin:25px 0;"></div> |
|||
|
|||
<!-- FOOTER --> |
|||
<div style="text-align:center; font-size:14px; margin-top:10px;"> |
|||
Thank you for shopping with us! |
|||
</div> |
|||
</div>]]></field> |
|||
</record> |
|||
|
|||
</odoo> |
|||
@ -0,0 +1,97 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<record id="pos_receipt_design3" model="pos.receipt"> |
|||
<field name="name">Design 3</field> |
|||
<field name="design_receipt"><![CDATA[ |
|||
<div class="pos-receipt" style="font-family:'Segoe UI',sans-serif; padding:20px; line-height:1.5; max-width:320px; margin:0 auto;"> |
|||
|
|||
<!-- HEADER --> |
|||
<div style="text-align:center; padding-bottom:16px; border-bottom:2px solid #000;"> |
|||
<t t-if="env.services.pos.config.logo"> |
|||
<img t-att-src="'data:image/png;base64,' + env.services.pos.config.logo" |
|||
style="max-width:120px; margin-bottom:10px; opacity:0.95;"/> |
|||
</t> |
|||
|
|||
<div class="placeholder-span" style="font-size:20px; font-weight:700; letter-spacing:1px; margin-top:8px;"> |
|||
[[ company.name ]] |
|||
</div> |
|||
|
|||
|
|||
<div class="placeholder-span" style="font-size:11px; line-height:1.6; opacity:0.85;"> |
|||
[[ company.phone ]] |
|||
</div> |
|||
<div class="placeholder-span" style="font-size:11px; line-height:1.6; opacity:0.85;"> |
|||
[[ company.email ]] |
|||
</div> |
|||
<div class="placeholder-span" style="font-size:11px; line-height:1.6; opacity:0.85;"> |
|||
[[ company.website ]] |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- ORDERLINES SECTION --> |
|||
<div style="margin-top:20px;"> |
|||
<div style="font-weight:600; font-size:13px; letter-spacing:0.5px; margin-bottom:12px; text-transform:uppercase; opacity:0.8;"> |
|||
Order Details |
|||
</div> |
|||
|
|||
<table style="width:100%; border-collapse:collapse; font-size:13px;"> |
|||
<thead> |
|||
<tr style="border-bottom:1px solid #000;"> |
|||
<th style="text-align:left; padding:8px 4px; font-weight:600; font-size:12px;">Item</th> |
|||
<th style="text-align:center; padding:8px 4px; font-weight:600; font-size:12px;">Qty</th> |
|||
<th style="text-align:right; padding:8px 4px; font-weight:600; font-size:12px;">Price</th> |
|||
</tr> |
|||
</thead> |
|||
|
|||
<tbody> |
|||
<t t-if="props.orderlines and props.orderlines.length"> |
|||
<tr t-foreach="props.orderlines" t-as="orderline" t-key="orderline_index" |
|||
style="border-bottom:1px dashed #ccc;"> |
|||
|
|||
<td style="padding:10px 4px; word-break:break-word;"> |
|||
<t t-esc="orderline.productName"/> |
|||
</td> |
|||
|
|||
<td style="padding:10px 4px; text-align:center;"> |
|||
<t t-esc="orderline.qty"/> |
|||
</td> |
|||
|
|||
<td style="padding:10px 4px; text-align:right; font-weight:500;"> |
|||
<t t-esc="orderline.price"/> |
|||
</td> |
|||
</tr> |
|||
</t> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
|
|||
<!-- TOTALS SECTION --> |
|||
<div style="margin-top:24px; padding:16px; border:2px solid #000; border-radius:0;"> |
|||
<div style="display:flex; justify-content:space-between; font-size:13px; margin-bottom:8px; opacity:0.85;"> |
|||
<span style="font-weight:500;">Subtotal</span> |
|||
<span class="placeholder-span">[[ receipt.total_without_tax ]]</span> |
|||
</div> |
|||
|
|||
<div style="border-top:1px solid #000; margin:12px 0;"></div> |
|||
|
|||
<div style="display:flex; justify-content:space-between; font-size:15px; font-weight:700; letter-spacing:0.5px;"> |
|||
<span>TOTAL</span> |
|||
<span class="placeholder-span">[[ receipt.amount_total ]]</span> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- QR AREA --> |
|||
<div class="qrArea" |
|||
style="display:flex; justify-content:center; padding:16px; margin:24px 0; border-radius:0;"> |
|||
</div> |
|||
|
|||
<!-- FOOTER --> |
|||
<div style="text-align:center; font-size:12px; border-top:2px solid #000; padding-top:16px; letter-spacing:0.5px; line-height:1.8;"> |
|||
<div style="font-weight:600; margin-bottom:4px;">Thank You</div> |
|||
<div style="opacity:0.7;">We appreciate your business</div> |
|||
</div> |
|||
|
|||
</div> |
|||
]]></field> |
|||
</record> |
|||
</odoo> |
|||
@ -0,0 +1,7 @@ |
|||
## Module <pos_receipt_ui_customizer> |
|||
|
|||
#### 10.11.2025 |
|||
#### Version 18.0.1.0.0 |
|||
##### ADD |
|||
- Initial Commit for POS Receipt UI Customizer |
|||
|
|||
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Neeraj JR (<https://www.cybrosys.com>) |
|||
# |
|||
# This program is free software: you can modify |
|||
# it under the terms of the GNU Affero General Public License (AGPL) as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from .import pos_receipt |
|||
from .import pos_config |
|||
from .import res_config_settings |
|||
@ -0,0 +1,44 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Neeraj JR (<https://www.cybrosys.com>) |
|||
# |
|||
# This program is free software: you can modify |
|||
# it under the terms of the GNU Affero General Public License (AGPL) as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models |
|||
|
|||
class PosConfig(models.Model): |
|||
""" |
|||
This is an Odoo model for Point of Sale (POS). |
|||
It inherits the 'pos.config' model to add new fields. |
|||
""" |
|||
_inherit = 'pos.config' |
|||
|
|||
receipt_design_id = fields.Many2one('pos.receipt', string='Receipt Design', |
|||
help='Choose any receipt design') |
|||
design_receipt = fields.Text(related='receipt_design_id.design_receipt', |
|||
string='Receipt XML') |
|||
logo = fields.Binary(related='receipt_design_id.logo', string='Logo', |
|||
readonly=False) |
|||
is_custom_receipt = fields.Boolean(string='Is Custom Receipt', |
|||
help='Indicates the receipt design is ' |
|||
'custom or not') |
|||
design_receipt_font_style = fields.Char( |
|||
related='receipt_design_id.design_receipt_font_style', |
|||
string='Receipt Font Style' |
|||
) |
|||
@ -0,0 +1,41 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Neeraj JR (<https://www.cybrosys.com>) |
|||
# |
|||
# This program is free software: you can modify |
|||
# it under the terms of the GNU Affero General Public License (AGPL) as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class PosReceipt(models.Model): |
|||
""" |
|||
This is an Odoo model for Point of Sale (POS). |
|||
It creates a new model of pos.receipt for providing different types of |
|||
receipt design. |
|||
""" |
|||
_name = 'pos.receipt' |
|||
_description = 'POS Receipts' |
|||
|
|||
name = fields.Char(string='Name', help='Name of the pos receipt') |
|||
design_receipt = fields.Text(string='Receipt XML', |
|||
help='Add your customised receipts for pos') |
|||
design_receipt_font_style = fields.Char(string="Font Style", default="Arial") |
|||
company_id = fields.Many2one('res.company', string='Company', readonly=True, index=True, required=True, |
|||
default=lambda self: self.env.company) |
|||
logo = fields.Binary(string='Logo', default=lambda self: self.env.company.logo) |
|||
@ -0,0 +1,37 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Neeraj JR (<https://www.cybrosys.com>) |
|||
# |
|||
# This program is free software: you can modify |
|||
# it under the terms of the GNU Affero General Public License (AGPL) as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models |
|||
|
|||
class ResConfigSettings(models.TransientModel): |
|||
""" |
|||
Adds POS options for enabling custom receipts and selecting a receipt design. |
|||
""" |
|||
_inherit = 'res.config.settings' |
|||
|
|||
is_custom_receipt = fields.Boolean(string='Is Custom Receipt', related='pos_config_id.is_custom_receipt', |
|||
readonly=False, |
|||
help='Indicates the receipt design is ' |
|||
'custom or not') |
|||
receipt_design_id = fields.Many2one('pos.receipt', string='Receipt Design', |
|||
related='pos_config_id.receipt_design_id', |
|||
readonly=False, help='Choose any receipt design') |
|||
|
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 532 KiB |
|
After Width: | Height: | Size: 628 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 210 KiB |
|
After Width: | Height: | Size: 209 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 495 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 624 B |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 214 KiB |
|
After Width: | Height: | Size: 841 B |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 310 B |
|
After Width: | Height: | Size: 929 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 542 B |
|
After Width: | Height: | Size: 576 B |
|
After Width: | Height: | Size: 733 B |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 738 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 911 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 600 B |
|
After Width: | Height: | Size: 673 B |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 462 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 926 B |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 878 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 653 B |
|
After Width: | Height: | Size: 800 B |
|
After Width: | Height: | Size: 905 B |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 839 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 427 B |
|
After Width: | Height: | Size: 627 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 988 B |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 875 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 619 B |
|
After Width: | Height: | Size: 190 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 258 KiB |
|
After Width: | Height: | Size: 890 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 718 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 142 KiB |