Skip to content

Commit

Permalink
[WIP] Sale UX block ip @ create sale order
Browse files Browse the repository at this point in the history
  • Loading branch information
filoquin committed Jan 16, 2023
1 parent a76a7fe commit 6027cbf
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 1 deletion.
1 change: 1 addition & 0 deletions website_sale_ux/__init__.py
Expand Up @@ -3,3 +3,4 @@
# directory
##############################################################################
from . import controllers
from . import models
4 changes: 3 additions & 1 deletion website_sale_ux/__manifest__.py
Expand Up @@ -20,7 +20,7 @@
{
'name': 'Website Sale UX',
'category': 'base.module_category_knowledge_management',
'version': '13.0.1.2.0',
'version': '13.0.1.3.0',
'author': 'ADHOC SA',
'website': 'www.adhoc.com.ar',
'license': 'AGPL-3',
Expand All @@ -31,7 +31,9 @@
'test': [],
'demo': [],
'data': [
'security/ir.model.access.csv',
'views/product_template_views.xml',
'views/website_block_ip.xml',
],
'installable': True,
}
2 changes: 2 additions & 0 deletions website_sale_ux/models/__init__.py
@@ -0,0 +1,2 @@
from . import website
from . import sale_order
7 changes: 7 additions & 0 deletions website_sale_ux/models/sale_order.py
@@ -0,0 +1,7 @@
from odoo import fields, models


class SaleOrder(models.Model):
_inherit = 'sale.order'

ip_address = fields.Char('ip_address', index=True, copy=False)
46 changes: 46 additions & 0 deletions website_sale_ux/models/website.py
@@ -0,0 +1,46 @@
from odoo import fields, models
from odoo.http import request
from odoo.exceptions import UserError

from datetime import datetime, timedelta

class Website(models.Model):
_inherit = 'website'

def _prepare_sale_order_values(self, partner, pricelist):

values = super()._prepare_sale_order_values(partner, pricelist)
ban_duration = int(self.env['ir.config_parameter'].sudo().get_param('website.order_banned_minutes', '30'))

values['ip_address'] = request.httprequest.environ['REMOTE_ADDR']
from_time =datetime.now() - timedelta(minutes=ban_duration)
block_count = self.env['website.block_ip'].sudo().search_count([
('name', '=', values['ip_address']),
('create_date', '>', from_time),
])

if block_count > 0:
raise UserError('Your Order blocked')


ban_duration = int(self.env['ir.config_parameter'].sudo().get_param('website.order_banned_after', '3'))

from_time = datetime.now() - timedelta(seconds=60)
order_count = self.env['sale.order'].sudo().search_count([
('ip_address', '=', values['ip_address']),
('create_date', '>', from_time),
])
if order_count >= 3:
self.env['website.block_ip'].sudo().create({'name': values['ip_address']})
self._cr.commit()
raise UserError('Demasiadas ordenes creadas')

return values


class WebsiteBlockIP(models.Model):

_name = 'website.block_ip'
_description = 'blocked ips'

name = fields.Char('Ip', index=True)
2 changes: 2 additions & 0 deletions website_sale_ux/security/ir.model.access.csv
@@ -0,0 +1,2 @@
"id","name","model_id/id","group_id/id","perm_read","perm_write","perm_create","perm_unlink"
"website_sale_ux.block_ips","Block ips","website_sale_ux.model_website_block_ip","website.group_website_designer","True","True","True","True"
39 changes: 39 additions & 0 deletions website_sale_ux/views/website_block_ip.xml
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="website_block_ip_view_tree" model="ir.ui.view">
<field name="name">website.block_ip.view.tree</field>
<field name="model">website.block_ip</field>
<field name="arch" type="xml">
<tree string="">
<field name="create_date"/>
<field name="name"/>
</tree>
</field>
</record>
<record id="websit_block_ip_view_search" model="ir.ui.view">
<field name="name">website.block_ip.view.search</field>
<field name="model">website.block_ip</field>
<field name="arch" type="xml">
<search string="">
<field name="name"/>
<filter name="create_date" string="by date" context="{'group_by': 'create_date:hour'}" />
</search>
</field>
</record>
<record id="website_block_ip_action" model="ir.actions.act_window">
<field name="name">Action Name</field>
<field name="res_model">website.block_ip</field>
<field name="view_mode">tree</field>
<field name="domain">[]</field>
<field name="context">{}</field>
<field name="help" type="html">
<p>no blocked ips</p>
</field>
</record>
<menuitem
id="block_ips_menu"
name="Block ips"
action="website_sale_ux.website_block_ip_action"
parent="website_sale.menu_ecommerce_settings"
sequence="90"/>
</odoo>

0 comments on commit 6027cbf

Please sign in to comment.