16 changed files with 493 additions and 0 deletions
			
			
		| @ -0,0 +1,30 @@ | |||||
|  | ================================= | ||||
|  | Export Product Stock in Excel v11 | ||||
|  | ================================= | ||||
|  | This module helps you to take current stock report for all products in each warehouse. | ||||
|  | 
 | ||||
|  | Tech | ||||
|  | ==== | ||||
|  | * [Python] - Models | ||||
|  | * [XML] - Odoo views | ||||
|  | 
 | ||||
|  | Installation | ||||
|  | ============ | ||||
|  | - www.odoo.com/documentation/11.0/setup/install.html | ||||
|  | - Install our custom addon | ||||
|  | 
 | ||||
|  | Bug Tracker | ||||
|  | =========== | ||||
|  | Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | ||||
|  | 
 | ||||
|  | Credits | ||||
|  | ======= | ||||
|  | * Cybrosys Techno Solutions <https://www.cybrosys.com> | ||||
|  | 
 | ||||
|  | Maintainer | ||||
|  | ---------- | ||||
|  | 
 | ||||
|  | This module is maintained by Cybrosys Technologies. | ||||
|  | 
 | ||||
|  | For support and more information, please visit https://www.cybrosys.com. | ||||
|  | 
 | ||||
| @ -0,0 +1,23 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2018-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | ||||
|  | #    Author: Cybrosys(<https://www.cybrosys.com>) | ||||
|  | 
 | ||||
|  | #    This program is free software: you can modify | ||||
|  | #    it under the terms of the GNU Affero General Public License (AGPL) as | ||||
|  | #    published by the Free Software Foundation, either version 3 of the | ||||
|  | #    License, or (at your option) any later version. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU Affero General Public License for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU Affero General Public License | ||||
|  | #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ################################################################################### | ||||
|  | from . import report | ||||
|  | from . import models | ||||
| @ -0,0 +1,46 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2018-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | ||||
|  | #    Author: Cybrosys(<https://www.cybrosys.com>) | ||||
|  | 
 | ||||
|  | #    This program is free software: you can modify | ||||
|  | #    it under the terms of the GNU Affero General Public License (AGPL) as | ||||
|  | #    published by the Free Software Foundation, either version 3 of the | ||||
|  | #    License, or (at your option) any later version. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU Affero General Public License for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU Affero General Public License | ||||
|  | #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ################################################################################### | ||||
|  | { | ||||
|  |     'name': 'Export Product Stock in Excel', | ||||
|  |     'version': '11.0.1.0.0', | ||||
|  |     'summary': "Current Stock Report for all Products in each Warehouse", | ||||
|  |     'category': 'Warehouse', | ||||
|  |     'author': 'Cybrosys Techno Solutions', | ||||
|  |     'maintainer': 'Cybrosys Techno Solutions', | ||||
|  |     'company': 'Cybrosys Techno Solutions', | ||||
|  |     'website': 'https://www.cybrosys.com', | ||||
|  |     'depends': [ | ||||
|  |                 'base', | ||||
|  |                 'stock', | ||||
|  |                 'sale', | ||||
|  |                 'purchase', | ||||
|  |                 'report_xlsx' | ||||
|  |                 ], | ||||
|  |     'data': [ | ||||
|  |             'views/wizard_view.xml', | ||||
|  |             ], | ||||
|  |     'images': ['static/description/banner.jpg'], | ||||
|  |     'license': "AGPL-3", | ||||
|  |     'installable': True, | ||||
|  |     'auto_install': False, | ||||
|  |     'auto_install': False, | ||||
|  | } | ||||
| @ -0,0 +1,23 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2018-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | ||||
|  | #    Author: Cybrosys(<https://www.cybrosys.com>) | ||||
|  | 
 | ||||
|  | #    This program is free software: you can modify | ||||
|  | #    it under the terms of the GNU Affero General Public License (AGPL) as | ||||
|  | #    published by the Free Software Foundation, either version 3 of the | ||||
|  | #    License, or (at your option) any later version. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU Affero General Public License for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU Affero General Public License | ||||
|  | #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ################################################################################### | ||||
|  | from . import res_partner | ||||
|  | from . import wizard | ||||
| @ -0,0 +1,22 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | 
 | ||||
|  | from odoo import models, fields | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class Partner(models.Model): | ||||
|  |     _inherit = 'res.partner' | ||||
|  | 
 | ||||
|  |     supplier_id = fields.Many2many('wizard.stock.history', 'supp_wiz_rel', 'wiz', 'supp', invisible=True) | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class Category(models.Model): | ||||
|  |     _inherit = 'product.category' | ||||
|  | 
 | ||||
|  |     obj = fields.Many2many('wizard.stock.history', 'categ_wiz_rel', 'wiz', 'categ', invisible=True) | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class Warehouse(models.Model): | ||||
|  |     _inherit = 'stock.warehouse' | ||||
|  | 
 | ||||
|  |     obj = fields.Many2many('wizard.stock.history',  'wh_wiz_rel', 'wiz', 'wh', invisible=True) | ||||
|  | 
 | ||||
| @ -0,0 +1,23 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | from datetime import datetime | ||||
|  | from odoo import models, fields, api | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class StockReport(models.TransientModel): | ||||
|  |     _name = "wizard.stock.history" | ||||
|  |     _description = "Current Stock History" | ||||
|  | 
 | ||||
|  |     warehouse = fields.Many2many('stock.warehouse', 'wh_wiz_rel', 'wh', 'wiz', string='Warehouse', required=True) | ||||
|  |     category = fields.Many2many('product.category', 'categ_wiz_rel', 'categ', 'wiz', string='Warehouse') | ||||
|  | 
 | ||||
|  |     @api.multi | ||||
|  |     def export_xls(self): | ||||
|  |         context = self._context | ||||
|  |         datas = {'ids': context.get('active_ids', [])} | ||||
|  |         datas['model'] = 'wizard.stock.history' | ||||
|  |         datas['form'] = self.read()[0] | ||||
|  |         for field in datas['form'].keys(): | ||||
|  |             if isinstance(datas['form'][field], tuple): | ||||
|  |                 datas['form'][field] = datas['form'][field][0] | ||||
|  |         if context.get('xls_export'): | ||||
|  |             return self.env.ref('export_stockinfo_xls.stock_xlsx').report_action(self, data=datas) | ||||
| @ -0,0 +1,3 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | 
 | ||||
|  | from . import current_stock_xls | ||||
| @ -0,0 +1,178 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | 
 | ||||
|  | import datetime | ||||
|  | from datetime import datetime | ||||
|  | import pytz | ||||
|  | from odoo import models | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class StockReportXls(models.AbstractModel): | ||||
|  |     _name = 'report.export_stockinfo_xls.stock_report_xls.xlsx' | ||||
|  |     _inherit = 'report.report_xlsx.abstract' | ||||
|  | 
 | ||||
|  |     def get_warehouse(self, data): | ||||
|  |         wh = data.warehouse.mapped('id') | ||||
|  |         obj = self.env['stock.warehouse'].search([('id', 'in', wh)]) | ||||
|  |         l1 = [] | ||||
|  |         l2 = [] | ||||
|  |         for j in obj: | ||||
|  |             l1.append(j.name) | ||||
|  |             l2.append(j.id) | ||||
|  |         return l1, l2 | ||||
|  | 
 | ||||
|  |     def get_lines(self, data, warehouse): | ||||
|  |         lines = [] | ||||
|  |         categ_id = data.mapped('id') | ||||
|  |         if categ_id: | ||||
|  |             stock_history = self.env['product.product'].search([('categ_id', 'in', categ_id)]) | ||||
|  |         else: | ||||
|  |             stock_history = self.env['product.product'].search([]) | ||||
|  |         for obj in stock_history: | ||||
|  |             sale_value = 0 | ||||
|  |             purchase_value = 0 | ||||
|  |             product = self.env['product.product'].browse(obj.id) | ||||
|  |             sale_obj = self.env['sale.order.line'].search([('order_id.state', 'in', ('sale', 'done')), | ||||
|  |                                                            ('product_id', '=', product.id), | ||||
|  |                                                            ('order_id.warehouse_id', '=', warehouse)]) | ||||
|  |             for i in sale_obj: | ||||
|  |                 sale_value = sale_value + i.product_uom_qty | ||||
|  |             purchase_obj = self.env['purchase.order.line'].search([('order_id.state', 'in', ('purchase', 'done')), | ||||
|  |                                                                    ('product_id', '=', product.id), | ||||
|  |                                                                    ('order_id.picking_type_id', '=', warehouse)]) | ||||
|  |             for i in purchase_obj: | ||||
|  |                 purchase_value = purchase_value + i.product_qty | ||||
|  |             available_qty = product.with_context({'warehouse': warehouse}).virtual_available + \ | ||||
|  |                             product.with_context({'warehouse': warehouse}).outgoing_qty - \ | ||||
|  |                             product.with_context({'warehouse': warehouse}).incoming_qty | ||||
|  |             value = available_qty * product.standard_price | ||||
|  |             vals = { | ||||
|  |                 'sku': product.default_code, | ||||
|  |                 'name': product.name, | ||||
|  |                 'category': product.categ_id.name, | ||||
|  |                 'cost_price': product.standard_price, | ||||
|  |                 'available': available_qty, | ||||
|  |                 'virtual': product.with_context({'warehouse': warehouse}).virtual_available, | ||||
|  |                 'incoming': product.with_context({'warehouse': warehouse}).incoming_qty, | ||||
|  |                 'outgoing': product.with_context({'warehouse': warehouse}).outgoing_qty, | ||||
|  |                 'net_on_hand': product.with_context({'warehouse': warehouse}).qty_available, | ||||
|  |                 'total_value': value, | ||||
|  |                 'sale_value': sale_value, | ||||
|  |                 'purchase_value': purchase_value, | ||||
|  |             } | ||||
|  |             lines.append(vals) | ||||
|  |         return lines | ||||
|  | 
 | ||||
|  |     def generate_xlsx_report(self, workbook, data, lines): | ||||
|  |         d = lines.category | ||||
|  |         get_warehouse = self.get_warehouse(lines) | ||||
|  |         count = len(get_warehouse[0]) * 11 + 6 | ||||
|  |         comp = self.env.user.company_id.name | ||||
|  |         sheet = workbook.add_worksheet('Stock Info') | ||||
|  |         format0 = workbook.add_format({'font_size': 20, 'align': 'center', 'bold': True}) | ||||
|  |         format1 = workbook.add_format({'font_size': 14, 'align': 'vcenter', 'bold': True}) | ||||
|  |         format11 = workbook.add_format({'font_size': 12, 'align': 'center', 'bold': True}) | ||||
|  |         format21 = workbook.add_format({'font_size': 10, 'align': 'center', 'bold': True}) | ||||
|  |         format3 = workbook.add_format({'bottom': True, 'top': True, 'font_size': 12}) | ||||
|  |         format4 = workbook.add_format({'font_size': 12, 'align': 'left', 'bold': True}) | ||||
|  |         font_size_8 = workbook.add_format({'font_size': 8, 'align': 'center'}) | ||||
|  |         font_size_8_l = workbook.add_format({'font_size': 8, 'align': 'left'}) | ||||
|  |         font_size_8_r = workbook.add_format({'font_size': 8, 'align': 'right'}) | ||||
|  |         red_mark = workbook.add_format({'font_size': 8, 'bg_color': 'red'}) | ||||
|  |         justify = workbook.add_format({'font_size': 12}) | ||||
|  |         format3.set_align('center') | ||||
|  |         justify.set_align('justify') | ||||
|  |         format1.set_align('center') | ||||
|  |         red_mark.set_align('center') | ||||
|  |         sheet.merge_range(1, 7, 2, 10, 'Product Stock Info', format0) | ||||
|  |         sheet.merge_range(3, 7, 3, 10, comp, format11) | ||||
|  |         w_house = ', ' | ||||
|  |         cat = ', ' | ||||
|  |         c = [] | ||||
|  |         d1 = d.mapped('id') | ||||
|  |         if d1: | ||||
|  |             for i in d1: | ||||
|  |                 c.append(self.env['product.category'].browse(i).name) | ||||
|  |             cat = cat.join(c) | ||||
|  |             sheet.merge_range(4, 0, 4, 1, 'Category(s) : ', format4) | ||||
|  |             sheet.merge_range(4, 2, 4, 3 + len(d1), cat, format4) | ||||
|  |         sheet.merge_range(5, 0, 5, 1, 'Warehouse(s) : ', format4) | ||||
|  |         w_house = w_house.join(get_warehouse[0]) | ||||
|  |         sheet.merge_range(5, 2, 5, 3+len(get_warehouse[0]), w_house, format4) | ||||
|  |         user = self.env['res.users'].browse(self.env.uid) | ||||
|  |         tz = pytz.timezone(user.tz) | ||||
|  |         time = pytz.utc.localize(datetime.now()).astimezone(tz) | ||||
|  |         sheet.merge_range('A8:G8', 'Report Date: ' + str(time.strftime("%Y-%m-%d %H:%M %p")), format1) | ||||
|  |         sheet.merge_range(7, 7, 7, count, 'Warehouses', format1) | ||||
|  |         sheet.merge_range('A9:G9', 'Product Information', format11) | ||||
|  |         w_col_no = 6 | ||||
|  |         w_col_no1 = 7 | ||||
|  |         for i in get_warehouse[0]: | ||||
|  |             w_col_no = w_col_no + 11 | ||||
|  |             sheet.merge_range(8, w_col_no1, 8, w_col_no, i, format11) | ||||
|  |             w_col_no1 = w_col_no1 + 11 | ||||
|  |         sheet.write(9, 0, 'SKU', format21) | ||||
|  |         sheet.merge_range(9, 1, 9, 3, 'Name', format21) | ||||
|  |         sheet.merge_range(9, 4, 9, 5, 'Category', format21) | ||||
|  |         sheet.write(9, 6, 'Cost Price', format21) | ||||
|  |         p_col_no1 = 7 | ||||
|  |         for i in get_warehouse[0]: | ||||
|  |             sheet.write(9, p_col_no1, 'Available', format21) | ||||
|  |             sheet.write(9, p_col_no1 + 1, 'Virtual', format21) | ||||
|  |             sheet.write(9, p_col_no1 + 2, 'Incoming', format21) | ||||
|  |             sheet.write(9, p_col_no1 + 3, 'Outgoing', format21) | ||||
|  |             sheet.merge_range(9, p_col_no1 + 4, 9, p_col_no1 + 5, 'Net On Hand', format21) | ||||
|  |             sheet.merge_range(9, p_col_no1 + 6, 9, p_col_no1 + 7, 'Total Sold', format21) | ||||
|  |             sheet.merge_range(9, p_col_no1 + 8, 9, p_col_no1 + 9, 'Total Purchased', format21) | ||||
|  |             sheet.write(9, p_col_no1 + 10, 'Valuation', format21) | ||||
|  |             p_col_no1 = p_col_no1 + 11 | ||||
|  |         prod_row = 10 | ||||
|  |         prod_col = 0 | ||||
|  |         for i in get_warehouse[1]: | ||||
|  |             get_line = self.get_lines(d, i) | ||||
|  |             for each in get_line: | ||||
|  |                 sheet.write(prod_row, prod_col, each['sku'], font_size_8) | ||||
|  |                 sheet.merge_range(prod_row, prod_col + 1, prod_row, prod_col + 3, each['name'], font_size_8_l) | ||||
|  |                 sheet.merge_range(prod_row, prod_col + 4, prod_row, prod_col + 5, each['category'], font_size_8_l) | ||||
|  |                 sheet.write(prod_row, prod_col + 6, each['cost_price'], font_size_8_r) | ||||
|  |                 prod_row = prod_row + 1 | ||||
|  |             break | ||||
|  |         prod_row = 10 | ||||
|  |         prod_col = 7 | ||||
|  |         for i in get_warehouse[1]: | ||||
|  |             get_line = self.get_lines(d, i) | ||||
|  |             for each in get_line: | ||||
|  |                 if each['available'] < 0: | ||||
|  |                     sheet.write(prod_row, prod_col, each['available'], red_mark) | ||||
|  |                 else: | ||||
|  |                     sheet.write(prod_row, prod_col, each['available'], font_size_8) | ||||
|  |                 if each['virtual'] < 0: | ||||
|  |                     sheet.write(prod_row, prod_col + 1, each['virtual'], red_mark) | ||||
|  |                 else: | ||||
|  |                     sheet.write(prod_row, prod_col + 1, each['virtual'], font_size_8) | ||||
|  |                 if each['incoming'] < 0: | ||||
|  |                     sheet.write(prod_row, prod_col + 2, each['incoming'], red_mark) | ||||
|  |                 else: | ||||
|  |                     sheet.write(prod_row, prod_col + 2, each['incoming'], font_size_8) | ||||
|  |                 if each['outgoing'] < 0: | ||||
|  |                     sheet.write(prod_row, prod_col + 3, each['outgoing'], red_mark) | ||||
|  |                 else: | ||||
|  |                     sheet.write(prod_row, prod_col + 3, each['outgoing'], font_size_8) | ||||
|  |                 if each['net_on_hand'] < 0: | ||||
|  |                     sheet.merge_range(prod_row, prod_col + 4, prod_row, prod_col + 5, each['net_on_hand'], red_mark) | ||||
|  |                 else: | ||||
|  |                     sheet.merge_range(prod_row, prod_col + 4, prod_row, prod_col + 5, each['net_on_hand'], font_size_8) | ||||
|  |                 if each['sale_value'] < 0: | ||||
|  |                     sheet.merge_range(prod_row, prod_col + 6, prod_row, prod_col + 7, each['sale_value'], red_mark) | ||||
|  |                 else: | ||||
|  |                     sheet.merge_range(prod_row, prod_col + 6, prod_row, prod_col + 7, each['sale_value'], font_size_8) | ||||
|  |                 if each['purchase_value'] < 0: | ||||
|  |                     sheet.merge_range(prod_row, prod_col + 8, prod_row, prod_col + 9, each['purchase_value'], red_mark) | ||||
|  |                 else: | ||||
|  |                     sheet.merge_range(prod_row, prod_col + 8, prod_row, prod_col + 9, each['purchase_value'], font_size_8) | ||||
|  |                 if each['total_value'] < 0: | ||||
|  |                     sheet.write(prod_row, prod_col + 10, each['total_value'], red_mark) | ||||
|  |                 else: | ||||
|  |                     sheet.write(prod_row, prod_col + 10, each['total_value'], font_size_8_r) | ||||
|  |                 prod_row = prod_row + 1 | ||||
|  |             prod_row = 10 | ||||
|  |             prod_col = prod_col + 11 | ||||
| After Width: | Height: | Size: 66 KiB | 
| After Width: | Height: | Size: 50 KiB | 
| After Width: | Height: | Size: 41 KiB | 
| After Width: | Height: | Size: 74 KiB | 
| After Width: | Height: | Size: 84 KiB | 
| After Width: | Height: | Size: 90 KiB | 
| @ -0,0 +1,88 @@ | |||||
|  | <section class="oe_container"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <h2 class="oe_slogan">Current Stock XLS</h2> | ||||
|  |         <h3 class="oe_slogan">Current Stock Report for all Products in each Warehouse</h3> | ||||
|  |          <h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4> | ||||
|  |     </div> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <div> | ||||
|  |             This module helps to print Current Stock Report for all Products in each Warehouse with XLS. | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <div> | ||||
|  |                  ☛ Installation : To install this module, you need also the report_xlsx module. | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <div class="oe_span6"> | ||||
|  |             <div class="oe_demo oe_picture oe_screenshot"> | ||||
|  |                 <img src="image1.png"> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="oe_span6"> | ||||
|  |             <p class='oe_mt32'> | ||||
|  |                 Go to Inventory -> Reports -> Current stock in Excel. Now a wizard will appear on your screen. | ||||
|  |                 Please enter the warehouses which you want to take the report. You can also select category for products(It is Optional). | ||||
|  |                 Then Click "Export Product with Stock Info" button. Then You will get the corresponding report in XLS. | ||||
|  |             </p> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container oe_dark"> | ||||
|  |     <div class="oe_row oe_padded"> | ||||
|  |         <div class="oe_span12"> | ||||
|  |             <div class="oe_row_img oe_centered"> | ||||
|  |                 <img class="oe_picture oe_screenshot" src="image2.png"> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <div class="oe_span12"> | ||||
|  |             <p class='oe_mt32'> | ||||
|  |                Per warehouse you can get Available Qty, Virtual Qty, Incoming Qty, Outgoing Qty, Net On Hand Qty, | ||||
|  |                 Total Sold & Total Purchased Qty. You can get your stock valuation details too. In below screen-shot you | ||||
|  |                 can see stock details of 2 warehouse exported in single spreadsheet. Negative stock will be highlighted | ||||
|  |                 in "red" cells. | ||||
|  |             </p> | ||||
|  |         </div> | ||||
|  |          <div class="oe_span12"> | ||||
|  |             <div class="oe_demo oe_picture oe_screenshot"> | ||||
|  |                 <img src="image3.png"> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container oe_dark"> | ||||
|  |     <h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> | ||||
|  |         <div class="oe_slogan" style="margin-top:10px !important;"> | ||||
|  |             <div> | ||||
|  |                 <a  class="btn btn-primary btn-lg mt8" | ||||
|  |                 style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i | ||||
|  |                 class="fa fa-envelope"></i> Email </a> <a | ||||
|  |                 class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | ||||
|  |                 href="http://www.cybrosys.com/contact/"><i | ||||
|  |                 class="fa fa-phone"></i> Contact Us </a> <a | ||||
|  |                 class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | ||||
|  |                 href="http://www.cybrosys.com/odoo-customization-and-installation/"><i | ||||
|  |                 class="fa fa-check-square"></i> Request Customization </a> | ||||
|  |             </div> | ||||
|  |             <br> | ||||
|  |             <img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> | ||||
|  |             <div> | ||||
|  |               <a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> | ||||
|  |               <a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> | ||||
|  |               <a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> | ||||
|  |               <a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> | ||||
|  |               <a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | 
 | ||||
| @ -0,0 +1,57 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | 
 | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  |         <record model='ir.ui.view' id='wizard_form'> | ||||
|  |             <field name="name">wizard.stock.history.form</field> | ||||
|  |             <field name="model">wizard.stock.history</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form string="Wizard"> | ||||
|  |                         <group string="Warehouse"> | ||||
|  |                             <field name="warehouse" widget="many2many_tags"/> | ||||
|  |                         </group> | ||||
|  |                         <notebook> | ||||
|  |                             <page string="Category"> | ||||
|  |                                 <field name="category"> | ||||
|  |                                     <tree> | ||||
|  |                                         <field name="name"/> | ||||
|  |                                     </tree> | ||||
|  |                                 </field> | ||||
|  |                             </page> | ||||
|  |                         </notebook> | ||||
|  |                     <footer> | ||||
|  |                         <button name="export_xls" type="object" default_focus="1" | ||||
|  |                                 string="Export Product with Stock Info" class="oe_highlight" | ||||
|  |                                 context="{'xls_export':1}" icon="fa-download"/> | ||||
|  |                         <button string="Cancel" class="oe_link" special="cancel" /> | ||||
|  |                     </footer> | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record model='ir.actions.act_window' id='wizard_act'> | ||||
|  |             <field name="name">Export product stock in Excel</field> | ||||
|  |             <field name="res_model">wizard.stock.history</field> | ||||
|  |             <field name="view_type">form</field> | ||||
|  |             <field name="view_mode">form</field> | ||||
|  |             <field name="view_id" ref="wizard_form"/> | ||||
|  |             <field name="target">new</field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <report | ||||
|  |             id="stock_xlsx" | ||||
|  |             model="wizard.stock.history" | ||||
|  |             string="Product Stock Info" | ||||
|  |             report_type="xlsx" | ||||
|  |             name="export_stockinfo_xls.stock_report_xls.xlsx" | ||||
|  |             file="export_stockinfo_xls.stock_report_xls.xlsx" | ||||
|  |             menu="False" | ||||
|  |             attachment_use="False"/> | ||||
|  | 
 | ||||
|  |         <menuitem name="Current stock in Excel" | ||||
|  |                   parent="stock.menu_warehouse_report" | ||||
|  |                   id="export_excel" | ||||
|  |                   action="wizard_act" | ||||
|  |                   sequence="3"/> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
					Loading…
					
					
				
		Reference in new issue