14 changed files with 342 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||||
|
Auto Fill Widget |
||||
|
================ |
||||
|
* Widget that suggests field value in existing records |
||||
|
* Widget = **auto_fill** |
||||
|
|
||||
|
Developer |
||||
|
========= |
||||
|
* Developer: Avinash Nk (avinash@cybrosys.in) |
||||
|
|
||||
|
Contacts |
||||
|
======== |
||||
|
* Cybrosys Technologies <https://www.cybrosys.com> |
@ -0,0 +1,23 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Avinash Nk(<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 controllers |
@ -0,0 +1,38 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Avinash Nk(<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': 'Auto Fill Widget', |
||||
|
'version': '11.0.1.0.0', |
||||
|
'summary': """Widget that suggests field value in existing records""", |
||||
|
'description': 'Widget for auto completing a character field according to its existing record values', |
||||
|
'category': 'Extra Tools', |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'website': "https://www.cybrosys.com", |
||||
|
'depends': ['base'], |
||||
|
'data': ['views/auto_fill_templates.xml'], |
||||
|
'images': ['static/description/banner.jpg'], |
||||
|
'license': 'AGPL-3', |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': False, |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Avinash Nk(<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 main |
@ -0,0 +1,42 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
################################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
||||
|
# Author: Avinash Nk(<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 odoo.http import request |
||||
|
from odoo import http |
||||
|
|
||||
|
|
||||
|
class GetMatchingRecords(http.Controller): |
||||
|
|
||||
|
@http.route(['/matching/records'], type='json', auth="none") |
||||
|
def get_matching_records(self, **kwargs): |
||||
|
model = str(kwargs['model']) |
||||
|
field = str(kwargs['field']) |
||||
|
value = str(kwargs['value']) |
||||
|
model = model.replace(".", "_") |
||||
|
cr = request.cr |
||||
|
if len(value) > 0: |
||||
|
query = """SELECT %s FROM %s WHERE %s ~* '%s' GROUP BY %s""" % (field, model, field, value, field) |
||||
|
cr.execute(query) |
||||
|
res = cr.fetchall() |
||||
|
else: |
||||
|
res = [] |
||||
|
return res |
After Width: | Height: | Size: 10 MiB |
After Width: | Height: | Size: 409 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,91 @@ |
|||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced o_animate o_animate_in_children o_animate_offset_min"> |
||||
|
<h2 class="oe_slogan">Auto Fill Widget</h2> |
||||
|
<h3 class="oe_slogan">Widget that suggests field value in existing records</h3> |
||||
|
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a></h4> |
||||
|
</div> |
||||
|
<div class="oe_row oe_spaced o_animate o_animate_in_children o_animate_offset_min" style="padding-left:65px;"> |
||||
|
<h4>Features:</h4> |
||||
|
<div> |
||||
|
<br/> |
||||
|
<span style="color:green;"> ☑ </span> Can put any character or text fields<br/> |
||||
|
<br/> |
||||
|
<span style="color:green;"> ☑ </span> Very fast results<br/> |
||||
|
<br/> |
||||
|
<span style="color:green;"> ☑ </span> Attractive design<br/> |
||||
|
<br/> |
||||
|
<span style="color:green;"> ☑ </span> Widget = <b>auto_fill</b><br/> |
||||
|
<br/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced o_animate o_animate_in_children o_animate_offset_min"> |
||||
|
<div class="oe_picture"> |
||||
|
<h3 class="oe_slogan">Overview</h3> |
||||
|
<p class="oe_mt32 text-justify"> |
||||
|
Widget for auto completing a character field according to its existing record values |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced o_animate o_animate_in_children o_animate_offset_min"> |
||||
|
<div style="text-align: center"> |
||||
|
<p> |
||||
|
<h3 class="oe_slogan">Configuration</h3> |
||||
|
<p> |
||||
|
</div> |
||||
|
<div class="oe_picture" style="text-align:center"> |
||||
|
<p class="oe_mt32 text-justify"> |
||||
|
After installing the module, you can put the tag <b>widget="auto_fill"</b> in your form view. Then it |
||||
|
works as below. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced o_animate o_animate_in_children o_animate_offset_min"> |
||||
|
<div class="oe_picture" style="text-align: center"> |
||||
|
<div class="oe_demo oe_picture oe_screenshot"> |
||||
|
<img style="border:10px solid white;" src="auto_fill.gif"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<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="https://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="https://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="https://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,32 @@ |
|||||
|
.auto-fill-scrollbar { |
||||
|
z-index: 1051; |
||||
|
position: absolute; |
||||
|
background: #ffffff; |
||||
|
overflow-y: scroll; |
||||
|
height: auto; |
||||
|
display:none; |
||||
|
width:auto !important; |
||||
|
border: 1px solid #E5E5E5; |
||||
|
font-size: 13px; |
||||
|
padding: 5px 0px; |
||||
|
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176); |
||||
|
} |
||||
|
.auto-fill-scrollbar td { |
||||
|
padding-left: 7px !important; |
||||
|
padding-right: 7px !important; |
||||
|
} |
||||
|
.auto-fill-scrollbar td:hover{ |
||||
|
background: #2d6cb3; |
||||
|
color: #fff; |
||||
|
width: 5px; |
||||
|
} |
||||
|
.list_matches{ |
||||
|
width: 100%; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
.input_field_auto_fill { |
||||
|
border: 1px solid #D2D2FF; |
||||
|
} |
||||
|
.text_field_auto_fill { |
||||
|
border: 1px solid #D2D2FF; |
||||
|
} |
@ -0,0 +1,53 @@ |
|||||
|
odoo.define('auto_fill.AutoFill', function (require) { |
||||
|
"use strict"; |
||||
|
|
||||
|
var ajax = require('web.ajax'); |
||||
|
var basic_fields = require('web.basic_fields'); |
||||
|
var registry = require('web.field_registry'); |
||||
|
var CharField = registry.get('char'); |
||||
|
|
||||
|
var FieldAutoFill = CharField.extend({ |
||||
|
template: 'FieldAutoFill', |
||||
|
events: _.extend({}, CharField.prototype.events, { |
||||
|
'keyup': '_onKeyup', |
||||
|
'click #list_matches': '_onTableRowClicked', |
||||
|
}), |
||||
|
|
||||
|
_onKeyup: function () { |
||||
|
var value = document.getElementsByClassName('input_field_auto_fill')[0].value; |
||||
|
ajax.jsonRpc('/matching/records', 'call', { |
||||
|
model: this.model, |
||||
|
field: this.name, |
||||
|
value: value, |
||||
|
}).then(function (result){ |
||||
|
if (result.length > 0){ |
||||
|
$('.auto-fill-scrollbar').css('display', 'block'); |
||||
|
var table = document.getElementById("list_matches"); |
||||
|
$("#list_matches tr").remove(); |
||||
|
var i; |
||||
|
for (i = 0; i < result.length; i++) { |
||||
|
var row = table.insertRow(i); |
||||
|
var cell = row.insertCell(0); |
||||
|
cell.innerHTML = result[i]; |
||||
|
} |
||||
|
} |
||||
|
else { |
||||
|
$('.auto-fill-scrollbar').css('display', 'none'); |
||||
|
} |
||||
|
}) ; |
||||
|
}, |
||||
|
|
||||
|
_onTableRowClicked: function (ev) { |
||||
|
document.getElementsByClassName('input_field_auto_fill')[0].value = ev.target.textContent; |
||||
|
$('.auto-fill-scrollbar').css('display', 'none'); |
||||
|
}, |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
registry.add('auto_fill', FieldAutoFill); |
||||
|
|
||||
|
return { |
||||
|
FieldAutoFill: FieldAutoFill, |
||||
|
}; |
||||
|
|
||||
|
}); |
@ -0,0 +1,17 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<templates> |
||||
|
<t t-name="FieldAutoFill"> |
||||
|
<t t-if="widget.mode !== 'readonly'"> |
||||
|
<t t-if="widget.formatType === 'char'"> |
||||
|
<input type="text" id="input_field_auto_fill" class="o_input input_field_auto_fill"/> |
||||
|
</t> |
||||
|
<t t-if="widget.formatType === 'text'"> |
||||
|
<textarea type="text" id="input_field_auto_fill" class="o_input text_field_auto_fill"/> |
||||
|
</t> |
||||
|
</t> |
||||
|
<span t-if="widget.mode === 'readonly'"/> |
||||
|
<div t-if="widget.mode !== 'readonly'" class="auto-fill-scrollbar" id="auto_fill_list_scroll"> |
||||
|
<table id="list_matches" class="list_matches"/> |
||||
|
</div> |
||||
|
</t> |
||||
|
</templates> |
@ -0,0 +1,11 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<odoo> |
||||
|
|
||||
|
<template id="assets_backend" inherit_id="web.assets_backend"> |
||||
|
<xpath expr="." position="inside"> |
||||
|
<link rel="stylesheet" href="/auto_fill/static/src/css/auto_fill.css"/> |
||||
|
<script src="/auto_fill/static/src/js/auto_fill.js" type="text/javascript"/> |
||||
|
</xpath> |
||||
|
</template> |
||||
|
|
||||
|
</odoo> |
Loading…
Reference in new issue