Browse Source

Jun 28: [ADD] Initial commit 'sale_purchase_from_product'

pull/254/merge
RisvanaCybro 10 months ago
parent
commit
613b94fc8a
  1. 42
      sale_purchase_from_product/README.rst
  2. 22
      sale_purchase_from_product/__init__.py
  3. 48
      sale_purchase_from_product/__manifest__.py
  4. 6
      sale_purchase_from_product/doc/RELEASE_NOTES.md
  5. 5
      sale_purchase_from_product/security/ir.model.access.csv
  6. BIN
      sale_purchase_from_product/static/description/assets/icon.png
  7. BIN
      sale_purchase_from_product/static/description/assets/icons/check.png
  8. BIN
      sale_purchase_from_product/static/description/assets/icons/chevron.png
  9. BIN
      sale_purchase_from_product/static/description/assets/icons/cogs.png
  10. BIN
      sale_purchase_from_product/static/description/assets/icons/consultation.png
  11. BIN
      sale_purchase_from_product/static/description/assets/icons/ecom-black.png
  12. BIN
      sale_purchase_from_product/static/description/assets/icons/education-black.png
  13. BIN
      sale_purchase_from_product/static/description/assets/icons/hotel-black.png
  14. BIN
      sale_purchase_from_product/static/description/assets/icons/license.png
  15. BIN
      sale_purchase_from_product/static/description/assets/icons/lifebuoy.png
  16. BIN
      sale_purchase_from_product/static/description/assets/icons/logo.png
  17. BIN
      sale_purchase_from_product/static/description/assets/icons/manufacturing-black.png
  18. BIN
      sale_purchase_from_product/static/description/assets/icons/pos-black.png
  19. BIN
      sale_purchase_from_product/static/description/assets/icons/puzzle.png
  20. BIN
      sale_purchase_from_product/static/description/assets/icons/restaurant-black.png
  21. BIN
      sale_purchase_from_product/static/description/assets/icons/service-black.png
  22. BIN
      sale_purchase_from_product/static/description/assets/icons/trading-black.png
  23. BIN
      sale_purchase_from_product/static/description/assets/icons/training.png
  24. BIN
      sale_purchase_from_product/static/description/assets/icons/update.png
  25. BIN
      sale_purchase_from_product/static/description/assets/icons/user.png
  26. BIN
      sale_purchase_from_product/static/description/assets/icons/wrench.png
  27. BIN
      sale_purchase_from_product/static/description/assets/modules/1.png
  28. BIN
      sale_purchase_from_product/static/description/assets/modules/2.png
  29. BIN
      sale_purchase_from_product/static/description/assets/modules/3.png
  30. BIN
      sale_purchase_from_product/static/description/assets/modules/4.png
  31. BIN
      sale_purchase_from_product/static/description/assets/modules/5.png
  32. BIN
      sale_purchase_from_product/static/description/assets/modules/6.png
  33. BIN
      sale_purchase_from_product/static/description/assets/screenshots/1.png
  34. BIN
      sale_purchase_from_product/static/description/assets/screenshots/2.png
  35. BIN
      sale_purchase_from_product/static/description/assets/screenshots/3.png
  36. BIN
      sale_purchase_from_product/static/description/assets/screenshots/4.png
  37. BIN
      sale_purchase_from_product/static/description/assets/screenshots/5.png
  38. BIN
      sale_purchase_from_product/static/description/assets/screenshots/6.png
  39. BIN
      sale_purchase_from_product/static/description/assets/screenshots/7.png
  40. BIN
      sale_purchase_from_product/static/description/assets/screenshots/8.png
  41. BIN
      sale_purchase_from_product/static/description/assets/screenshots/hero.gif
  42. BIN
      sale_purchase_from_product/static/description/banner.png
  43. BIN
      sale_purchase_from_product/static/description/icon.png
  44. 653
      sale_purchase_from_product/static/description/index.html
  45. 15
      sale_purchase_from_product/views/product_product_views.xml
  46. 25
      sale_purchase_from_product/wizard/__init__.py
  47. 98
      sale_purchase_from_product/wizard/quick_purchase.py
  48. 34
      sale_purchase_from_product/wizard/quick_purchase_line.py
  49. 53
      sale_purchase_from_product/wizard/quick_purchase_views.xml
  50. 33
      sale_purchase_from_product/wizard/quick_sale_line.py
  51. 101
      sale_purchase_from_product/wizard/quick_sale_purchase.py
  52. 54
      sale_purchase_from_product/wizard/quick_sale_purchase_views.xml

42
sale_purchase_from_product/README.rst

@ -0,0 +1,42 @@
.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
Sale/Purchase Orders from Products
===================================
This module will help to create new sale/purchase orders using the selected
products and it will add the selected products to draft orders.
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3)
(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Credits
-------
Developer:
(V15) Jumana Haseen,
(V17) Neethu UM,
Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com
Further information
===================
HTML Description: `<static/description/index.html>`__

22
sale_purchase_from_product/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import wizard

48
sale_purchase_from_product/__manifest__.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'Sale/Purchase Orders from Products',
'version': '15.0.1.0.0',
'summary': 'Sale/Purchase Orders from Products',
'description': 'This module will help to create new sale/purchase'
' orders using the selected products and '
'it will add the selected products to draft orders',
'category': 'Sales/Purchase',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'license': 'LGPL-3',
'depends': ['base', 'sale_management', 'purchase'],
'data': [
'security/ir.model.access.csv',
'wizard/quick_sale_purchase_views.xml',
'wizard/quick_purchase_views.xml',
'views/product_product_views.xml'
],
'images': [
'static/description/banner.png',
],
'installable': True,
'auto_install': False,
'application': False,
}

6
sale_purchase_from_product/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <sale_purchase_from_product>
#### 21.06.2024
#### Version 15.0.1.0.0
#### ADD
- Initial commit for Sale/Purchase Orders from Products Module

5
sale_purchase_from_product/security/ir.model.access.csv

@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_quick_sale_purchase,quick.sale.purchase,model_quick_sale_purchase,,1,1,1,1
access_quick_sale_line,quick.sale.line,model_quick_sale_line,,1,1,1,1
access_quick_purchase,quick.purchase,model_quick_purchase,,1,1,1,1
access_quick_purchase_line,quick.purchase.line,model_quick_purchase_line,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_quick_sale_purchase quick.sale.purchase model_quick_sale_purchase 1 1 1 1
3 access_quick_sale_line quick.sale.line model_quick_sale_line 1 1 1 1
4 access_quick_purchase quick.purchase model_quick_purchase 1 1 1 1
5 access_quick_purchase_line quick.purchase.line model_quick_purchase_line 1 1 1 1

BIN
sale_purchase_from_product/static/description/assets/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
sale_purchase_from_product/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
sale_purchase_from_product/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
sale_purchase_from_product/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
sale_purchase_from_product/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
sale_purchase_from_product/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
sale_purchase_from_product/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
sale_purchase_from_product/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
sale_purchase_from_product/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
sale_purchase_from_product/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
sale_purchase_from_product/static/description/assets/icons/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
sale_purchase_from_product/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
sale_purchase_from_product/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
sale_purchase_from_product/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
sale_purchase_from_product/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
sale_purchase_from_product/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
sale_purchase_from_product/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
sale_purchase_from_product/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
sale_purchase_from_product/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
sale_purchase_from_product/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
sale_purchase_from_product/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
sale_purchase_from_product/static/description/assets/modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
sale_purchase_from_product/static/description/assets/modules/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
sale_purchase_from_product/static/description/assets/modules/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
sale_purchase_from_product/static/description/assets/modules/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
sale_purchase_from_product/static/description/assets/modules/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
sale_purchase_from_product/static/description/assets/modules/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
sale_purchase_from_product/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

BIN
sale_purchase_from_product/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

BIN
sale_purchase_from_product/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
sale_purchase_from_product/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
sale_purchase_from_product/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

BIN
sale_purchase_from_product/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
sale_purchase_from_product/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
sale_purchase_from_product/static/description/assets/screenshots/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
sale_purchase_from_product/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 KiB

BIN
sale_purchase_from_product/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
sale_purchase_from_product/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

653
sale_purchase_from_product/static/description/index.html

@ -0,0 +1,653 @@
<div class="container"
style="padding: 1rem !important; margin-bottom: 1rem !important;">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between"
style="border-bottom: 1px solid #d5d5d5;">
<div class="my-3">
<img src="./assets/icons/logo.png"
style="width: auto !important; height: 40px !important;">
</div>
<div class="my-3 d-flex align-items-center">
<div
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Community
</div>
</div>
</div>
</div>
</div>
<div class="container" style="padding: 0rem 1.5rem 4rem !important">
<div class="row" style="height: 900px !important;">
<div class="col-sm-12 col-md-12 col-lg-12"
style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;">
<h1
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important; font-size: 3.5rem !important; text-align: center !important;">
Sale/Purchase Orders from Products</h1>
<p
style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important; font-size: 1.4rem !important; text-align: center !important;">
This module enables the creation of new sale/purchase orders
by adding selected products to draft orders.
</p>
<img src="./assets/screenshots/hero.gif" class="img-responsive"
width="100%" height="auto"/>
</div>
</div>
<div class="row">
<div class="col-md-12"
style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-compass mr-2"></i>Explore this module
</h2>
<div class="row">
<div class="col-md-6">
<a href="#overview"
style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Overview</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
Learn more about this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right"
style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#features"
style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Features</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
View features of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right"
style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#screenshots"
style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Screenshots</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
See key screenshots of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right"
style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="row" id="overview">
<div class="col-md-12"
style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-pie-chart mr-2"></i>Overview
</h2>
</div>
<div class="col-mg-12 pl-3">
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;">
This module helps to created/ update the sale or
purchase orders by the selected products variants
</p>
</div>
</p>
</div>
<div class="row" id="features">
<div class="col-md-12"
style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-star mr-2"></i>Features
</h2>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Create new sale orders/purchase order.</h4>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Add metadata for the products and product groups.</h4>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Create website content that is optimised for search. </h4>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="assets/icons/check.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Update the existing Sale/Purchase orders.</h4>
</div>
</div>
</div>
<div class="row" id="screenshots">
<div class="col-md-12"
style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-image mr-2"></i>Screenshots
</h2>
</div>
<div class="col-lg-12 my-2">
<h4 class="mt-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Quick Sale Order/Purchase Order</h4>
<img src="assets/screenshots/1.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Create Sale Order</h4>
<p>Go to Product variants -> select any products -> click on 'Quick Sale Order' button and select the type as 'Create New Order'</p>
<img src="assets/screenshots/2.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto"/>
<p>Fill the necessary fields to create the sale order, once you click on 'create' the order will be created.</p>
<img src="assets/screenshots/3.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto"/>
<p>If you want to create and view the sale order, then after filling the fields click on the button 'Create and View'</p>
<img src="assets/screenshots/4.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Create Purchase Order</h4>
<p>Go to Product variants -> select any products -> click on 'Quick Purchase Order' button</p>
<img src="assets/screenshots/5.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto"/>
<p>Fill the necessary fields to create the purchase order, once you click on 'create' the order will be created,
If you want to create and view the purchase order, then after filling the fields click on the button 'Create and View'</p>
<img src="assets/screenshots/6.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Update the Sale/Purchase orders</h4>
<p>In order to update an existing sale/purchase order with the selected product, the type needs to be set as 'Add to existing Orders'</p>
<img src="assets/screenshots/7.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto"/>
<p>Quick update to purchase orders</p>
<img src="assets/screenshots/8.png"
class="img-responsive" width="100%"
height="auto">
</div>
</div>
<!-- SUGGESTED PRODUCTS -->
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center"
style="text-align: center; padding: 2.5rem 1rem !important;">
<h2 style="color: #212529 !important;">Suggested Products</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item active" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/hotel_management_odoo"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/1.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/sale_discount_total"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/2.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/sale_report_advanced"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/crm_dashboard"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/4.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/barcode_scanning_sale_purchase"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/5.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/subscription_package"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/6.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1"
data-slide="prev"
style="left:-25px;width: 35px;color: #000;">
<span class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span> </a>
<a class="carousel-control-next" href="#demo1"
data-slide="next"
style="right:-25px;width: 35px;color: #000;">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF SUGGESTED PRODUCTS -->
<!-- OUR SERVICES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Services</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png"
class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png"
class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png"
class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png"
class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png"
class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png"
class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png"
class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</section>
<!-- END OF END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Industries</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/trading-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/pos-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/education-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/manufacturing-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/ecom-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/service-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/restaurant-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/hotel-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</section>
<!-- END OF END OF OUR INDUSTRIES -->
<!-- FOOTER -->
<!-- Footer Section -->
<section class="container" style="margin: 5rem auto 2rem;">
<div class="row" style="max-width:1540px;">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Need Help?</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
</div>
</div>
<!-- Contact Cards -->
<div class="row d-flex justify-content-center align-items-center"
style="max-width:1540px; margin: 0 auto 2rem auto;">
<div class="col-lg-12"
style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; ">
<div class="row mt-4">
<div class="col-lg-6">
<a href="mailto:odoo@cybrosys.com" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a>
</div>
<div class="col-lg-6">
<a href="https://api.whatsapp.com/send?phone=918606827707"
target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"><i
class="fa fa-whatsapp mr-2"></i>+91 86068
27707</a>
</div>
</div>
</div>
</div>
<!-- End of Contact Cards -->
</section>
<!-- Footer -->
<section class="oe_container" style="padding: 2rem 3rem 1rem;">
<div class="row"
style="max-width:1540px; margin: 0 auto; margin-right: 3rem; ">
<!-- Logo -->
<div class="col-lg-12 d-flex justify-content-center align-items-center"
style="margin-top: 3rem;">
<img src="https://www.cybrosys.com/images/logo.png"
width="200px" height="auto"/>
</div>
<!-- End of Logo -->
<div class="col-lg-12">
<hr
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
<!-- End of Footer Section -->
</div>
</div>
</section>
<!-- END OF FOOTER -->
</div>

15
sale_purchase_from_product/views/product_product_views.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inherited view of product variant form-->
<record model="ir.ui.view" id="product_product_quick_create_tree_view">
<field name="name">product.product.view.form.inherit.sale.purchase.from.product</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_product_tree_view"/>
<field name="arch" type="xml">
<xpath expr="//header/button[@name='action_open_label_layout']" position="after">
<button string="Quick Sale Order" name="%(sale_purchase_from_product.action_quick_sale_purchase_wizard)d" type="action"/>
<button string="Quick Purchase Order" name="%(sale_purchase_from_product.action_quick_purchase_create)d" type="action"/>
</xpath>
</field>
</record>
</odoo>

25
sale_purchase_from_product/wizard/__init__.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import quick_sale_line
from . import quick_purchase
from . import quick_purchase_line
from . import quick_sale_purchase

98
sale_purchase_from_product/wizard/quick_purchase.py

@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models, api
class QuickPurchaseOrder(models.TransientModel):
_name = 'quick.purchase'
_description = 'Quick Purchase'
def _purchase_ids_domain(self):
"""Function to return state"""
return [('state', 'in', ['draft', 'sent'])]
type = fields.Selection([('new_order', 'Create New Order'), ('existing_order', 'Add to existing Orders')],
required=True, default='new_order')
partner_id = fields.Many2one('res.partner', tring="Vendor")
order_date = fields.Datetime(string="Order Date")
user_id = fields.Many2one('res.users', default=lambda self: self.env.user, required=True, string="Buyer")
line_ids = fields.One2many('quick.purchase.line', 'order_id', string="Sale Order Line")
purchase_ids = fields.Many2many('purchase.order', string="Purchase Orders", domain=_purchase_ids_domain)
@api.model
def default_get(self, fields):
"""Function used to set default values for a wizard """
res = super(QuickPurchaseOrder, self).default_get(fields)
active_records = self.env.context.get('active_ids', [])
products = self.env['product.product'].search([('id', 'in', active_records)])
wizard_line = [(5, 0, 0)]
for rec in products:
line = (0, 0, {
'product_id': rec.id,
'product_qty': 1,
'price_unit': rec.lst_price,
'tax_id': rec.taxes_id.ids,
})
wizard_line.append(line)
res.update({
'line_ids': wizard_line})
return res
def action_create(self):
"""Action Create"""
order = self.env['purchase.order'].sudo().create({
'partner_id': self.partner_id.id,
'date_order': self.order_date if self.order_date else fields.datetime.now(),
'user_id': self.user_id.id,
'order_line': [(0, 0, {
'product_id': rec.product_id.id,
'product_qty': rec.product_qty,
'price_unit': rec.price_unit,
'taxes_id': rec.tax_id.ids,
}) for rec in self.line_ids]
})
return order
def action_update_order(self):
"""Update the products to existing orders"""
for order in self.purchase_ids:
order.update({
'order_line': [(0, 0, {
'product_id': rec.product_id.id,
'product_qty': rec.product_qty,
'price_unit': rec.price_unit,
'taxes_id': rec.tax_id.ids,
}) for rec in self.line_ids]
})
def action_create_view(self):
"""Create and view the created orders"""
order = self.action_create()
view = self.env['ir.model.data']._xmlid_lookup('purchase.purchase_order_form')[2]
return {
'type': 'ir.actions.act_window',
'res_model': 'purchase.order',
'res_id': order.id,
'view_mode': 'form',
'views': [(view, "form"), (False, "form")],
'view_id': view,
}

34
sale_purchase_from_product/wizard/quick_purchase_line.py

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class QuickPurchaseOrderLines(models.TransientModel):
_name = 'quick.purchase.line'
_description = 'Quick Purchase Line'
order_id = fields.Many2one('quick.purchase')
product_id = fields.Many2one('product.product', string='Product', required=True)
product_qty = fields.Float(string="Quantity")
price_unit = fields.Float(string="Unit Price", required=True)
tax_id = fields.Many2many(comodel_name='account.tax', string="Taxes")

53
sale_purchase_from_product/wizard/quick_purchase_views.xml

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Form view of wizard-->
<record model="ir.ui.view" id="quick_purchase_wizard_view_form">
<field name="name">Quick Purchase Order Create</field>
<field name="model">quick.purchase</field>
<field name="arch" type="xml">
<form string="Quick Create">
<group>
<field name="type" widget="radio"/>
</group>
<group>
<group>
<field name="partner_id" attrs="{'invisible':[('type','=','existing_order')]}"/>
<field name="purchase_ids" widget="many2many_tags" attrs="{'invisible':[('type','=','new_order')]}"/>
</group>
<group>
<field name="order_date" attrs="{'invisible':[('type','=','existing_order')]}"/>
<field name="user_id" attrs="{'invisible':[('type','=','existing_order')]}"/>
</group>
</group>
<notebook>
<page string="Order Line">
<field name="line_ids">
<tree editable="bottom">
<field name="product_id"/>
<field name="product_qty"/>
<field name="price_unit"/>
<field name="tax_id" widget="many2many_tags"/>
</tree>
</field>
</page>
</notebook>
<footer>
<button name="action_create" type="object" string="Create" class="oe_highlight" confirm="Purchase order created successfully"
attrs="{'invisible':[('type','=','existing_order')]}"/>
<button name="action_update_order" type="object" string="Update Order" class="oe_highlight" confirm="Purchase orders updated successfully"
attrs="{'invisible':[('type','=','new_order')]}"/>
<button name="action_create_view" type="object" string="Create and View" class="oe_highlight"
attrs="{'invisible':[('type','=','existing_order')]}"/>
<button string="Cancel" class="oe_link" special="cancel" confirm="Do you want to Discard?"/>
</footer>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_quick_purchase_create">
<field name="name">Purchase Quick Create</field>
<field name="res_model">quick.purchase</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</odoo>

33
sale_purchase_from_product/wizard/quick_sale_line.py

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class QuickSaleOrderLines(models.TransientModel):
_name = 'quick.sale.line'
_description = 'Quick Sale Lines'
product_id = fields.Many2one('product.product', string='Product', required=True)
product_uom_qty = fields.Float(string="Quantity")
price_unit = fields.Float(string="Unit Price", required=True)
tax_id = fields.Many2many(comodel_name='account.tax', string="Taxes")
order_id = fields.Many2one('quick.sale.purchase')

101
sale_purchase_from_product/wizard/quick_sale_purchase.py

@ -0,0 +1,101 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models
class QuickCreateOrder(models.TransientModel):
_name = 'quick.sale.purchase'
_description = 'Quick Sale Purchase Create'
def _sale_ids_domain(self):
"""list out only the draft orders"""
return [('state', 'in', ['draft', 'sent'])]
type = fields.Selection([('new_order', 'Create New Order'), ('existing_order', 'Add to existing Orders')],
required=True, default='new_order')
partner_id = fields.Many2one('res.partner', tring="Customer")
order_date = fields.Datetime(string="Order Date")
payment_term_id = fields.Many2one('account.payment.term', string="Payment Terms")
user_id = fields.Many2one('res.users', default=lambda self: self.env.user, required=True)
line_ids = fields.One2many('quick.sale.line', 'order_id', string="Sale Order Line")
sale_ids = fields.Many2many('sale.order', string="Sale Orders", domain=_sale_ids_domain)
@api.model
def default_get(self, fields):
"""Function used to set default values for a wizard """
res = super(QuickCreateOrder, self).default_get(fields)
active_records = self.env.context.get('active_ids', [])
products = self.env['product.product'].search([('id', 'in', active_records)])
wizard_line = [(5, 0, 0)]
for rec in products:
line = (0, 0, {
'product_id': rec.id,
'product_uom_qty': 1,
'price_unit': rec.lst_price,
'tax_id': rec.taxes_id.ids,
})
wizard_line.append(line)
res.update({
'line_ids': wizard_line})
return res
def action_update_order(self):
"""Update Sale Order"""
for order in self.sale_ids:
order.update({
'order_line': [(0, 0, {
'product_id': rec.product_id.id,
'product_uom_qty': rec.product_uom_qty,
'price_unit': rec.price_unit,
'tax_id': rec.tax_id.ids,
}) for rec in self.line_ids]
})
def action_create(self):
"""Create Sale Order"""
order = self.env['sale.order'].sudo().create({
'partner_id': self.partner_id.id,
'date_order': self.order_date if self.order_date else fields.datetime.now(),
'user_id': self.user_id.id,
'payment_term_id': self.payment_term_id.id,
'order_line': [(0, 0, {
'product_id': rec.product_id.id,
'product_uom_qty': rec.product_uom_qty,
'price_unit': rec.price_unit,
'tax_id': rec.tax_id.ids,
}) for rec in self.line_ids]
})
return order
def action_create_view(self):
"""Create and view the order created"""
order = self.action_create()
view = self.env['ir.model.data']._xmlid_lookup('sale.view_order_form')[2]
return {
'type': 'ir.actions.act_window',
'res_model': 'sale.order',
'res_id': order.id,
'view_mode': 'form',
'views': [(view, "form"), (False, "form")],
'view_id': view,
}

54
sale_purchase_from_product/wizard/quick_sale_purchase_views.xml

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Quick create wizard view -->
<record model="ir.ui.view" id="quick_sale_purchase_wizard_view_form">
<field name="name">Quick Create</field>
<field name="model">quick.sale.purchase</field>
<field name="arch" type="xml">
<form string="Quick Create">
<group>
<field name="type" widget="radio"/>
</group>
<group>
<group>
<field name="partner_id" attrs="{'invisible':[('type','=','existing_order')]}"/>
<field name="sale_ids" widget="many2many_tags" attrs="{'invisible':[('type','=','new_order')]}"/>
<field name="payment_term_id" attrs="{'invisible':[('type','=','existing_order')]}"/>
</group>
<group>
<field name="order_date" attrs="{'invisible':[('type','=','existing_order')]}"/>
<field name="user_id" attrs="{'invisible':[('type','=','existing_order')]}"/>
</group>
</group>
<notebook>
<page string="Order Line">
<field name="line_ids">
<tree editable="bottom">
<field name="product_id"/>
<field name="product_uom_qty"/>
<field name="price_unit"/>
<field name="tax_id" widget="many2many_tags"/>
</tree>
</field>
</page>
</notebook>
<footer>
<button name="action_create" type="object" string="Create" class="oe_highlight" confirm="Sales order created successfully"
attrs="{'invisible':[('type','=','existing_order')]}"/>
<button name="action_update_order" type="object" string="Update Order" class="oe_highlight" confirm="Sales orders updated successfully"
attrs="{'invisible':[('type','=','new_order')]}"/>
<button name="action_create_view" type="object" string="Create and View" class="oe_highlight"
attrs="{'invisible':[('type','=','existing_order')]}"/>
<button string="Cancel" class="oe_link" special="cancel" confirm="Do you want to Discard?"/>
</footer>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_quick_sale_purchase_wizard">
<field name="name">Sale/Purchase Quick Create</field>
<field name="res_model">quick.sale.purchase</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</odoo>
Loading…
Cancel
Save