Browse Source

Mar 14 : [RMV] Module Removed 'inventory_valuation_report'

pull/267/merge
RisvanaCybro 1 year ago
parent
commit
dd40257f36
  1. 46
      inventory_valuation_report/README.rst
  2. 24
      inventory_valuation_report/__init__.py
  3. 51
      inventory_valuation_report/__manifest__.py
  4. 22
      inventory_valuation_report/controllers/__init__.py
  5. 57
      inventory_valuation_report/controllers/valuation_report.py
  6. 6
      inventory_valuation_report/doc/RELEASE_NOTES.md
  7. 22
      inventory_valuation_report/report/__init__.py
  8. 150
      inventory_valuation_report/report/inventory_valuation_report.py
  9. 13
      inventory_valuation_report/report/inventory_valuation_reports.xml
  10. 223
      inventory_valuation_report/report/valuation_report_pdf_templates.xml
  11. 2
      inventory_valuation_report/security/ir.model.access.csv
  12. BIN
      inventory_valuation_report/static/description/assets/icons/check.png
  13. BIN
      inventory_valuation_report/static/description/assets/icons/chevron.png
  14. BIN
      inventory_valuation_report/static/description/assets/icons/cogs.png
  15. BIN
      inventory_valuation_report/static/description/assets/icons/consultation.png
  16. BIN
      inventory_valuation_report/static/description/assets/icons/ecom-black.png
  17. BIN
      inventory_valuation_report/static/description/assets/icons/education-black.png
  18. BIN
      inventory_valuation_report/static/description/assets/icons/hotel-black.png
  19. BIN
      inventory_valuation_report/static/description/assets/icons/license.png
  20. BIN
      inventory_valuation_report/static/description/assets/icons/lifebuoy.png
  21. BIN
      inventory_valuation_report/static/description/assets/icons/manufacturing-black.png
  22. BIN
      inventory_valuation_report/static/description/assets/icons/pos-black.png
  23. BIN
      inventory_valuation_report/static/description/assets/icons/puzzle.png
  24. BIN
      inventory_valuation_report/static/description/assets/icons/restaurant-black.png
  25. BIN
      inventory_valuation_report/static/description/assets/icons/service-black.png
  26. BIN
      inventory_valuation_report/static/description/assets/icons/trading-black.png
  27. BIN
      inventory_valuation_report/static/description/assets/icons/training.png
  28. BIN
      inventory_valuation_report/static/description/assets/icons/update.png
  29. BIN
      inventory_valuation_report/static/description/assets/icons/user.png
  30. BIN
      inventory_valuation_report/static/description/assets/icons/wrench.png
  31. BIN
      inventory_valuation_report/static/description/assets/misc/categories.png
  32. BIN
      inventory_valuation_report/static/description/assets/misc/check-box.png
  33. BIN
      inventory_valuation_report/static/description/assets/misc/compass.png
  34. BIN
      inventory_valuation_report/static/description/assets/misc/corporate.png
  35. BIN
      inventory_valuation_report/static/description/assets/misc/customer-support.png
  36. BIN
      inventory_valuation_report/static/description/assets/misc/cybrosys-logo.png
  37. BIN
      inventory_valuation_report/static/description/assets/misc/features.png
  38. BIN
      inventory_valuation_report/static/description/assets/misc/logo.png
  39. BIN
      inventory_valuation_report/static/description/assets/misc/pictures.png
  40. BIN
      inventory_valuation_report/static/description/assets/misc/pie-chart.png
  41. BIN
      inventory_valuation_report/static/description/assets/misc/right-arrow.png
  42. BIN
      inventory_valuation_report/static/description/assets/misc/star.png
  43. BIN
      inventory_valuation_report/static/description/assets/misc/support.png
  44. BIN
      inventory_valuation_report/static/description/assets/misc/whatsapp.png
  45. BIN
      inventory_valuation_report/static/description/assets/modules/1.png
  46. BIN
      inventory_valuation_report/static/description/assets/modules/2.png
  47. BIN
      inventory_valuation_report/static/description/assets/modules/3.png
  48. BIN
      inventory_valuation_report/static/description/assets/modules/4.gif
  49. BIN
      inventory_valuation_report/static/description/assets/modules/5.png
  50. BIN
      inventory_valuation_report/static/description/assets/modules/6.png
  51. BIN
      inventory_valuation_report/static/description/assets/screenshots/1.png
  52. BIN
      inventory_valuation_report/static/description/assets/screenshots/2.png
  53. BIN
      inventory_valuation_report/static/description/assets/screenshots/3.png
  54. BIN
      inventory_valuation_report/static/description/assets/screenshots/4.png
  55. BIN
      inventory_valuation_report/static/description/assets/screenshots/5.png
  56. BIN
      inventory_valuation_report/static/description/assets/screenshots/6.png
  57. BIN
      inventory_valuation_report/static/description/assets/screenshots/7.png
  58. BIN
      inventory_valuation_report/static/description/assets/screenshots/hero.gif
  59. BIN
      inventory_valuation_report/static/description/banner.png
  60. BIN
      inventory_valuation_report/static/description/icon.png
  61. 621
      inventory_valuation_report/static/description/index.html
  62. 30
      inventory_valuation_report/static/src/js/action_manager.js
  63. 22
      inventory_valuation_report/wizards/__init__.py
  64. 349
      inventory_valuation_report/wizards/valuation_report.py
  65. 92
      inventory_valuation_report/wizards/valuation_report_views.xml

46
inventory_valuation_report/README.rst

@ -1,46 +0,0 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/Agpl-3.0-standalone.html
:alt: License: AGPL-3
Inventory Valuation Report
===========================
* Inventory Valuation Report Module for Odoo 16
Installation
============
- www.odoo.com/documentation/16.0/setup/install.html
- Install our custom addon
License
-------
Affero General Public License, Version 3 (AGPL v3).
(https://www.gnu.org/licenses/Agpl-3.0-standalone.html)
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer:(V16) Sumith S, 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
==========
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
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>`__

24
inventory_valuation_report/__init__.py

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Sumith Sivan(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
from . import controllers
from . import report
from . import wizards

51
inventory_valuation_report/__manifest__.py

@ -1,51 +0,0 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Sumith Sivan(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
{
'name': 'Inventory Valuation Report',
'version': '16.0.1.0.0',
'summary': """This Module will print the report for your inventory
valuation""",
'description': """This Module helps to get a systematic analysis of
the inventory valuation""",
'category': 'Inventory',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'depends': ['base', 'stock', 'purchase', 'web', 'sale_management'],
'website': 'https://www.cybrosys.com',
'data': [
'security/ir.model.access.csv',
'wizards/valuation_report_views.xml',
'report/valuation_report_pdf_templates.xml',
'report/inventory_valuation_reports.xml',
],
'assets': {
'web.assets_backend': [
'inventory_valuation_report/static/src/js/action_manager.js',
],
},
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

22
inventory_valuation_report/controllers/__init__.py

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

57
inventory_valuation_report/controllers/valuation_report.py

@ -1,57 +0,0 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Sumith Sivan(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
"""Controller to print the xlsx report"""
import json
from odoo import http
from odoo.http import content_disposition, request
from odoo.tools import html_escape
class XLSXReportController(http.Controller):
"""Print xlsx report"""
@http.route('/xlsx_reports', type='http', auth='user', methods=['POST'],
csrf=False)
def get_report_xlsx(self, model, options, output_format, report_name,
token='tkn'):
uid = request.session.uid
report_obj = request.env[model].with_user(uid)
options = json.loads(options)
try:
if output_format == 'xlsx':
response = request.make_response(
None,
headers=[('Content-Type', 'application/vnd.ms-excel'), (
'Content-Disposition',
content_disposition(report_name + '.xlsx'))
]
)
report_obj.get_xlsx_report(options, response)
return response
except Exception as e:
se = http.serialize_exception(e)
error = {
'code': 200,
'message': 'Odoo Server Error',
'data': se
}
return request.make_response(html_escape(json.dumps(error)))

6
inventory_valuation_report/doc/RELEASE_NOTES.md

@ -1,6 +0,0 @@
## Module <inventory_valuation_report>
#### 31.01.2024
#### Version 16.0.1.0.0
#### ADD
- Initial commit for Inventory Valuation Report.

22
inventory_valuation_report/report/__init__.py

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

150
inventory_valuation_report/report/inventory_valuation_report.py

@ -1,150 +0,0 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Sumith Sivan(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
"""Model to get the report values"""
from odoo import api, models
from odoo.exceptions import ValidationError
class InventoryReport(models.AbstractModel):
_name = "report.inventory_valuation_report.report_inventory_valuation"
_description = "Model to print the pdf report of the inventory Valuation"
@api.model
def _get_report_values(self, doc_ids, data):
"""
Prepare the values for the inventory valuation PDF report.
:param docids: the IDs of the records that will be used to generate the report.
:type docids: list
:param data: the data used to filter the records that will be displayed in the report.
:type data: dict
:return: a dictionary containing the report data.
:rtype: dict
:raise: ValidationError if no data is found that matches the specified filters.
This method prepares the data that will be used to generate the inventory valuation PDF report.
It takes a list of document IDs and a dictionary of filters as input, and returns a dictionary
containing the data that will be displayed in the report."""
product_id = []
query = """select product_product.id as product_id,product_template.default_code as default_code ,
product_template.name->>'en_US' as name, product_category.name as category from product_template join
product_product on product_product.product_tmpl_id = product_template.id join product_category on
product_template.categ_id = product_category.id"""
def get_data(res):
val_sum = 0
for rec in res:
product_id.append(rec['product_id'])
for i in range(len(res)):
product = self.env['product.product'].browse(product_id[i])
purchase_count = self.env['purchase.order.line'].search(
[('product_id', '=', product_id[i])])
valuation = self.env['stock.valuation.layer'].search(
[('product_id', '=', product_id[i])],
order="create_date desc", limit=1)
internal_locations = self.env['stock.location'].search(
[('usage', '=', 'internal')])
internal_qty = 0
for quant in internal_locations:
stock_quant = self.env['stock.quant'].search(
[('location_id', '=', quant.id),
('product_id', '=', product_id[i])]
)
if product.tracking == 'lot':
lot_qty_count = sum(
qty.available_quantity for qty in
stock_quant.mapped(
'lot_id.quant_ids'))
internal_qty += lot_qty_count
else:
internal_qty += sum(
stock_quant.mapped('available_quantity'))
adjustment_rec = self.env['stock.quant'].search(
[('product_id', '=', product_id[i])],
order="create_date desc", limit=1)
adjustment = adjustment_rec.inventory_diff_quantity
res[i][
'costing_method'] = product.categ_id.property_cost_method
res[i]['standard_price'] = product.standard_price
res[i]['sale_qty'] = product.sales_count
res[i]['received_qty'] = sum(
purchase_count.mapped('product_uom_qty'))
res[i]['beginning'] = res[i]['received_qty'] - res[i][
'sale_qty']
res[i]['valuation'] = valuation.value
res[i]['internal'] = internal_qty
res[i]['adjustment'] = adjustment
val_sum += valuation.value
res[i]['valuation_sum'] = val_sum
return res
if data['my_company_id']:
new_query = f""" join res_company on res_company.id=product_template.company_id where res_company.id='{data['my_company_id']}'"""
query += new_query
if data['from_date']:
new_query = f""" and product_product.create_date >= '{data['from_date']}'"""
query += new_query
if data['end_date']:
new_query = f""" and product_product.create_date <= '{data['end_date']}'"""
query += new_query
product = tuple(data['products'])
categories = tuple(data['categories'])
if data['filter_by'] == 'product':
if len(product) == 1:
new_query = f""" and product_product.id = {product[0]} """
query += new_query
elif len(product) > 1:
new_query = f""" and product_product.id in {product} """
query += new_query
else:
raise ValidationError('No Product Found')
elif data['filter_by'] == 'category':
if data['categories']:
if len(categories) == 1:
new_query = f""" and product_category.id = {categories[0]}"""
query += new_query
elif len(categories) > 1:
new_query = f""" and product_category.id in {categories} """
query += new_query
else:
raise ValidationError('No Category Found')
self.env.cr.execute(query)
record = self.env.cr.dictfetchall()
if len(record) > 0:
result = get_data(record)
return {
'data': data,
'company': self.env.company,
'result': result,
}
else:
raise ValidationError('No Data Found !')

13
inventory_valuation_report/report/inventory_valuation_reports.xml

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--The report generated by this action is called "Valuation Report" and uses the
"inventory_valuation_report.inventory_pdf" report template to generate a PDF file -->
<record id="action_report_valuation_report" model="ir.actions.report">
<field name="name">Valuation Report</field>
<field name="model">valuation.report</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">inventory_valuation_report.report_inventory_valuation</field>
<field name="report_file">inventory_valuation_report.report_inventory_valuation</field>
<field name="print_report_name">Inventory Valuation Report</field>
</record>
</odoo>

223
inventory_valuation_report/report/valuation_report_pdf_templates.xml

@ -1,223 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="report_inventory_valuation">
<t t-call="web.html_container">
<t t-set="company" t-value="company"/>
<t t-call="web.external_layout">
<br/>
<div class="page">
<div class="oe_structure"/>
<t t-if="not data['summary']">
<!-- Template for PDF report -->
<table class="table table-sm table-striped mt-4">
<h4 style="text-align:center; color:skyblue; font-size:40px;">
<U>
<B>Inventory Valuation Report</B>
</U>
</h4>
<tr>
<th>Company</th>
<th>Warehouse</th>
<t t-if="data['from_date']">
<th>Start Date</th>
</t>
<t t-if="data['end_date']">
<th>End Date</th>
</t>
<t>
<th>Amount in Currency</th>
</t>
</tr>
<tr>
<th>
<t t-esc="data['my_company']"/>
</th>
<th>
<t t-set="count" t-value="1"/>
<t t-foreach="data['warehouse']"
t-as="warehouse">
<t t-if="count==1">
<t t-esc="warehouse"/>
</t>
<t t-else="">
<t t-esc="warehouse"/>
</t>
<t t-set="count"
t-value="count+1"/>
</t>
</th>
<th t-if="data['from_date']">
<t t-esc="data['from_date']"/>
</th>
<th t-if="data['end_date']">
<t t-esc="data['end_date']"/>
</th>
<th>
<t t-esc="data['currency']"/>
</th>
</tr>
</table>
<table class="table table-sm o_main_table">
<tr>
<th>Default Code</th>
<th>Name</th>
<th>Category</th>
<th>Costing Method</th>
<th>Cost Price</th>
<th>Beginning</th>
<th>Internal</th>
<th>Received</th>
<th>Sales</th>
<th>Adjustment</th>
<th>Ending</th>
<th>Valuation</th>
</tr>
<t t-foreach="result" t-as="res">
<tr>
<th>
<t t-esc="res['default_code']"/>
</th>
<th>
<t t-esc="res['name']"/>
</th>
<th>
<t t-esc="res['category']"/>
</th>
<th>
<t t-esc="res['costing_method']"/>
</th>
<th>
<t t-esc="res['standard_price']"/>
</th>
<th>
<t t-esc="res['received_qty'] - res['sale_qty'] "/>
</th>
<th>
<t t-esc="res['internal']"/>
</th>
<th>
<t t-esc="res['received_qty']"/>
</th>
<th>
<t t-esc="res['sale_qty']"/>
</th>
<th>
<t t-esc="res['adjustment']"/>
</th>
<th>
<t t-esc="res['beginning'] + res['received_qty'] - res['sale_qty'] + res['adjustment']"/>
</th>
<th>
<t t-esc="res['valuation']"/>
</th>
</tr>
</t>
</table>
</t>
<!-- Template for Summary report -->
<t t-if="data['summary']">
<h4 style="text-align:center; color:skyblue; font-size:40px;">
<U>
<B>Summary Valuation Report</B>
</U>
</h4>
<table class="table table-sm table-striped mt-4">
<tr>
<th>Company</th>
<th>Warehouse</th>
<t t-if="data['from_date']">
<th>Start Date</th>
</t>
<t t-if="data['end_date']">
<th>End Date</th>
</t>
<th>Amount in Currency</th>
</tr>
<tr>
<th>
<t t-esc="data['my_company']"/>
</th>
<th>
<t t-set="count" t-value="1"/>
<t t-foreach="data['warehouse']"
t-as="warehouse">
<t t-if="count==1">
<t t-esc="warehouse"/>
</t>
<t t-else="">
<t t-esc="warehouse"/>
</t>
<t t-set="count"
t-value="count+1"/>
</t>
</th>
<th t-if="data['from_date']">
<t t-esc="data['from_date']"/>
</th>
<th t-if="data['end_date']">
<t t-esc="data['end_date']"/>
</th>
<th>
<t t-esc="data['currency']"/>
</th>
</tr>
</table>
<br/>
<table class="table table-sm o_main_table">
<tr>
<th>Category</th>
<th>Beginning</th>
<th>Internal</th>
<th>Received</th>
<th>Sales</th>
<th>Adjustment</th>
<th>Ending</th>
<th>Valuation</th>
</tr>
<t t-foreach="result" t-as="res">
<tr>
<th>
<t t-esc="res['category']"/>
</th>
<th>
<t t-esc="res['received_qty'] - res['sale_qty'] "/>
</th>
<th>
<t t-esc="res['internal']"/>
</th>
<th>
<t t-esc="res['received_qty']"/>
</th>
<th>
<t t-esc="res['sale_qty']"/>
</th>
<th>
<t t-esc="res['adjustment']"/>
</th>
<th>
<t t-esc="res['beginning'] + res['received_qty'] - res['sale_qty'] + res['adjustment']"/>
</th>
<th>
<t t-esc="res['valuation']"/>
</th>
</tr>
</t>
</table>
</t>
<div style="text-align:right;font-size:25px; width:450px; margin-left:400px;">
<table class="table table-condensed"
style="align:right">
<tr>
<th style="border-bottom:none;">Total
Value:
<t t-esc="res['valuation_sum']"/>
</th>
</tr>
</table>
</div>
</div>
</t>
</t>
</template>
</odoo>

2
inventory_valuation_report/security/ir.model.access.csv

@ -1,2 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_valuation_report,valuation.report,model_valuation_report,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_valuation_report valuation.report model_valuation_report base.group_user 1 1 1 1

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

BIN
inventory_valuation_report/static/description/assets/misc/categories.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

BIN
inventory_valuation_report/static/description/assets/misc/check-box.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

BIN
inventory_valuation_report/static/description/assets/misc/compass.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

BIN
inventory_valuation_report/static/description/assets/misc/corporate.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

BIN
inventory_valuation_report/static/description/assets/misc/customer-support.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

BIN
inventory_valuation_report/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

BIN
inventory_valuation_report/static/description/assets/misc/features.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 589 B

BIN
inventory_valuation_report/static/description/assets/misc/logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

BIN
inventory_valuation_report/static/description/assets/misc/pictures.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

BIN
inventory_valuation_report/static/description/assets/misc/pie-chart.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

BIN
inventory_valuation_report/static/description/assets/misc/right-arrow.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 967 B

BIN
inventory_valuation_report/static/description/assets/misc/star.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

BIN
inventory_valuation_report/static/description/assets/misc/support.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

BIN
inventory_valuation_report/static/description/assets/misc/whatsapp.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

BIN
inventory_valuation_report/static/description/assets/modules/4.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

BIN
inventory_valuation_report/static/description/banner.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

BIN
inventory_valuation_report/static/description/icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

621
inventory_valuation_report/static/description/index.html

@ -1,621 +0,0 @@
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Inventory Valuation Report</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Get Reports of your stock adjustments.</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif"
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Overview
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
This module prints the Inventory Valuation Report of the stock
adjustments in pdf and xlsx format.The module also has a feature to
print the summary report of the valuation report.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Features
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Print Pdf Report for an Inventory Valuation.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Print Xslx Report for an Inventory Valuation.</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Custom Filter based on Product and Category.</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Inventory Valuation Report</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Select the inventory valuation report from reporting.</p>
<img src="assets/screenshots/1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Wizard for Report Printing.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"></p>
<img src="assets/screenshots/2.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Customized Filter based on Product and Category.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"></p>
<img src="assets/screenshots/3.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Enable the Product Filter to select the Product.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"></p>
<img src="assets/screenshots/4.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Enable the Category Filter to select the Product Category.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"></p>
<img src="assets/screenshots/5.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Printing Summary Valuation Report.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"></p>
<img src="assets/screenshots/6.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Print Valuation Report in Xslx.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"></p>
<img src="assets/screenshots/7.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2" style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/custom_list_view/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" 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/16.0/list_view_sticky_header/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" 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/16.0/login_user_detail/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/auto_database_backup/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" src="assets/modules/4.gif">
</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/16.0/one2many_mass_select_delete/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" 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/16.0/digital_signature/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;" 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="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="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 RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<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>
</div>
<!-- END OF END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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>
</div>
<!-- END OF END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

30
inventory_valuation_report/static/src/js/action_manager.js

@ -1,30 +0,0 @@
/** @odoo-module */
/**
* @module ir.actions.report handlers
* @description Contains handlers for generating XLSX reports in Odoo
*/
import { registry } from "@web/core/registry";
import { download } from "@web/core/network/download";
import framework from 'web.framework';
import session from 'web.session';
/**
* Add handler for generating XLSX reports.
* @param {Object} action - The action object containing report information
* @returns {Promise} - A Promise that resolves when the report is generated and downloaded
*/
registry.category("ir.actions.report handlers").add("xlsx", async (action) => {
if (action.report_type === 'xlsx') {
framework.blockUI();
var def = $.Deferred();
session.get_file({
url: '/xlsx_reports',
data: action.data,
success: def.resolve.bind(def),
error: (error) => this.call('crash_manager', 'rpc_error', error),
complete: framework.unblockUI,
});
return def;
}
});

22
inventory_valuation_report/wizards/__init__.py

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

349
inventory_valuation_report/wizards/valuation_report.py

@ -1,349 +0,0 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Sumith Sivan(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
import io
import json
from odoo import api, fields, models
from odoo.exceptions import ValidationError
from odoo.tools import date_utils
try:
from odoo.tools.misc import xlsxwriter
except ImportError:
import xlsxwriter
class WizardReport(models.TransientModel):
"""Valuation report xlsx template """
_name = 'valuation.report'
company_id = fields.Many2one("res.company", sting="Company", required=True)
warehouse_ids = fields.Many2many("stock.warehouse", string="Warehouse",
required=True)
product_ids = fields.Many2many("product.product",
help="Select the products")
category_ids = fields.Many2many("product.category")
filter_by = fields.Selection(
[('product', 'Product'), ('category', 'Category')], string='Filter By')
start_date = fields.Datetime(string="Start Date")
end_date = fields.Datetime(string="End Date", )
summary = fields.Boolean(string="Summary", help="Print Summary Report")
@api.onchange('company_id')
def _compute_warehouse(self):
if self.company_id:
self.warehouse_ids = self.env['stock.warehouse'].search([
('company_id', '=', self.company_id.id)
]).ids
else:
self.warehouse_ids = False
return {'domain': {
'warehouse_ids': [('company_id', '=', self.company_id.id)]}}
def action_btn_pdf(self):
"""Function to print pdf report"""
product = self.env['product.product'].search(
[('detailed_type', '=', 'product')])
default_code = []
product_ids = []
category_ids = []
warehouse = [rec.name for rec in self.warehouse_ids]
if self.filter_by == "product":
default_code = [rec.default_code for rec in self.product_ids]
product_ids = [int(rec.id) for rec in self.product_ids]
if self.filter_by == "category":
category_ids = [int(rec.id) for rec in self.category_ids]
data = {
'from_date': self.start_date,
'end_date': self.end_date,
'my_company': self.company_id.name,
'my_company_id': self.company_id.id,
'currency': self.company_id.currency_id.name,
'warehouse': warehouse,
'filter_by': self.filter_by,
'products': product_ids,
'default_code': default_code,
'categories': category_ids,
'summary': self.summary,
'all_product': product,
}
return self.env.ref(
'inventory_valuation_report.action_report_valuation_report').report_action(
self,
data=data)
def action_btn_xlsx(self):
"""Function to print xlsx report"""
if self.warehouse_ids:
warehouse_names = [rec.name for rec in self.warehouse_ids]
warehouse = ', '.join(warehouse_names)
if str(self.start_date) > str(self.end_date):
raise ValidationError('Start Date must be less than End Date')
query = """select product_product.id as product_id,product_template.default_code as default_code ,
product_template.name->>'en_US' as name, product_category.name as category from product_template join
product_product on product_product.product_tmpl_id = product_template.id join product_category on
product_template.categ_id = product_category.id """
def get_data(res):
product_id = [rec['product_id'] for rec in res]
for i in range(len(res)):
product = self.env['product.product'].browse(product_id[i])
purchase_count = self.env['purchase.order.line'].search(
[('product_id', '=', product_id[i])])
valuation = self.env['stock.valuation.layer'].search(
[('product_id', '=', product_id[i])],
order="create_date desc", limit=1)
internal_locations = self.env['stock.location'].search(
[('usage', '=', 'internal')])
internal_qty = 0
for quant in internal_locations:
tracking = product.tracking
if tracking == 'lot':
lot_qty = self.env['stock.lot'].search(
[('product_id', '=', product_id[i])])
lot_qty_count = self.env['stock.quant'].search([
('product_id', '=', product_id[i]),
('lot_id', 'in', lot_qty.ids),
('location_id', '=', quant.id)
])
internal_qty += sum(
lot_qty_count.mapped('available_quantity'))
else:
internal_stock_quant = self.env['stock.quant'].search(
[('location_id', '=', quant.id),
('product_id', '=', product_id[i])])
internal_qty += internal_stock_quant.available_quantity
adjustment_rec = self.env['stock.quant'].search(
[('product_id', '=', product_id[i])],
order="create_date desc", limit=1)
adjustment = adjustment_rec.inventory_diff_quantity
res[i][
'costing_method'] = product.categ_id.property_cost_method
res[i]['standard_price'] = product.standard_price
res[i]['sale_qty'] = product.sales_count
res[i]['received_qty'] = sum(
purchase_count.mapped('product_uom_qty'))
res[i]['beginning'] = res[i]['received_qty'] - res[i][
'sale_qty']
res[i]['valuation'] = valuation.value
res[i]['internal'] = internal_qty
res[i]['adjustment'] = adjustment
return res
product_ids = [rec.id for rec in self.product_ids]
category_ids = [rec.id for rec in self.category_ids]
if self.company_id:
query += f""" join res_company on res_company.id=product_template.company_id where res_company.id = '{self.company_id.id}'"""
if self.start_date:
query += f""" and product_product.create_date >= '{self.start_date}'"""
if self.end_date:
query += f""" and product_product.create_date <= '{self.end_date}'"""
product = tuple(product_ids)
categories = tuple(category_ids)
if self.filter_by == 'product':
if len(product) == 1:
query += f""" and product_product.id = {product[0]} """
elif len(product) > 1:
query += f""" and product_product.id in {product} """
else:
raise ValidationError('No Product Found')
if self.filter_by == 'category':
if len(categories) == 1:
query += f""" and product_category.id = {categories[0]}"""
elif len(categories) > 1:
query += f""" and product_category.id in {categories} """
else:
raise ValidationError('No Category Found')
self.env.cr.execute(query)
record = self.env.cr.dictfetchall()
result = get_data(record)
data = {
'from_date': self.start_date,
'end_date': self.end_date,
'my_company': self.company_id.name,
'currency': self.company_id.currency_id.name,
'warehouse': warehouse,
'summary': self.summary,
'excel_result': result
}
return {
'type': 'ir.actions.report',
'report_type': 'xlsx',
'data': {
'model': 'valuation.report',
'output_format': 'xlsx',
'options': json.dumps(data, default=date_utils.json_default),
'report_name': 'Excel Report Name',
}
}
def get_xlsx_report(self, data, response):
"""xlsx report template"""
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
sheet = workbook.add_worksheet()
cell_format = workbook.add_format({'font_size': '12px'})
head = workbook.add_format(
{'align': 'center', 'bold': True, 'font_size': '20px'})
txt = workbook.add_format({'align': 'center', 'font_size': '10px'})
columns = ['C:C', 'B:B', 'D:D', 'E:E', 'F:F', 'G:G', 'H:H', 'I:I',
'J:J', 'L:L', 'M:M']
for column in columns:
sheet.set_column(column, 20)
if data['summary']:
sheet.merge_range('B2:I3', 'Summary Valuation REPORT', head)
if data['from_date']:
sheet.write('B5', 'Start Date', cell_format)
sheet.write('B6', data['from_date'], txt)
if data['end_date']:
sheet.write('D5', 'End Date', cell_format)
sheet.write('D6', data['end_date'], txt)
if data['my_company']:
sheet.write('F5', 'Company', cell_format)
sheet.write('F6', data['my_company'], txt)
if data['warehouse']:
sheet.merge_range('G5:H5', 'Warehouse(s)', cell_format)
sheet.merge_range('G6:H6', data['warehouse'], txt)
if data['currency']:
sheet.write('I5', 'Currency', cell_format)
sheet.write('I6', data['currency'], txt)
sheet.write('B8', 'Sl.No', txt)
sheet.write('C8', 'Category', txt)
sheet.write('D8', 'Costing Method', txt)
sheet.write('E8', 'Cost Price', txt)
sheet.write('F8', 'Beginning', txt)
sheet.write('G8', 'Internal', txt)
sheet.write('H8', 'Received', txt)
sheet.write('I8', 'Sales', txt)
sheet.write('J8', 'Adjustment', txt)
sheet.write('K8', 'Ending', txt)
sheet.write('L8', 'Valuation', txt)
row_number = 9
column_number = 1
count = 1
for i in data['excel_result']:
sheet.write(row_number, column_number, count, txt)
sheet.write(row_number, column_number + 1, i['category'], txt)
sheet.write(row_number, column_number + 2, i['costing_method'],
txt)
sheet.write(row_number, column_number + 3, i['standard_price'],
txt)
sheet.write(row_number, column_number + 4,
i['received_qty'] - i['sale_qty'], txt)
sheet.write(row_number, column_number + 5, i['internal'], txt)
sheet.write(row_number, column_number + 6, i['received_qty'],
txt)
sheet.write(row_number, column_number + 7, i['sale_qty'], txt)
sheet.write(row_number, column_number + 8, i['adjustment'],
txt)
sheet.write(row_number, column_number + 9,
i['beginning'] + i['received_qty'] - i['sale_qty'] +
i['adjustment'], txt)
sheet.write(row_number, column_number + 10, i['valuation'],
txt)
row_number += 1
count += 1
workbook.close()
output.seek(0)
response.stream.write(output.read())
output.close()
else:
sheet.merge_range('B2:I3', 'Inventory Valuation REPORT', head)
if data['from_date']:
sheet.write('B5', 'Start Date', cell_format)
sheet.write('B6', data['from_date'], txt)
if data['end_date']:
sheet.write('D5', 'End Date', cell_format)
sheet.write('D6', data['end_date'], txt)
if data['my_company']:
sheet.write('F5', 'Company', cell_format)
sheet.write('F6', data['my_company'], txt)
if data['warehouse']:
sheet.merge_range('G5:H5', 'Warehouse(s)', cell_format)
sheet.merge_range('G6:H6', data['warehouse'], txt)
if data['currency']:
sheet.write('I5', 'Currency', cell_format)
sheet.write('I6', data['currency'], txt)
sheet.write('B9', 'Sl.No', txt)
sheet.write('C9', 'Default Code', txt)
sheet.write('D9', 'Name', txt)
sheet.write('E9', 'Category', txt)
sheet.write('F9', 'Costing Method', txt)
sheet.write('G9', 'Cost Price', txt)
sheet.write('H9', 'Beginning', txt)
sheet.write('I9', 'Internal', txt)
sheet.write('J9', 'Received', txt)
sheet.write('K9', 'Sales', txt)
sheet.write('L9', 'Adjustment', txt)
sheet.write('M9', 'Ending', txt)
sheet.write('N9', 'Valuation', txt)
row_number = 10
column_number = 1
count = 1
for i in data['excel_result']:
sheet.write(row_number, column_number, count, txt)
sheet.write(row_number, column_number + 1, i['default_code'],
txt)
sheet.write(row_number, column_number + 2, i['name'], txt)
sheet.write(row_number, column_number + 3, i['category'], txt)
sheet.write(row_number, column_number + 4, i['costing_method'],
txt)
sheet.write(row_number, column_number + 5, i['standard_price'],
txt)
sheet.write(row_number, column_number + 6,
i['received_qty'] - i['sale_qty'], txt)
sheet.write(row_number, column_number + 7, i['internal'], txt)
sheet.write(row_number, column_number + 8, i['received_qty'],
txt)
sheet.write(row_number, column_number + 9, i['sale_qty'], txt)
sheet.write(row_number, column_number + 10, i['adjustment'],
txt)
sheet.write(row_number, column_number + 11,
i['beginning'] + i['received_qty'] - i['sale_qty'] +
i['adjustment'], txt)
sheet.write(row_number, column_number + 12, i['valuation'],
txt)
row_number += 1
count += 1
workbook.close()
output.seek(0)
response.stream.write(output.read())
output.close()

92
inventory_valuation_report/wizards/valuation_report_views.xml

@ -1,92 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This XML code defines a wizard view for the "Inventory Valuation Report" in Odoo.
The view is identified by the record with the id "valuation_report_wizard" and the model "ir.ui.view".
The view contains a form with various fields and buttons for user input and actions.
-->
<!--Display a menu to allow the user to generate an inventory valuation report using a wizard.-->
<record id="valuation_report_wizard" model="ir.ui.view">
<field name="name">valuation.report.wizard</field>
<field name="model">valuation.report</field>
<field name="arch" type="xml">
<form>
<!-- Template for PDF report -->
<div class="row">
<div class="col-sm-4">
<h2>Company</h2>
<group>
<field name="company_id"/>
</group>
<br/>
<h2>Filter By</h2>
<group>
<field name="filter_by" widget="radio"/>
</group>
</div>
<div class="col-sm-4">
<h2>Warehouse</h2>
<group>
<field name="warehouse_ids"
widget="many2many_tags"/>
</group>
<br/>
<group>
<field name="summary"/>
</group>
</div>
<div class="col-sm-4">
<h2>Valuation</h2>
<group>
<field name="start_date"/>
<field name="end_date"/>
</group>
<br/>
</div>
<div>
<field name="product_ids"
attrs="{'invisible': [('filter_by', '!=', 'product')]}">
<tree string="Name" editable="bottom">
<field name="name" string="Name"/>
</tree>
</field>
</div>
<div>
<field name="category_ids"
attrs="{'invisible': [('filter_by', '!=', 'category')]}">
<tree string="Name" editable="bottom">
<field name="name" string="Name"/>
</tree>
</field>
</div>
<footer>
<button name="action_btn_pdf" string="Pdf"
type="object" class="btn-primary"/>
<button name="action_btn_xlsx" string="Xlsx"
type="object" default_focus="1"
class="oe_highlight"/>
<button string="Cancel" class="btn btn-default"
special="cancel"/>
</footer>
</div>
</form>
</field>
</record>
<!-- This XML code defines an action window for the "Inventory Valuation Report" in Odoo.-->
<record id="action_valuation_report" model="ir.actions.act_window">
<field name="name">Report</field>
<field name="res_model">valuation.report</field>
<field name="view_mode">form</field>
<field name="view_id" ref="valuation_report_wizard"/>
<field name="target">new</field>
</record>
<!-- Add the menu item for the Inventory Valuation Report -->
<menuitem id="menu_valuation_report"
name="Inventory Valuation Report"
action="action_valuation_report"
parent="stock.menu_warehouse_report"
/>
</odoo>
Loading…
Cancel
Save