Browse Source

[ADD]Initial Commit

pull/81/head
SHEREEF PT 8 years ago
parent
commit
b7e35a2f57
  1. 7
      cybro_product_stock_balance/__openerp__.py
  2. 44
      cybro_product_stock_balance/__openerp__.py~
  3. 32
      cybro_product_stock_balance/models/product_internal_master.py
  4. 56
      cybro_product_stock_balance/static/description/index.html~
  5. 18
      cybro_product_stock_balance/views/product_internal_stock.xml
  6. 28
      pos_restaurant_floor_facility/README.rst
  7. 23
      pos_restaurant_floor_facility/__init__.py
  8. 42
      pos_restaurant_floor_facility/__openerp__.py
  9. 23
      pos_restaurant_floor_facility/models/__init__.py
  10. 62
      pos_restaurant_floor_facility/models/pos_restaurant_extra_facility.py
  11. BIN
      pos_restaurant_floor_facility/static/description/1.png
  12. BIN
      pos_restaurant_floor_facility/static/description/2.png
  13. BIN
      pos_restaurant_floor_facility/static/description/3.png
  14. BIN
      pos_restaurant_floor_facility/static/description/4.png
  15. BIN
      pos_restaurant_floor_facility/static/description/5.png
  16. BIN
      pos_restaurant_floor_facility/static/description/banner.jpg
  17. BIN
      pos_restaurant_floor_facility/static/description/cybro_logo.png
  18. BIN
      pos_restaurant_floor_facility/static/description/icon.png
  19. 100
      pos_restaurant_floor_facility/static/description/index.html
  20. 19
      pos_restaurant_floor_facility/static/src/js/facility_floor.js
  21. 69
      pos_restaurant_floor_facility/views/pos_restaurant_extra_facility.xml
  22. 10
      pos_restaurant_floor_facility/views/templates.xml

7
cybro_product_stock_balance/__openerp__.py

@ -22,15 +22,12 @@
##############################################################################
{
'name': 'Available Stock in Product Form',
'version': '9.0',
'version': '9.0.2.0.0',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': 'http://www.cybrosys.com',
'summary': 'Estimate Inventory Levels By Warehouses in Product Form',
'depends': [
'product',
'stock'
],
'depends': ['product','stock'],
'category': 'Warehouse',
'data': [
'views/product_internal_stock.xml',

44
cybro_product_stock_balance/__openerp__.py~

@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Sreejith P(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Available Stock in Product Form',
'version': '9.0',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': 'http://www.cybrosys.com',
'summary': 'Estimate Inventory Levels By Warehouses in Product Form',
'depends': [
'product',
'stock'
],
'category': 'Warehouse',
'data': [
'views/product_internal_stock.xml',
'security/ir.model.access.csv',
],
'demo': [],
'license': 'AGPL-3',
'images': ['static/description/banner.jpg'],
'installable': True,
'auto_install': False
}

32
cybro_product_stock_balance/models/product_internal_master.py

@ -21,10 +21,34 @@
#
##############################################################################
from openerp import fields, models, api
from openerp import fields, models
class ProductForm(models.Model):
_inherit = 'product.product'
internal_location = fields.One2many('stock.quantity', 'product_id', compute='get_product_qty')
def get_product_qty(self):
location_list = []
product_list = []
obj_location = self.env['stock.location'].search([('usage', '=', 'internal')])
for i in obj_location:
location_list.append(i.id)
obj_quant = self.env['stock.quant'].search([('product_id', '=', self.id),
('location_id', 'in', location_list)])
for obj in obj_quant:
move_line = {'product_id': obj.product_id.id,
'stock_location': obj.location_id.id,
'qty_on_hand': obj.qty,
}
product_list.append(move_line)
for i in product_list:
if i['qty_on_hand'] > 0:
self.internal_location |= self.env['stock.quantity'].create(i)
class TemplateForm(models.Model):
_inherit = 'product.template'
internal_location = fields.One2many('stock.quantity', 'product_id', compute='get_product_qty')
@ -40,14 +64,14 @@ class ProductForm(models.Model):
obj_quant = self.env['stock.quant'].search([('product_id', '=', i.id),
('location_id', 'in', location_list)])
for obj in obj_quant:
print obj.location_id.id
move_line = {'product_id': obj.product_id.id,
'stock_location': obj.location_id.id,
'qty_on_hand': obj.qty,
}
product_list.append(move_line)
for i in product_list:
self.internal_location |= self.env['stock.quantity'].create(i)
if i['qty_on_hand'] > 0:
self.internal_location |= self.env['stock.quantity'].create(i)
class InternalLocation(models.Model):
@ -58,4 +82,4 @@ class InternalLocation(models.Model):
forecast = fields.Float('Forecast')
incoming_qty = fields.Float('Incoming Quantity')
outgoing_qty = fields.Float('Outgoing Quantity')
product_id = fields.Many2one('product.template', string='Product')
product_id = fields.Many2one('product.product', string='Product')

56
cybro_product_stock_balance/static/description/index.html~

@ -1,56 +0,0 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Stock Balance by Locations</h2>
<h3 class="oe_slogan">Estimate inventory levels by warehouses in Product Form</h3>
<h4 class="oe_slogan">Author : Cybrosys Techno Solutions , www.cybrosys.com</h4>
<br/>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img src="dev.png">
</div>
</div>
<div class="oe_span6">
<p class="oe_mt32">
<p>&#9728; The app goal is to provide you with instant outlook of how many units of this product are stocked at internal location.</p>
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span6">
<p class="oe_mt32">
<p>&#x261B; The estimation is provided right on a product form (the tab Inventory) as a table, where each line represents an internal location</p>
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img src="product_master.jpg">
</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;">
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;" 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;"
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;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</section>

18
cybro_product_stock_balance/views/product_internal_stock.xml

@ -3,6 +3,23 @@
<data>
<record id="product_form_location" model="ir.ui.view">
<field name="name">Product Locations</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
<xpath expr="//group[@name='inventory']" position="after">
<separator string="Stock Balance By Locations" attrs="{'invisible':[('type', '!=', 'product')]}"/>
<field name="internal_location" attrs="{'invisible':[('type', '!=', 'product')]}">
<tree>
<field name="stock_location"/>
<field name="qty_on_hand"/>
</tree>
</field>
</xpath>
</field>
</record>
<record id="product_form_location1" model="ir.ui.view">
<field name="name">Product</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_only_form_view"/>
<field name="arch" type="xml">
@ -10,6 +27,7 @@
<separator string="Stock Balance By Locations" attrs="{'invisible':[('type', '!=', 'product')]}"/>
<field name="internal_location" attrs="{'invisible':[('type', '!=', 'product')]}">
<tree>
<field name="product_id"/>
<field name="stock_location"/>
<field name="qty_on_hand"/>
</tree>

28
pos_restaurant_floor_facility/README.rst

@ -0,0 +1,28 @@
===================================
Floor Wise Charges in Restaurant v9
===================================
This module adds floor wise charging facility in POS Restaurant.
Installation
============
Just select it from available modules to install it, there is no need to extra installations.
Configuration
=============
Nothing to configure.
Usage
=====
* Create some Facility and its charging percentage.
* POS-> Configuration-> Floor Facility.
* Add created facility to floors.
* POS-> Configuration-> Floor Plans-> Add Facility Lines
* On clicking a product in pos screen, Amount will add automatically.
Credits
=======
Developer: Nilmar Shereef @ cybrosys, shereef@cybrosys.in

23
pos_restaurant_floor_facility/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import models

42
pos_restaurant_floor_facility/__openerp__.py

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Floor Wise Charge in Restaurant',
'version': '9.0.1.0.0',
'summary': """Product Price Change Based on Floor of POS Restaurant.""",
'description': """Module adds the facility charge of floor with each products in POS restaurant""",
'author': 'Cybrosys Techno Solutions',
'website': "http://www.cybrosys.com",
'company': 'Cybrosys Techno Solutions',
'category': 'Point Of Sale',
'depends': ['point_of_sale',
'pos_restaurant'],
'data': [
'views/pos_restaurant_extra_facility.xml',
'views/templates.xml',
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
}

23
pos_restaurant_floor_facility/models/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import pos_restaurant_extra_facility

62
pos_restaurant_floor_facility/models/pos_restaurant_extra_facility.py

@ -0,0 +1,62 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import models, fields, api
class FacilityRestaurant(models.Model):
_inherit = "restaurant.floor"
rest_floor_facility = fields.One2many('restaurant.floor.line', 'ref_field', string='Floor Facility')
facility_service_percentage = fields.Float(string="Active Facility Charge %")
@api.onchange('rest_floor_facility')
def onchange_facility(self):
sum_of_percentage = 0.0
for records in self.rest_floor_facility:
sum_of_percentage += records.line_percentage
print sum_of_percentage
self.facility_service_percentage = sum_of_percentage
class FacilityRestaurantLines(models.Model):
_name = "restaurant.floor.line"
name = fields.Many2one('restaurant.floor.facility')
line_percentage = fields.Float(string="Extra Charging Percentage")
ref_field = fields.Many2one('restaurant.floor', invisible=True, ondelete='cascade')
@api.onchange('name')
def onchange_facility(self):
if self.name:
print "self.name.percentage", self.name.percentage
self.line_percentage = self.name.percentage
class FloorFacility(models.Model):
_name = "restaurant.floor.facility"
name = fields.Char(string="Name", required=True,)
percentage = fields.Float(string="Extra Charging Percentage(%)", required=True,
help="Increment percentage of the each Product Price ")
description = fields.Html(string="Description")

BIN
pos_restaurant_floor_facility/static/description/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
pos_restaurant_floor_facility/static/description/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
pos_restaurant_floor_facility/static/description/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
pos_restaurant_floor_facility/static/description/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
pos_restaurant_floor_facility/static/description/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
pos_restaurant_floor_facility/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

BIN
pos_restaurant_floor_facility/static/description/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
pos_restaurant_floor_facility/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

100
pos_restaurant_floor_facility/static/description/index.html

@ -0,0 +1,100 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Floor Wise Charges in Restaurant</h2>
<h3 class="oe_slogan">User can set floor facility charges on Products</h3>
<h4 class="oe_slogan">Cybrosys Technologies , www.cybrosys.com</h4>
<div>
<h4><p>Features:</p></h4>
<ul>
<li style="list-style:none !important;"><span style="color:green;"> &#9745;</span>&nbsp;&nbsp; Facilities With Charging Percentage.</li>
<li style="list-style:none !important;"><span style="color:green;"> &#9745;</span>&nbsp;&nbsp; Facility Lines in Floor Master.</li>
<li style="list-style:none !important;"><span style="color:green;"> &#9745;</span>&nbsp;&nbsp; Enables Separate Price in Floors Wise.</li>
<li style="list-style:none !important;"><span style="color:green;"> &#9745;</span>&nbsp;&nbsp; Simple Configuration.</li>
</ul>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<h3 class="oe_slogan">Facility Master - Tree View</h3>
<div class="oe_row oe_spaced">
<div class="oe_span12">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="1.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<h3 class="oe_slogan">Facility Master - Form View</h3>
<div class="oe_row oe_spaced">
<p>
<ul>
<li>Facilities with its charging percentage.</li>
<li>Images and bullet points of facility.</li>
</ul>
</p>
</div>
<div class="oe_row oe_spaced">
<div class="oe_span12">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="5.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<h3 class="oe_slogan">Floor Master With Facility Lines - Form View</h3>
<div class="oe_row oe_spaced">
<p>
<ul>
<li>Facility lines with its charging percentage.</li>
<li>User can alter its charges from this lines.</li>
<li>Automated total affecting facility percentage of floor.</li>
</ul>
</p>
</div>
<div class="oe_row oe_spaced">
<div class="oe_span12">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="3.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<h3 class="oe_slogan">Floor Wise Price Change - POS Screen</h3>
<div class="oe_row oe_spaced">
<p>
<ul>
<li>Floor facility charge will added with actual price of product.</li>
</ul>
</p>
</div>
<div class="oe_row oe_spaced">
<div class="oe_span12">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="4.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;">
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;" 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;"
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;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</section>

19
pos_restaurant_floor_facility/static/src/js/facility_floor.js

@ -0,0 +1,19 @@
odoo.define('pos_restaurant_floor_facility.floor_facility_rate_addition', function (require) {
'use strict';
var models = require('point_of_sale.models');
var screens = require('point_of_sale.screens');
var restaurant = require('pos_restaurant.floors');
models.load_fields("restaurant.floor",['facility_service_percentage']);
screens.ProductScreenWidget.include({
click_product: function(product) {
if(product.to_weight && this.pos.config.iface_electronic_scale){
this.gui.show_screen('scale',{product: product});
}else{
this.pos.get_order().add_product(product,{ price: product.price +
(product.price * this.pos.table.floor.facility_service_percentage)/100});
}
}
});
});

69
pos_restaurant_floor_facility/views/pos_restaurant_extra_facility.xml

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="restaurant_extra_feature_form_view" model="ir.ui.view">
<field name="name">Floor View Extra</field>
<field name="model">restaurant.floor</field>
<field name="inherit_id" ref="pos_restaurant.view_restaurant_floor_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='background_color']" position="after">
<field name="facility_service_percentage"/>
</xpath>
<xpath expr="//field[@name='table_ids']" position="after">
<group col="1">
<field name="rest_floor_facility">
<tree string='Floor Facility' editable="bottom">
<field name="name" />
<field name="line_percentage" />
</tree>
</field>
</group>
</xpath>
</field>
</record>
<record id="extra_features_form_view" model="ir.ui.view">
<field name="name">Floor Facility Form</field>
<field name="model">restaurant.floor.facility</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
</group>
<group>
<field name="percentage"/>
</group>
</group>
<field name="description"/>
</sheet>
</form>
</field>
</record>
<record id="extra_features_tree_view" model="ir.ui.view">
<field name="name">Floor Facility Tree</field>
<field name="model">restaurant.floor.facility</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="percentage"/>
</tree>
</field>
</record>
<record id="action_restaurant_extra_features" model="ir.actions.act_window">
<field name="name">Floor Facility</field>
<field name="res_model">restaurant.floor.facility</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a new facility.
</p>
</field>
</record>
<menuitem id="menu_restaurant_extra_features" name="Floor Facility" sequence="31" parent="point_of_sale.menu_point_config_product" action="action_restaurant_extra_features"/>
</data>
</openerp>

10
pos_restaurant_floor_facility/views/templates.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="assets" inherit_id="point_of_sale.assets">
<xpath expr="." position="inside">
<script type="text/javascript" src="/pos_restaurant_floor_facility/static/src/js/facility_floor.js"></script>
</xpath>
</template>
</data>
</openerp>
Loading…
Cancel
Save