[MERGE] Forward-port of latest 7.0 bugfixes, up to rev. 9885 revid:dle@openerp.com-20140310114026-r0ijm0m36su19wn7
bzr revid: dle@openerp.com-20140310122101-gicombyc5ii0yz6a
This commit is contained in:
commit
c2ba11e72e
|
@ -1600,7 +1600,6 @@
|
||||||
<label for="value_amount" string="Amount To Pay" attrs="{'invisible':[('value','=','balance')]}"/>
|
<label for="value_amount" string="Amount To Pay" attrs="{'invisible':[('value','=','balance')]}"/>
|
||||||
<div attrs="{'invisible':[('value','=','balance')]}">
|
<div attrs="{'invisible':[('value','=','balance')]}">
|
||||||
<field name="value_amount" class="oe_inline"/>
|
<field name="value_amount" class="oe_inline"/>
|
||||||
<label string="%%" class="oe_inline" attrs="{'invisible':['!',('value','=','procent')]}" />
|
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</group>
|
||||||
<group string="Due Date Computation">
|
<group string="Due Date Computation">
|
||||||
|
|
|
@ -1623,6 +1623,7 @@ rule or repeating pattern of time to exclude from the recurring rule."),
|
||||||
|
|
||||||
def _set_recurrency_end_date(self, data, context=None):
|
def _set_recurrency_end_date(self, data, context=None):
|
||||||
end_date = data.get('end_date')
|
end_date = data.get('end_date')
|
||||||
|
rel_date = False
|
||||||
if data.get('recurrency') and data.get('end_type') in ('count', unicode('count')):
|
if data.get('recurrency') and data.get('end_type') in ('count', unicode('count')):
|
||||||
data_date_deadline = datetime.strptime(data.get('date_deadline'), '%Y-%m-%d %H:%M:%S')
|
data_date_deadline = datetime.strptime(data.get('date_deadline'), '%Y-%m-%d %H:%M:%S')
|
||||||
if data.get('rrule_type') in ('daily', unicode('count')):
|
if data.get('rrule_type') in ('daily', unicode('count')):
|
||||||
|
@ -1633,7 +1634,9 @@ rule or repeating pattern of time to exclude from the recurring rule."),
|
||||||
rel_date = relativedelta(months=data.get('count')+1)
|
rel_date = relativedelta(months=data.get('count')+1)
|
||||||
elif data.get('rrule_type') in ('yearly', unicode('yearly')):
|
elif data.get('rrule_type') in ('yearly', unicode('yearly')):
|
||||||
rel_date = relativedelta(years=data.get('count')+1)
|
rel_date = relativedelta(years=data.get('count')+1)
|
||||||
end_date = data_date_deadline + rel_date
|
end_date = data_date_deadline
|
||||||
|
if rel_date:
|
||||||
|
end_date += rel_date
|
||||||
return end_date
|
return end_date
|
||||||
|
|
||||||
def create(self, cr, uid, vals, context=None):
|
def create(self, cr, uid, vals, context=None):
|
||||||
|
|
|
@ -161,8 +161,7 @@
|
||||||
<page string="Recurrency Option" attrs="{'invisible': [('recurrency','=',False)]}">
|
<page string="Recurrency Option" attrs="{'invisible': [('recurrency','=',False)]}">
|
||||||
<group col="4" colspan="4" name="rrule">
|
<group col="4" colspan="4" name="rrule">
|
||||||
<group col="4" colspan="4">
|
<group col="4" colspan="4">
|
||||||
<field name="rrule_type" string="Recurrency period"
|
<field name="rrule_type" string="Recurrency period" />
|
||||||
attrs="{'readonly':[('recurrent_id','!=',False)]}"/>
|
|
||||||
<field name="interval"/>
|
<field name="interval"/>
|
||||||
<separator string="End of Recurrence" colspan="4"/>
|
<separator string="End of Recurrence" colspan="4"/>
|
||||||
<field name="end_type"/>
|
<field name="end_type"/>
|
||||||
|
|
|
@ -32,6 +32,7 @@ Re-implement openerp's file import system:
|
||||||
],
|
],
|
||||||
'css': [
|
'css': [
|
||||||
'static/lib/select2/select2.css',
|
'static/lib/select2/select2.css',
|
||||||
|
# TODO for trunk: add select2-bootstrap.css style (to download)
|
||||||
'static/src/css/import.css',
|
'static/src/css/import.css',
|
||||||
],
|
],
|
||||||
'js': [
|
'js': [
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
Copyright 2012 Igor Vaynberg
|
Copyright 2012 Igor Vaynberg
|
||||||
|
|
||||||
Version: @@ver@@ Timestamp: @@timestamp@@
|
Version: @@ver@@ Timestamp: @@timestamp@@
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in
|
This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
|
||||||
compliance with the License. You may obtain a copy of the License in the LICENSE file, or at:
|
General Public License version 2 (the "GPL License"). You may choose either license to govern your
|
||||||
|
use of this software only upon the condition that you accept all of the terms of either the Apache
|
||||||
|
License or the GPL License.
|
||||||
|
|
||||||
|
You may obtain a copy of the Apache License and the GPL License at:
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
http://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software distributed under the License is
|
Unless required by applicable law or agreed to in writing, software distributed under the Apache License
|
||||||
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
See the License for the specific language governing permissions and limitations under the License.
|
either express or implied. See the Apache License and the GPL License for the specific language governing
|
||||||
|
permissions and limitations under the Apache License and the GPL License.
|
|
@ -1,39 +1,49 @@
|
||||||
Select2
|
Select2
|
||||||
=================
|
=======
|
||||||
|
|
||||||
Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results. Look and feel of Select2 is based on the excellent [Chosen](http://harvesthq.github.com/chosen/) library.
|
Select2 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.
|
||||||
|
|
||||||
To get started -- checkout http://ivaynberg.github.com/select2!
|
To get started, checkout examples and documentation at http://ivaynberg.github.com/select2
|
||||||
|
|
||||||
What Does Select2 Support That Chosen Does Not?
|
Use cases
|
||||||
-------------------------------------------------
|
---------
|
||||||
|
|
||||||
* Working with large datasets: Chosen requires the entire dataset to be loaded as `option` tags in the DOM, which limits
|
* Enhancing native selects with search.
|
||||||
it to working with small-ish datasets. Select2 uses a function to find results on-the-fly, which allows it to partially
|
* Enhancing native selects with a better multi-select interface.
|
||||||
load results.
|
* Loading data from JavaScript: easily load items via ajax and have them searchable.
|
||||||
* Paging of results: Since Select2 works with large datasets and only loads a small amount of matching results at a time
|
* Nesting optgroups: native selects only support one level of nested. Select2 does not have this restriction.
|
||||||
it has to support paging. Select2 will call the search function when the user scrolls to the bottom of currently loaded
|
* Tagging: ability to add new items on the fly.
|
||||||
result set allowing for the 'infinite scrolling' of results.
|
* Working with large, remote datasets: ability to partially load a dataset based on the search term.
|
||||||
* Custom markup for results: Chosen only supports rendering text results because that is the only markup supported by
|
* Paging of large datasets: easy support for loading more pages when the results are scrolled to the end.
|
||||||
`option` tags. Select2 provides an extension point which can be used to produce any kind of markup to represent results.
|
* Templating: support for custom rendering of results and selections.
|
||||||
* Ability to add results on the fly: Select2 provides the ability to add results from the search term entered by the user, which allows it to be used for
|
|
||||||
tagging.
|
|
||||||
|
|
||||||
Browser Compatibility
|
Browser compatibility
|
||||||
--------------------
|
---------------------
|
||||||
* IE 8+ (7 mostly works except for [issue with z-index](https://github.com/ivaynberg/select2/issues/37))
|
* IE 8+
|
||||||
* Chrome 8+
|
* Chrome 8+
|
||||||
* Firefox 3.5+
|
* Firefox 10+
|
||||||
* Safari 3+
|
* Safari 3+
|
||||||
* Opera 10.6+
|
* Opera 10.6+
|
||||||
|
|
||||||
Integrations
|
Integrations
|
||||||
------------
|
------------
|
||||||
|
|
||||||
* [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / Apache Wicket)
|
* [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / [Apache Wicket](http://wicket.apache.org))
|
||||||
* [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails)
|
* [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails)
|
||||||
* [AngularUI](http://angular-ui.github.com/#directives-select2) ([AngularJS](angularjs.org))
|
* [AngularUI](http://angular-ui.github.com/#directives-select2) ([AngularJS](angularjs.org))
|
||||||
* [Django](https://github.com/applegrew/django-select2)
|
* [Django](https://github.com/applegrew/django-select2)
|
||||||
|
* [Symfony](https://github.com/19Gerhard85/sfSelect2WidgetsPlugin)
|
||||||
|
* [Bootstrap](https://github.com/t0m/select2-bootstrap-css) (CSS skin)
|
||||||
|
* [Yii](https://github.com/tonybolzan/yii-select2)
|
||||||
|
|
||||||
|
Internationalization (i18n)
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Select2 supports multiple languages by simply including the right
|
||||||
|
language JS file (`select2_locale_it.js`, `select2_locale_nl.js`, etc.).
|
||||||
|
|
||||||
|
Missing a language? Just copy `select2_locale_en.js.template`, translate
|
||||||
|
it, and make a pull request back to Select2 here on GitHub.
|
||||||
|
|
||||||
Bug tracker
|
Bug tracker
|
||||||
-----------
|
-----------
|
||||||
|
@ -42,7 +52,6 @@ Have a bug? Please create an issue here on GitHub!
|
||||||
|
|
||||||
https://github.com/ivaynberg/select2/issues
|
https://github.com/ivaynberg/select2/issues
|
||||||
|
|
||||||
|
|
||||||
Mailing list
|
Mailing list
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
@ -53,16 +62,22 @@ select2@googlegroups.com
|
||||||
https://groups.google.com/d/forum/select2
|
https://groups.google.com/d/forum/select2
|
||||||
|
|
||||||
|
|
||||||
Copyright and License
|
Copyright and license
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
Copyright 2012 Igor Vaynberg
|
Copyright 2012 Igor Vaynberg
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in
|
This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
|
||||||
compliance with the License. You may obtain a copy of the License in the LICENSE file, or at:
|
General Public License version 2 (the "GPL License"). You may choose either license to govern your
|
||||||
|
use of this software only upon the condition that you accept all of the terms of either the Apache
|
||||||
|
License or the GPL License.
|
||||||
|
|
||||||
|
You may obtain a copy of the Apache License and the GPL License in the LICENSE file, or at:
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
http://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software distributed under the License is
|
Unless required by applicable law or agreed to in writing, software distributed under the Apache License
|
||||||
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
See the License for the specific language governing permissions and limitations under the License.
|
either express or implied. See the Apache License and the GPL License for the specific language governing
|
||||||
|
permissions and limitations under the Apache License and the GPL License.
|
||||||
|
|
|
@ -15,21 +15,33 @@ js="$name.js"
|
||||||
mini="$name.min.js"
|
mini="$name.min.js"
|
||||||
css="$name.css"
|
css="$name.css"
|
||||||
release="$name-$ver"
|
release="$name-$ver"
|
||||||
releasedir="/tmp/$release"
|
tag="$ver"
|
||||||
tag="release-$ver"
|
|
||||||
branch="build-$ver"
|
branch="build-$ver"
|
||||||
curbranch=`git branch | grep "*" | sed "s/* //"`
|
curbranch=`git branch | grep "*" | sed "s/* //"`
|
||||||
timestamp=$(date)
|
timestamp=$(date)
|
||||||
tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g"
|
tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g"
|
||||||
remote="github"
|
remote="github"
|
||||||
|
|
||||||
|
echo "Pulling from origin"
|
||||||
|
|
||||||
|
git pull
|
||||||
|
|
||||||
|
echo "Updating Version Identifiers"
|
||||||
|
|
||||||
|
sed -E -e "s/\"version\": \"([0-9\.]+)\",/\"version\": \"$ver\",/g" -i "" bower.json select2.jquery.json
|
||||||
|
git add bower.json
|
||||||
|
git add select2.jquery.json
|
||||||
|
git commit -m "modified version identifiers in descriptors for release $ver"
|
||||||
|
git push
|
||||||
|
|
||||||
git branch "$branch"
|
git branch "$branch"
|
||||||
git checkout "$branch"
|
git checkout "$branch"
|
||||||
|
|
||||||
echo "Tokenizing..."
|
echo "Tokenizing..."
|
||||||
|
|
||||||
find . -name "$js" | xargs sed -i -e "$tokens"
|
find . -name "$js" | xargs -I{} sed -e "$tokens" -i "" {}
|
||||||
find . -name "$css" | xargs sed -i -e "$tokens"
|
find . -name "$css" | xargs -I{} sed -e "$tokens" -i "" {}
|
||||||
|
sed -e "s/latest/$ver/g" -i "" bower.json
|
||||||
|
|
||||||
git add "$js"
|
git add "$js"
|
||||||
git add "$css"
|
git add "$css"
|
||||||
|
@ -41,11 +53,8 @@ cat LICENSE | sed "$tokens" >> "$mini"
|
||||||
echo "*/" >> "$mini"
|
echo "*/" >> "$mini"
|
||||||
|
|
||||||
curl -s \
|
curl -s \
|
||||||
-d compilation_level=SIMPLE_OPTIMIZATIONS \
|
|
||||||
-d output_format=text \
|
|
||||||
-d output_info=compiled_code \
|
|
||||||
--data-urlencode "js_code@$js" \
|
--data-urlencode "js_code@$js" \
|
||||||
http://closure-compiler.appspot.com/compile \
|
http://marijnhaverbeke.nl/uglifyjs \
|
||||||
>> "$mini"
|
>> "$mini"
|
||||||
|
|
||||||
git add "$mini"
|
git add "$mini"
|
||||||
|
@ -53,25 +62,12 @@ git add "$mini"
|
||||||
git commit -m "release $ver"
|
git commit -m "release $ver"
|
||||||
|
|
||||||
echo "Tagging..."
|
echo "Tagging..."
|
||||||
|
|
||||||
git tag -a "$tag" -m "tagged version $ver"
|
git tag -a "$tag" -m "tagged version $ver"
|
||||||
git push "$remote" --tags
|
git push "$remote" --tags
|
||||||
|
|
||||||
echo "Archiving..."
|
|
||||||
|
|
||||||
rm -rf "$releasedir"
|
|
||||||
mkdir "$releasedir"
|
|
||||||
|
|
||||||
cp $name.* "$releasedir"
|
|
||||||
cp spinner.gif "$releasedir"
|
|
||||||
cp README.* "$releasedir"
|
|
||||||
|
|
||||||
zip -r "$releasedir.zip" "$releasedir"
|
|
||||||
rm -rf "$releasedir"
|
|
||||||
|
|
||||||
echo "Cleaning Up..."
|
echo "Cleaning Up..."
|
||||||
|
|
||||||
git checkout "$curbranch"
|
git checkout "$curbranch"
|
||||||
git branch -D "$branch"
|
git branch -D "$branch"
|
||||||
|
|
||||||
echo "Done. Release archive created: $releasedir.zip"
|
echo "Done"
|
||||||
|
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
@ -1,279 +1,317 @@
|
||||||
/*
|
/*
|
||||||
Version: @@ver@@ Timestamp: @@timestamp@@
|
Version: 3.4.5 Timestamp: Mon Nov 4 08:22:42 PST 2013
|
||||||
*/
|
*/
|
||||||
.select2-container {
|
.select2-container {
|
||||||
|
margin: 0;
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
/* inline-block for ie7 */
|
/* inline-block for ie7 */
|
||||||
zoom: 1;
|
zoom: 1;
|
||||||
*display: inline;
|
*display: inline;
|
||||||
vertical-align: top;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container,
|
.select2-container,
|
||||||
.select2-drop,
|
.select2-drop,
|
||||||
.select2-search,
|
.select2-search,
|
||||||
.select2-search input{
|
.select2-search input {
|
||||||
/*
|
/*
|
||||||
Force border-box so that % widths fit the parent
|
Force border-box so that % widths fit the parent
|
||||||
container without overlap because of margin/padding.
|
container without overlap because of margin/padding.
|
||||||
|
|
||||||
More Info : http://www.quirksmode.org/css/box.html
|
More Info : http://www.quirksmode.org/css/box.html
|
||||||
*/
|
*/
|
||||||
-moz-box-sizing: border-box; /* firefox */
|
|
||||||
-ms-box-sizing: border-box; /* ie */
|
|
||||||
-webkit-box-sizing: border-box; /* webkit */
|
-webkit-box-sizing: border-box; /* webkit */
|
||||||
-khtml-box-sizing: border-box; /* konqueror */
|
-moz-box-sizing: border-box; /* firefox */
|
||||||
box-sizing: border-box; /* css3 */
|
box-sizing: border-box; /* css3 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container .select2-choice {
|
.select2-container .select2-choice {
|
||||||
background-color: #fff;
|
|
||||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white));
|
|
||||||
background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 50%);
|
|
||||||
background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%);
|
|
||||||
background-image: -o-linear-gradient(bottom, #eeeeee 0%, #ffffff 50%);
|
|
||||||
background-image: -ms-linear-gradient(top, #eeeeee 0%, #ffffff 50%);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#ffffff', GradientType = 0);
|
|
||||||
background-image: linear-gradient(top, #eeeeee 0%, #ffffff 50%);
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
border-radius: 4px;
|
|
||||||
-moz-background-clip: padding;
|
|
||||||
-webkit-background-clip: padding-box;
|
|
||||||
background-clip: padding-box;
|
|
||||||
border: 1px solid #aaa;
|
|
||||||
display: block;
|
display: block;
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
position: relative;
|
|
||||||
height: 26px;
|
height: 26px;
|
||||||
line-height: 26px;
|
|
||||||
padding: 0 0 0 8px;
|
padding: 0 0 0 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
white-space: nowrap;
|
||||||
|
line-height: 26px;
|
||||||
color: #444;
|
color: #444;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
background-clip: padding-box;
|
||||||
|
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
|
||||||
|
background-color: #fff;
|
||||||
|
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
|
||||||
|
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
||||||
|
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
|
||||||
|
background-image: linear-gradient(top, #fff 0%, #eee 50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container.select2-drop-above .select2-choice
|
.select2-container.select2-drop-above .select2-choice {
|
||||||
{
|
|
||||||
border-bottom-color: #aaa;
|
border-bottom-color: #aaa;
|
||||||
-webkit-border-radius:0px 0px 4px 4px;
|
|
||||||
-moz-border-radius:0px 0px 4px 4px;
|
border-radius: 0 0 4px 4px;
|
||||||
border-radius:0px 0px 4px 4px;
|
|
||||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.9, white));
|
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
|
||||||
background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 90%);
|
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
||||||
background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 90%);
|
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
||||||
background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 90%);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
|
||||||
background-image: -ms-linear-gradient(top, #eeeeee 0%,#ffffff 90%);
|
background-image: linear-gradient(top, #eee 0%, #fff 90%);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 );
|
|
||||||
background-image: linear-gradient(top, #eeeeee 0%,#ffffff 90%);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container .select2-choice span {
|
.select2-container.select2-allowclear .select2-choice .select2-chosen {
|
||||||
|
margin-right: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-choice > .select2-chosen {
|
||||||
margin-right: 26px;
|
margin-right: 26px;
|
||||||
display: block;
|
display: block;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
-o-text-overflow: ellipsis;
|
|
||||||
-ms-text-overflow: ellipsis;
|
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container .select2-choice abbr {
|
.select2-container .select2-choice abbr {
|
||||||
display: block;
|
display: none;
|
||||||
position: absolute;
|
width: 12px;
|
||||||
right: 26px;
|
height: 12px;
|
||||||
top: 8px;
|
position: absolute;
|
||||||
width: 12px;
|
right: 24px;
|
||||||
height: 12px;
|
top: 8px;
|
||||||
font-size: 1px;
|
|
||||||
background: url('select2.png') right top no-repeat;
|
font-size: 1px;
|
||||||
cursor: pointer;
|
text-decoration: none;
|
||||||
text-decoration: none;
|
|
||||||
border:0;
|
border: 0;
|
||||||
outline: 0;
|
background: url('select2.png') right top no-repeat;
|
||||||
|
cursor: pointer;
|
||||||
|
outline: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.select2-container.select2-allowclear .select2-choice abbr {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
.select2-container .select2-choice abbr:hover {
|
.select2-container .select2-choice abbr:hover {
|
||||||
background-position: right -11px;
|
background-position: right -11px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-drop-mask {
|
||||||
|
border: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
min-height: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
width: auto;
|
||||||
|
opacity: 0;
|
||||||
|
z-index: 9998;
|
||||||
|
/* styles required for IE to work */
|
||||||
|
background-color: #fff;
|
||||||
|
filter: alpha(opacity=0);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-drop {
|
.select2-drop {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: -1px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 9999;
|
||||||
|
top: 100%;
|
||||||
|
|
||||||
background: #fff;
|
background: #fff;
|
||||||
color: #000;
|
color: #000;
|
||||||
border: 1px solid #aaa;
|
border: 1px solid #aaa;
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
position: absolute;
|
|
||||||
top: 100%;
|
|
||||||
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
|
||||||
-moz-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
|
||||||
-o-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
|
||||||
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
|
||||||
z-index: 9999;
|
|
||||||
width:100%;
|
|
||||||
margin-top:-1px;
|
|
||||||
|
|
||||||
-webkit-border-radius: 0 0 4px 4px;
|
border-radius: 0 0 4px 4px;
|
||||||
-moz-border-radius: 0 0 4px 4px;
|
|
||||||
border-radius: 0 0 4px 4px;
|
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||||
|
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-drop-auto-width {
|
||||||
|
border-top: 1px solid #aaa;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-drop-auto-width .select2-search {
|
||||||
|
padding-top: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-drop.select2-drop-above {
|
.select2-drop.select2-drop-above {
|
||||||
-webkit-border-radius: 4px 4px 0px 0px;
|
margin-top: 1px;
|
||||||
-moz-border-radius: 4px 4px 0px 0px;
|
|
||||||
border-radius: 4px 4px 0px 0px;
|
|
||||||
margin-top:1px;
|
|
||||||
border-top: 1px solid #aaa;
|
border-top: 1px solid #aaa;
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
|
|
||||||
|
border-radius: 4px 4px 0 0;
|
||||||
|
|
||||||
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||||
-moz-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||||
-o-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
|
||||||
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container .select2-choice div {
|
.select2-drop-active {
|
||||||
-webkit-border-radius: 0 4px 4px 0;
|
border: 1px solid #5897fb;
|
||||||
-moz-border-radius: 0 4px 4px 0;
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-drop.select2-drop-above.select2-drop-active {
|
||||||
|
border-top: 1px solid #5897fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-choice .select2-arrow {
|
||||||
|
display: inline-block;
|
||||||
|
width: 18px;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
|
||||||
|
border-left: 1px solid #aaa;
|
||||||
border-radius: 0 4px 4px 0;
|
border-radius: 0 4px 4px 0;
|
||||||
-moz-background-clip: padding;
|
|
||||||
-webkit-background-clip: padding-box;
|
|
||||||
background-clip: padding-box;
|
background-clip: padding-box;
|
||||||
|
|
||||||
background: #ccc;
|
background: #ccc;
|
||||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
|
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
|
||||||
background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
||||||
background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
||||||
background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
|
||||||
background-image: -ms-linear-gradient(top, #cccccc 0%, #eeeeee 60%);
|
background-image: linear-gradient(top, #ccc 0%, #eee 60%);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#cccccc', endColorstr = '#eeeeee', GradientType = 0);
|
|
||||||
background-image: linear-gradient(top, #cccccc 0%, #eeeeee 60%);
|
|
||||||
border-left: 1px solid #aaa;
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
display: block;
|
|
||||||
height: 100%;
|
|
||||||
width: 18px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container .select2-choice div b {
|
.select2-container .select2-choice .select2-arrow b {
|
||||||
background: url('select2.png') no-repeat 0 1px;
|
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
background: url('select2.png') no-repeat 0 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-search {
|
.select2-search {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
white-space: nowrap;
|
width: 100%;
|
||||||
z-index: 10000;
|
min-height: 26px;
|
||||||
min-height: 26px;
|
margin: 0;
|
||||||
width: 100%;
|
padding-left: 4px;
|
||||||
margin: 0;
|
padding-right: 4px;
|
||||||
padding-left: 4px;
|
|
||||||
padding-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.select2-search-hidden {
|
position: relative;
|
||||||
display: block;
|
z-index: 10000;
|
||||||
position: absolute;
|
|
||||||
left: -10000px;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-search input {
|
.select2-search input {
|
||||||
background: #fff url('select2.png') no-repeat 100% -22px;
|
width: 100%;
|
||||||
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
|
height: auto !important;
|
||||||
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);
|
min-height: 26px;
|
||||||
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
|
|
||||||
background: url('select2.png') no-repeat 100% -22px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
|
|
||||||
background: url('select2.png') no-repeat 100% -22px, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);
|
|
||||||
background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #ffffff 85%, #eeeeee 99%);
|
|
||||||
padding: 4px 20px 4px 5px;
|
padding: 4px 20px 4px 5px;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
outline: 0;
|
outline: 0;
|
||||||
border: 1px solid #aaa;
|
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
width:100%;
|
|
||||||
margin:0;
|
border: 1px solid #aaa;
|
||||||
height:auto !important;
|
|
||||||
min-height: 26px;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
-moz-border-radius: 0;
|
|
||||||
-webkit-border-radius: 0;
|
-webkit-box-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
|
||||||
|
background: #fff url('select2.png') no-repeat 100% -22px;
|
||||||
|
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
||||||
|
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||||
|
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||||
|
background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #fff 85%, #eee 99%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-drop.select2-drop-above .select2-search input
|
.select2-drop.select2-drop-above .select2-search input {
|
||||||
{
|
margin-top: 4px;
|
||||||
margin-top:4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-search input.select2-active {
|
.select2-search input.select2-active {
|
||||||
background: #fff url('spinner.gif') no-repeat 100%;
|
background: #fff url('select2-spinner.gif') no-repeat 100%;
|
||||||
background: url('spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
|
background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
||||||
background: url('spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);
|
background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||||
background: url('spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
|
background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||||
background: url('spinner.gif') no-repeat 100%, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
|
background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(top, #fff 85%, #eee 99%);
|
||||||
background: url('spinner.gif') no-repeat 100%, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);
|
|
||||||
background: url('spinner.gif') no-repeat 100%, linear-gradient(top, #ffffff 85%, #eeeeee 99%);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.select2-container-active .select2-choice,
|
.select2-container-active .select2-choice,
|
||||||
.select2-container-active .select2-choices {
|
.select2-container-active .select2-choices {
|
||||||
-webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);
|
|
||||||
-moz-box-shadow : 0 0 5px rgba(0,0,0,.3);
|
|
||||||
-o-box-shadow : 0 0 5px rgba(0,0,0,.3);
|
|
||||||
box-shadow : 0 0 5px rgba(0,0,0,.3);
|
|
||||||
border: 1px solid #5897fb;
|
border: 1px solid #5897fb;
|
||||||
outline: none;
|
outline: none;
|
||||||
|
|
||||||
|
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||||
|
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-dropdown-open .select2-choice {
|
.select2-dropdown-open .select2-choice {
|
||||||
border: 1px solid #aaa;
|
border-bottom-color: transparent;
|
||||||
border-bottom-color: transparent;
|
-webkit-box-shadow: 0 1px 0 #fff inset;
|
||||||
-webkit-box-shadow: 0 1px 0 #fff inset;
|
box-shadow: 0 1px 0 #fff inset;
|
||||||
-moz-box-shadow : 0 1px 0 #fff inset;
|
|
||||||
-o-box-shadow : 0 1px 0 #fff inset;
|
border-bottom-left-radius: 0;
|
||||||
box-shadow : 0 1px 0 #fff inset;
|
border-bottom-right-radius: 0;
|
||||||
background-color: #eee;
|
|
||||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee));
|
background-color: #eee;
|
||||||
background-image: -webkit-linear-gradient(center bottom, white 0%, #eeeeee 50%);
|
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
|
||||||
background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%);
|
background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
||||||
background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%);
|
background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
||||||
background-image: -ms-linear-gradient(top, #ffffff 0%,#eeeeee 50%);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 );
|
background-image: linear-gradient(top, #fff 0%, #eee 50%);
|
||||||
background-image: linear-gradient(top, #ffffff 0%,#eeeeee 50%);
|
|
||||||
-webkit-border-bottom-left-radius : 0;
|
|
||||||
-webkit-border-bottom-right-radius: 0;
|
|
||||||
-moz-border-radius-bottomleft : 0;
|
|
||||||
-moz-border-radius-bottomright: 0;
|
|
||||||
border-bottom-left-radius : 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-dropdown-open .select2-choice div {
|
.select2-dropdown-open.select2-drop-above .select2-choice,
|
||||||
background: transparent;
|
.select2-dropdown-open.select2-drop-above .select2-choices {
|
||||||
border-left: none;
|
border: 1px solid #5897fb;
|
||||||
|
border-top-color: transparent;
|
||||||
|
|
||||||
|
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
|
||||||
|
background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
|
||||||
|
background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
||||||
|
background-image: linear-gradient(bottom, #fff 0%, #eee 50%);
|
||||||
}
|
}
|
||||||
.select2-dropdown-open .select2-choice div b {
|
|
||||||
background-position: -18px 1px;
|
.select2-dropdown-open .select2-choice .select2-arrow {
|
||||||
|
background: transparent;
|
||||||
|
border-left: none;
|
||||||
|
filter: none;
|
||||||
|
}
|
||||||
|
.select2-dropdown-open .select2-choice .select2-arrow b {
|
||||||
|
background-position: -18px 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* results */
|
/* results */
|
||||||
.select2-results {
|
.select2-results {
|
||||||
margin: 4px 4px 4px 0;
|
max-height: 200px;
|
||||||
padding: 0 0 0 4px;
|
padding: 0 0 0 4px;
|
||||||
position: relative;
|
margin: 4px 4px 4px 0;
|
||||||
overflow-x: hidden;
|
position: relative;
|
||||||
overflow-y: auto;
|
overflow-x: hidden;
|
||||||
max-height: 200px;
|
overflow-y: auto;
|
||||||
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-results ul.select2-result-sub {
|
.select2-results ul.select2-result-sub {
|
||||||
margin: 0 0 0 0;
|
margin: 0;
|
||||||
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }
|
.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }
|
||||||
|
@ -285,40 +323,59 @@ Version: @@ver@@ Timestamp: @@timestamp@@
|
||||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }
|
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }
|
||||||
|
|
||||||
.select2-results li {
|
.select2-results li {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
display: list-item;
|
display: list-item;
|
||||||
|
background-image: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-results li.select2-result-with-children > .select2-result-label {
|
.select2-results li.select2-result-with-children > .select2-result-label {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-results .select2-result-label {
|
.select2-results .select2-result-label {
|
||||||
padding: 3px 7px 4px;
|
padding: 3px 7px 4px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
|
min-height: 1em;
|
||||||
|
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-results .select2-highlighted {
|
.select2-results .select2-highlighted {
|
||||||
background: #3875d7;
|
background: #3875d7;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-results li em {
|
.select2-results li em {
|
||||||
background: #feffde;
|
background: #feffde;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-results .select2-highlighted em {
|
.select2-results .select2-highlighted em {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.select2-results .select2-highlighted ul {
|
||||||
|
background: #fff;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.select2-results .select2-no-results,
|
.select2-results .select2-no-results,
|
||||||
.select2-results .select2-searching,
|
.select2-results .select2-searching,
|
||||||
.select2-results .select2-selection-limit {
|
.select2-results .select2-selection-limit {
|
||||||
background: #f4f4f4;
|
background: #f4f4f4;
|
||||||
display: list-item;
|
display: list-item;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
disabled look for already selected choices in the results dropdown
|
disabled look for disabled choices in the results dropdown
|
||||||
|
*/
|
||||||
.select2-results .select2-disabled.select2-highlighted {
|
.select2-results .select2-disabled.select2-highlighted {
|
||||||
color: #666;
|
color: #666;
|
||||||
background: #f4f4f4;
|
background: #f4f4f4;
|
||||||
|
@ -330,18 +387,18 @@ disabled look for already selected choices in the results dropdown
|
||||||
display: list-item;
|
display: list-item;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
.select2-results .select2-disabled {
|
.select2-results .select2-selected {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-more-results.select2-active {
|
.select2-more-results.select2-active {
|
||||||
background: #f4f4f4 url('spinner.gif') no-repeat 100%;
|
background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-more-results {
|
.select2-more-results {
|
||||||
background: #f4f4f4;
|
background: #f4f4f4;
|
||||||
display: list-item;
|
display: list-item;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* disabled styles */
|
/* disabled styles */
|
||||||
|
@ -353,31 +410,39 @@ disabled look for already selected choices in the results dropdown
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container.select2-container-disabled .select2-choice div {
|
.select2-container.select2-container-disabled .select2-choice .select2-arrow {
|
||||||
background-color: #f4f4f4;
|
background-color: #f4f4f4;
|
||||||
background-image: none;
|
background-image: none;
|
||||||
border-left: 0;
|
border-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.select2-container.select2-container-disabled .select2-choice abbr {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* multiselect */
|
/* multiselect */
|
||||||
|
|
||||||
.select2-container-multi .select2-choices {
|
.select2-container-multi .select2-choices {
|
||||||
|
height: auto !important;
|
||||||
|
height: 1%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
cursor: text;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
|
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
|
||||||
background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
|
||||||
background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
|
||||||
background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
background-image: linear-gradient(top, #eee 1%, #fff 15%);
|
||||||
background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
}
|
||||||
background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%);
|
|
||||||
border: 1px solid #aaa;
|
.select2-locked {
|
||||||
margin: 0;
|
padding: 3px 5px 3px 5px !important;
|
||||||
padding: 0;
|
|
||||||
cursor: text;
|
|
||||||
overflow: hidden;
|
|
||||||
height: auto !important;
|
|
||||||
height: 1%;
|
|
||||||
position: relative;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container-multi .select2-choices {
|
.select2-container-multi .select2-choices {
|
||||||
|
@ -385,107 +450,107 @@ disabled look for already selected choices in the results dropdown
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container-multi.select2-container-active .select2-choices {
|
.select2-container-multi.select2-container-active .select2-choices {
|
||||||
-webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);
|
|
||||||
-moz-box-shadow : 0 0 5px rgba(0,0,0,.3);
|
|
||||||
-o-box-shadow : 0 0 5px rgba(0,0,0,.3);
|
|
||||||
box-shadow : 0 0 5px rgba(0,0,0,.3);
|
|
||||||
border: 1px solid #5897fb;
|
border: 1px solid #5897fb;
|
||||||
outline: none;
|
outline: none;
|
||||||
|
|
||||||
|
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||||
|
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||||
}
|
}
|
||||||
.select2-container-multi .select2-choices li {
|
.select2-container-multi .select2-choices li {
|
||||||
float: left;
|
float: left;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
}
|
}
|
||||||
.select2-container-multi .select2-choices .select2-search-field {
|
.select2-container-multi .select2-choices .select2-search-field {
|
||||||
white-space: nowrap;
|
margin: 0;
|
||||||
margin: 0;
|
padding: 0;
|
||||||
padding: 0;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container-multi .select2-choices .select2-search-field input {
|
.select2-container-multi .select2-choices .select2-search-field input {
|
||||||
color: #666;
|
padding: 5px;
|
||||||
background: transparent !important;
|
margin: 1px 0;
|
||||||
font-family: sans-serif;
|
|
||||||
font-size: 100%;
|
font-family: sans-serif;
|
||||||
height: 15px;
|
font-size: 100%;
|
||||||
padding: 5px;
|
color: #666;
|
||||||
margin: 1px 0;
|
outline: 0;
|
||||||
outline: 0;
|
border: 0;
|
||||||
border: 0;
|
-webkit-box-shadow: none;
|
||||||
-webkit-box-shadow: none;
|
box-shadow: none;
|
||||||
-moz-box-shadow : none;
|
background: transparent !important;
|
||||||
-o-box-shadow : none;
|
|
||||||
box-shadow : none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
|
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
|
||||||
background: #fff url('spinner.gif') no-repeat 100% !important;
|
background: #fff url('select2-spinner.gif') no-repeat 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-default {
|
.select2-default {
|
||||||
color: #999 !important;
|
color: #999 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container-multi .select2-choices .select2-search-choice {
|
.select2-container-multi .select2-choices .select2-search-choice {
|
||||||
-webkit-border-radius: 3px;
|
padding: 3px 5px 3px 18px;
|
||||||
-moz-border-radius : 3px;
|
margin: 3px 0 3px 5px;
|
||||||
border-radius : 3px;
|
position: relative;
|
||||||
-moz-background-clip : padding;
|
|
||||||
-webkit-background-clip: padding-box;
|
line-height: 13px;
|
||||||
background-clip : padding-box;
|
color: #333;
|
||||||
background-color: #e4e4e4;
|
cursor: default;
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 );
|
border: 1px solid #aaaaaa;
|
||||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
|
|
||||||
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
border-radius: 3px;
|
||||||
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
|
||||||
background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
-webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
||||||
background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
||||||
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
|
||||||
-webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
|
background-clip: padding-box;
|
||||||
-moz-box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
|
|
||||||
box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
|
-webkit-touch-callout: none;
|
||||||
color: #333;
|
-webkit-user-select: none;
|
||||||
border: 1px solid #aaaaaa;
|
-moz-user-select: none;
|
||||||
line-height: 13px;
|
-ms-user-select: none;
|
||||||
padding: 3px 5px 3px 18px;
|
user-select: none;
|
||||||
margin: 3px 0 3px 5px;
|
|
||||||
position: relative;
|
background-color: #e4e4e4;
|
||||||
cursor: default;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
|
||||||
|
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
|
||||||
|
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||||
|
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||||
|
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||||
}
|
}
|
||||||
.select2-container-multi .select2-choices .select2-search-choice span {
|
.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
.select2-container-multi .select2-choices .select2-search-choice-focus {
|
.select2-container-multi .select2-choices .select2-search-choice-focus {
|
||||||
background: #d4d4d4;
|
background: #d4d4d4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-search-choice-close {
|
.select2-search-choice-close {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
width: 12px;
|
||||||
right: 3px;
|
height: 13px;
|
||||||
top: 4px;
|
position: absolute;
|
||||||
width: 12px;
|
right: 3px;
|
||||||
height: 13px;
|
top: 4px;
|
||||||
font-size: 1px;
|
|
||||||
background: url('select2.png') right top no-repeat;
|
font-size: 1px;
|
||||||
outline: none;
|
outline: none;
|
||||||
|
background: url('select2.png') right top no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container-multi .select2-search-choice-close {
|
.select2-container-multi .select2-search-choice-close {
|
||||||
left: 3px;
|
left: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
|
.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
|
||||||
background-position: right -11px;
|
background-position: right -11px;
|
||||||
}
|
}
|
||||||
.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
|
.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
|
||||||
background-position: right -11px;
|
background-position: right -11px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* disabled styles */
|
/* disabled styles */
|
||||||
|
.select2-container-multi.select2-container-disabled .select2-choices {
|
||||||
.select2-container-multi.select2-container-disabled .select2-choices{
|
|
||||||
background-color: #f4f4f4;
|
background-color: #f4f4f4;
|
||||||
background-image: none;
|
background-image: none;
|
||||||
border: 1px solid #ddd;
|
border: 1px solid #ddd;
|
||||||
|
@ -493,32 +558,58 @@ disabled look for already selected choices in the results dropdown
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
|
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
|
||||||
|
padding: 3px 5px 3px 5px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
background-image: none;
|
background-image: none;
|
||||||
background-color: #f4f4f4;
|
background-color: #f4f4f4;
|
||||||
border: 1px solid #ddd;
|
|
||||||
padding: 3px 5px 3px 5px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close {
|
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;
|
||||||
display: none;
|
background: none;
|
||||||
}
|
}
|
||||||
/* end multiselect */
|
/* end multiselect */
|
||||||
|
|
||||||
|
|
||||||
.select2-result-selectable .select2-match,
|
.select2-result-selectable .select2-match,
|
||||||
.select2-result-unselectable .select2-result-selectable .select2-match { text-decoration: underline; }
|
.select2-result-unselectable .select2-match {
|
||||||
.select2-result-unselectable .select2-match { text-decoration: none; }
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
.select2-offscreen { position: absolute; left: -10000px; }
|
.select2-offscreen, .select2-offscreen:focus {
|
||||||
|
clip: rect(0 0 0 0) !important;
|
||||||
|
width: 1px !important;
|
||||||
|
height: 1px !important;
|
||||||
|
border: 0 !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
position: absolute !important;
|
||||||
|
outline: 0 !important;
|
||||||
|
left: 0px !important;
|
||||||
|
top: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-display-none {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-measure-scrollbar {
|
||||||
|
position: absolute;
|
||||||
|
top: -10000px;
|
||||||
|
left: -10000px;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
overflow: scroll;
|
||||||
|
}
|
||||||
/* Retina-ize icons */
|
/* Retina-ize icons */
|
||||||
|
|
||||||
@media only screen and (-webkit-min-device-pixel-ratio: 1.5) {
|
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) {
|
||||||
.select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice div b {
|
.select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice .select2-arrow b {
|
||||||
background-image: url(select2x2.png) !important;
|
background-image: url('select2x2.png') !important;
|
||||||
background-repeat: no-repeat !important;
|
background-repeat: no-repeat !important;
|
||||||
background-size: 60px 40px !important;
|
background-size: 60px 40px !important;
|
||||||
}
|
}
|
||||||
.select2-search input {
|
.select2-search input {
|
||||||
background-position: 100% -21px !important;
|
background-position: 100% -21px !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
"name": "select2",
|
||||||
|
"title": "Select2",
|
||||||
|
"description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.",
|
||||||
|
"keywords": [
|
||||||
|
"select",
|
||||||
|
"autocomplete",
|
||||||
|
"typeahead",
|
||||||
|
"dropdown",
|
||||||
|
"multiselect",
|
||||||
|
"tag",
|
||||||
|
"tagging"
|
||||||
|
],
|
||||||
|
"version": "3.4.5",
|
||||||
|
"author": {
|
||||||
|
"name": "Igor Vaynberg",
|
||||||
|
"url": "https://github.com/ivaynberg"
|
||||||
|
},
|
||||||
|
"licenses": [
|
||||||
|
{
|
||||||
|
"type": "Apache",
|
||||||
|
"url": "http://www.apache.org/licenses/LICENSE-2.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GPL v2",
|
||||||
|
"url": "http://www.gnu.org/licenses/gpl-2.0.html"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bugs": "https://github.com/ivaynberg/select2/issues",
|
||||||
|
"homepage": "http://ivaynberg.github.com/select2",
|
||||||
|
"docs": "http://ivaynberg.github.com/select2/",
|
||||||
|
"download": "https://github.com/ivaynberg/select2/tags",
|
||||||
|
"dependencies": {
|
||||||
|
"jquery": ">=1.7.1"
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
|
@ -482,5 +482,13 @@ openerp.base_import = function (instance) {
|
||||||
{ name: 'import_succeeded', from: 'importing', to: 'imported'},
|
{ name: 'import_succeeded', from: 'importing', to: 'imported'},
|
||||||
{ name: 'import_failed', from: 'importing', to: 'results' }
|
{ name: 'import_failed', from: 'importing', to: 'results' }
|
||||||
]
|
]
|
||||||
})
|
});
|
||||||
|
|
||||||
|
$.extend($.fn.select2.defaults, {
|
||||||
|
formatNoMatches: function () { return _t("No matches found"); },
|
||||||
|
formatLoadMore: function (pageNumber) { return _t("Loading more results..."); },
|
||||||
|
formatSearching: function () { return _t("Searching..."); }
|
||||||
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -406,7 +406,7 @@ class crm_lead(format_address, osv.osv):
|
||||||
'probability = 0 %, select "Change Probability Automatically".\n'
|
'probability = 0 %, select "Change Probability Automatically".\n'
|
||||||
'Create a specific stage or edit an existing one by editing columns of your opportunity pipe.'))
|
'Create a specific stage or edit an existing one by editing columns of your opportunity pipe.'))
|
||||||
for stage_id, lead_ids in stages_leads.items():
|
for stage_id, lead_ids in stages_leads.items():
|
||||||
self.write(cr, uid, lead_ids, {'stage_id': stage_id}, context=context)
|
self.write(cr, uid, lead_ids, {'stage_id': stage_id, 'date_closed': fields.datetime.now()}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_mark_won(self, cr, uid, ids, context=None):
|
def case_mark_won(self, cr, uid, ids, context=None):
|
||||||
|
@ -427,7 +427,7 @@ class crm_lead(format_address, osv.osv):
|
||||||
'probability = 100 % and select "Change Probability Automatically".\n'
|
'probability = 100 % and select "Change Probability Automatically".\n'
|
||||||
'Create a specific stage or edit an existing one by editing columns of your opportunity pipe.'))
|
'Create a specific stage or edit an existing one by editing columns of your opportunity pipe.'))
|
||||||
for stage_id, lead_ids in stages_leads.items():
|
for stage_id, lead_ids in stages_leads.items():
|
||||||
self.write(cr, uid, lead_ids, {'stage_id': stage_id}, context=context)
|
self.write(cr, uid, lead_ids, {'stage_id': stage_id, 'date_closed': fields.datetime.now()}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_escalate(self, cr, uid, ids, context=None):
|
def case_escalate(self, cr, uid, ids, context=None):
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
<field name="view_mode">tree,calendar</field>
|
<field name="view_mode">tree,calendar</field>
|
||||||
<field name="view_id" ref="crm_case_inbound_phone_tree_view"/>
|
<field name="view_id" ref="crm_case_inbound_phone_tree_view"/>
|
||||||
<field name="domain">[]</field>
|
<field name="domain">[]</field>
|
||||||
<field name="context">{'default_state': 'done'}</field>
|
<field name="context">{'search_default_state': 'done', 'default_state': 'done'}</field>
|
||||||
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
||||||
<field name="help" type="html">
|
<field name="help" type="html">
|
||||||
<p class="oe_view_nocontent_create">
|
<p class="oe_view_nocontent_create">
|
||||||
|
|
|
@ -167,6 +167,7 @@
|
||||||
<search string="Search Phonecalls">
|
<search string="Search Phonecalls">
|
||||||
<field name="name" string="Phonecalls"/>
|
<field name="name" string="Phonecalls"/>
|
||||||
<field name="date"/>
|
<field name="date"/>
|
||||||
|
<field name="state"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter icon="terp-gtk-go-back-rtl" string="To Do" name="current" domain="[('state','=','open')]"/>
|
<filter icon="terp-gtk-go-back-rtl" string="To Do" name="current" domain="[('state','=','open')]"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
|
|
|
@ -58,7 +58,7 @@ class report_event_registration(osv.osv):
|
||||||
# TOFIX this request won't select events that have no registration
|
# TOFIX this request won't select events that have no registration
|
||||||
cr.execute(""" CREATE VIEW report_event_registration AS (
|
cr.execute(""" CREATE VIEW report_event_registration AS (
|
||||||
SELECT
|
SELECT
|
||||||
e.id::char || '/' || coalesce(r.id::char,'') AS id,
|
e.id::varchar || '/' || coalesce(r.id::varchar,'') AS id,
|
||||||
e.id AS event_id,
|
e.id AS event_id,
|
||||||
e.user_id AS user_id,
|
e.user_id AS user_id,
|
||||||
r.user_id AS user_id_registration,
|
r.user_id AS user_id_registration,
|
||||||
|
|
|
@ -263,6 +263,10 @@ class hr_expense_expense(osv.osv):
|
||||||
|
|
||||||
#convert eml into an osv-valid format
|
#convert eml into an osv-valid format
|
||||||
lines = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, exp.employee_id.address_home_id, exp.date_confirm, context=context)), eml)
|
lines = map(lambda x:(0,0,self.line_get_convert(cr, uid, x, exp.employee_id.address_home_id, exp.date_confirm, context=context)), eml)
|
||||||
|
journal_id = move_obj.browse(cr, uid, move_id, context).journal_id
|
||||||
|
# post the journal entry if 'Skip 'Draft' State for Manual Entries' is checked
|
||||||
|
if journal_id.entry_posted:
|
||||||
|
move_obj.button_validate(cr, uid, [move_id], context)
|
||||||
move_obj.write(cr, uid, [move_id], {'line_id': lines}, context=context)
|
move_obj.write(cr, uid, [move_id], {'line_id': lines}, context=context)
|
||||||
self.write(cr, uid, ids, {'account_move_id': move_id, 'state': 'done'}, context=context)
|
self.write(cr, uid, ids, {'account_move_id': move_id, 'state': 'done'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -23,7 +23,7 @@ import time
|
||||||
from datetime import date, datetime, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp.tools import config
|
from openerp.tools import config, float_compare
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
|
|
||||||
class hr_payslip(osv.osv):
|
class hr_payslip(osv.osv):
|
||||||
|
@ -86,6 +86,7 @@ class hr_payslip(osv.osv):
|
||||||
def process_sheet(self, cr, uid, ids, context=None):
|
def process_sheet(self, cr, uid, ids, context=None):
|
||||||
move_pool = self.pool.get('account.move')
|
move_pool = self.pool.get('account.move')
|
||||||
period_pool = self.pool.get('account.period')
|
period_pool = self.pool.get('account.period')
|
||||||
|
precision = self.pool.get('decimal.precision').precision_get(cr, uid, 'Payroll')
|
||||||
timenow = time.strftime('%Y-%m-%d')
|
timenow = time.strftime('%Y-%m-%d')
|
||||||
|
|
||||||
for slip in self.browse(cr, uid, ids, context=context):
|
for slip in self.browse(cr, uid, ids, context=context):
|
||||||
|
@ -149,7 +150,7 @@ class hr_payslip(osv.osv):
|
||||||
line_ids.append(credit_line)
|
line_ids.append(credit_line)
|
||||||
credit_sum += credit_line[2]['credit'] - credit_line[2]['debit']
|
credit_sum += credit_line[2]['credit'] - credit_line[2]['debit']
|
||||||
|
|
||||||
if debit_sum > credit_sum:
|
if float_compare(credit_sum, debit_sum, precision_digits=precision) == -1:
|
||||||
acc_id = slip.journal_id.default_credit_account_id.id
|
acc_id = slip.journal_id.default_credit_account_id.id
|
||||||
if not acc_id:
|
if not acc_id:
|
||||||
raise osv.except_osv(_('Configuration Error!'),_('The Expense Journal "%s" has not properly configured the Credit Account!')%(slip.journal_id.name))
|
raise osv.except_osv(_('Configuration Error!'),_('The Expense Journal "%s" has not properly configured the Credit Account!')%(slip.journal_id.name))
|
||||||
|
@ -165,7 +166,7 @@ class hr_payslip(osv.osv):
|
||||||
})
|
})
|
||||||
line_ids.append(adjust_credit)
|
line_ids.append(adjust_credit)
|
||||||
|
|
||||||
elif debit_sum < credit_sum:
|
elif float_compare(debit_sum, credit_sum, precision_digits=precision) == -1:
|
||||||
acc_id = slip.journal_id.default_debit_account_id.id
|
acc_id = slip.journal_id.default_debit_account_id.id
|
||||||
if not acc_id:
|
if not acc_id:
|
||||||
raise osv.except_osv(_('Configuration Error!'),_('The Expense Journal "%s" has not properly configured the Debit Account!')%(slip.journal_id.name))
|
raise osv.except_osv(_('Configuration Error!'),_('The Expense Journal "%s" has not properly configured the Debit Account!')%(slip.journal_id.name))
|
||||||
|
|
|
@ -138,7 +138,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
||||||
def _process_taxes_translations(self, cr, uid, obj_multi, company_id, langs, field, context=None):
|
def _process_taxes_translations(self, cr, uid, obj_multi, company_id, langs, field, context=None):
|
||||||
obj_tax_template = self.pool.get('account.tax.template')
|
obj_tax_template = self.pool.get('account.tax.template')
|
||||||
obj_tax = self.pool.get('account.tax')
|
obj_tax = self.pool.get('account.tax')
|
||||||
in_ids = sorted([x.id for x in obj_multi.chart_template_id.tax_template_ids])
|
in_ids = [x.id for x in obj_multi.chart_template_id.tax_template_ids]
|
||||||
out_ids = obj_tax.search(cr, uid, [('company_id', '=', company_id)], order='id')
|
out_ids = obj_tax.search(cr, uid, [('company_id', '=', company_id)], order='id')
|
||||||
return self.process_translations(cr, uid, langs, obj_tax_template, field, in_ids, obj_tax, out_ids, context=context)
|
return self.process_translations(cr, uid, langs, obj_tax_template, field, in_ids, obj_tax, out_ids, context=context)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<record id="membership_0" model="product.product">
|
<record id="membership_0" model="product.product">
|
||||||
<field name="membership">True</field>
|
<field name="membership">True</field>
|
||||||
<field eval="time.strftime('%Y-01-01')" name="membership_date_from"/>
|
<field eval="time.strftime('%Y-01-01')" name="membership_date_from"/>
|
||||||
<field eval="time.strftime('%Y-12-01')" name="membership_date_to"/>
|
<field eval="time.strftime('%Y-12-31')" name="membership_date_to"/>
|
||||||
<field name="name">Golden Membership</field>
|
<field name="name">Golden Membership</field>
|
||||||
<field name="list_price">180</field>
|
<field name="list_price">180</field>
|
||||||
<field name="categ_id" ref="product.product_category_1"/>
|
<field name="categ_id" ref="product.product_category_1"/>
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
<record id="membership_1" model="product.product">
|
<record id="membership_1" model="product.product">
|
||||||
<field name="membership">True</field>
|
<field name="membership">True</field>
|
||||||
<field eval="time.strftime('%Y-01-01')" name="membership_date_from"/>
|
<field eval="time.strftime('%Y-01-01')" name="membership_date_from"/>
|
||||||
<field eval="time.strftime('%Y-12-01')" name="membership_date_to"/>
|
<field eval="time.strftime('%Y-12-31')" name="membership_date_to"/>
|
||||||
<field name="name">Silver Membership</field>
|
<field name="name">Silver Membership</field>
|
||||||
<field name="categ_id" ref="product.product_category_1"/>
|
<field name="categ_id" ref="product.product_category_1"/>
|
||||||
<field name="list_price">80</field>
|
<field name="list_price">80</field>
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
<record id="membership_2" model="product.product">
|
<record id="membership_2" model="product.product">
|
||||||
<field name="membership">True</field>
|
<field name="membership">True</field>
|
||||||
<field eval="time.strftime('%Y-01-01')" name="membership_date_from"/>
|
<field eval="time.strftime('%Y-01-01')" name="membership_date_from"/>
|
||||||
<field eval="time.strftime('%Y-12-01')" name="membership_date_to"/>
|
<field eval="time.strftime('%Y-12-31')" name="membership_date_to"/>
|
||||||
<field name="name">Basic Membership</field>
|
<field name="name">Basic Membership</field>
|
||||||
<field name="categ_id" ref="product.product_category_1"/>
|
<field name="categ_id" ref="product.product_category_1"/>
|
||||||
<field name="list_price">40</field>
|
<field name="list_price">40</field>
|
||||||
|
|
|
@ -29,6 +29,7 @@ from openerp.tools import float_compare
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp import tools, SUPERUSER_ID
|
from openerp import tools, SUPERUSER_ID
|
||||||
from openerp import SUPERUSER_ID
|
from openerp import SUPERUSER_ID
|
||||||
|
from openerp.addons.product import _common
|
||||||
|
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
# Work Centers
|
# Work Centers
|
||||||
|
@ -320,7 +321,7 @@ class mrp_bom(osv.osv):
|
||||||
"""
|
"""
|
||||||
routing_obj = self.pool.get('mrp.routing')
|
routing_obj = self.pool.get('mrp.routing')
|
||||||
factor = factor / (bom.product_efficiency or 1.0)
|
factor = factor / (bom.product_efficiency or 1.0)
|
||||||
factor = rounding(factor, bom.product_rounding)
|
factor = _common.ceiling(factor, bom.product_rounding)
|
||||||
if factor < bom.product_rounding:
|
if factor < bom.product_rounding:
|
||||||
factor = bom.product_rounding
|
factor = bom.product_rounding
|
||||||
result = []
|
result = []
|
||||||
|
@ -376,6 +377,8 @@ class mrp_bom(osv.osv):
|
||||||
|
|
||||||
|
|
||||||
def rounding(f, r):
|
def rounding(f, r):
|
||||||
|
# TODO for trunk: log deprecation warning
|
||||||
|
# _logger.warning("Deprecated rounding method, please use tools.float_round to round floats.")
|
||||||
import math
|
import math
|
||||||
if not r:
|
if not r:
|
||||||
return f
|
return f
|
||||||
|
|
|
@ -57,7 +57,8 @@ The following topics should be covered by this module:
|
||||||
'test/test_mrp_repair_b4inv.yml',
|
'test/test_mrp_repair_b4inv.yml',
|
||||||
'test/test_mrp_repair_afterinv.yml',
|
'test/test_mrp_repair_afterinv.yml',
|
||||||
'test/test_mrp_repair_cancel.yml',
|
'test/test_mrp_repair_cancel.yml',
|
||||||
'test/mrp_repair_report.yml'
|
'test/mrp_repair_report.yml',
|
||||||
|
'test/test_mrp_repair_fee.yml',
|
||||||
],
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
|
|
|
@ -108,10 +108,12 @@ class mrp_repair(osv.osv):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _get_lines(self, cr, uid, ids, context=None):
|
def _get_lines(self, cr, uid, ids, context=None):
|
||||||
result = {}
|
return self.pool['mrp.repair'].search(
|
||||||
for line in self.pool.get('mrp.repair.line').browse(cr, uid, ids, context=context):
|
cr, uid, [('operations', 'in', ids)], context=context)
|
||||||
result[line.repair_id.id] = True
|
|
||||||
return result.keys()
|
def _get_fee_lines(self, cr, uid, ids, context=None):
|
||||||
|
return self.pool['mrp.repair'].search(
|
||||||
|
cr, uid, [('fees_lines', 'in', ids)], context=context)
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'name': fields.char('Repair Reference',size=24, required=True, states={'confirmed':[('readonly',True)]}),
|
'name': fields.char('Repair Reference',size=24, required=True, states={'confirmed':[('readonly',True)]}),
|
||||||
|
@ -160,18 +162,21 @@ class mrp_repair(osv.osv):
|
||||||
'repaired': fields.boolean('Repaired', readonly=True),
|
'repaired': fields.boolean('Repaired', readonly=True),
|
||||||
'amount_untaxed': fields.function(_amount_untaxed, string='Untaxed Amount',
|
'amount_untaxed': fields.function(_amount_untaxed, string='Untaxed Amount',
|
||||||
store={
|
store={
|
||||||
'mrp.repair': (lambda self, cr, uid, ids, c={}: ids, ['operations'], 10),
|
'mrp.repair': (lambda self, cr, uid, ids, c={}: ids, ['operations', 'fees_lines'], 10),
|
||||||
'mrp.repair.line': (_get_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
|
'mrp.repair.line': (_get_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
|
||||||
|
'mrp.repair.fee': (_get_fee_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
|
||||||
}),
|
}),
|
||||||
'amount_tax': fields.function(_amount_tax, string='Taxes',
|
'amount_tax': fields.function(_amount_tax, string='Taxes',
|
||||||
store={
|
store={
|
||||||
'mrp.repair': (lambda self, cr, uid, ids, c={}: ids, ['operations'], 10),
|
'mrp.repair': (lambda self, cr, uid, ids, c={}: ids, ['operations', 'fees_lines'], 10),
|
||||||
'mrp.repair.line': (_get_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
|
'mrp.repair.line': (_get_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
|
||||||
|
'mrp.repair.fee': (_get_fee_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
|
||||||
}),
|
}),
|
||||||
'amount_total': fields.function(_amount_total, string='Total',
|
'amount_total': fields.function(_amount_total, string='Total',
|
||||||
store={
|
store={
|
||||||
'mrp.repair': (lambda self, cr, uid, ids, c={}: ids, ['operations'], 10),
|
'mrp.repair': (lambda self, cr, uid, ids, c={}: ids, ['operations', 'fees_lines'], 10),
|
||||||
'mrp.repair.line': (_get_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
|
'mrp.repair.line': (_get_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
|
||||||
|
'mrp.repair.fee': (_get_fee_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
-
|
||||||
|
Testing total amount update function
|
||||||
|
-
|
||||||
|
I check the total amount of mrp_repair_rmrp1 is 100
|
||||||
|
-
|
||||||
|
!assert {model: mrp.repair, id: mrp_repair_rmrp1, string=amount_total should be 100}:
|
||||||
|
- amount_total == 100
|
||||||
|
-
|
||||||
|
I add a new fee line
|
||||||
|
-
|
||||||
|
!record {model: mrp.repair, id: mrp_repair_rmrp1}:
|
||||||
|
fees_lines:
|
||||||
|
- name: 'Assembly Service Cost'
|
||||||
|
product_id: product.product_assembly
|
||||||
|
product_uom_qty: 1.0
|
||||||
|
product_uom: product.product_uom_hour
|
||||||
|
price_unit: 12.0
|
||||||
|
to_invoice: True
|
||||||
|
-
|
||||||
|
I check the total amount of mrp_repair_rmrp1 is now 112
|
||||||
|
-
|
||||||
|
!assert {model: mrp.repair, id: mrp_repair_rmrp1, string=amount_total should be 112}:
|
||||||
|
- amount_total == 112
|
|
@ -61,7 +61,6 @@ Print product labels with barcode.
|
||||||
],
|
],
|
||||||
'test': [
|
'test': [
|
||||||
'product_pricelist_demo.yml',
|
'product_pricelist_demo.yml',
|
||||||
'test/product_uom.yml',
|
|
||||||
'test/product_pricelist.yml',
|
'test/product_pricelist.yml',
|
||||||
],
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
|
|
|
@ -18,12 +18,18 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
from openerp import tools
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
|
|
||||||
def rounding(f, r):
|
def rounding(f, r):
|
||||||
|
# TODO for trunk: log deprecation warning
|
||||||
|
# _logger.warning("Deprecated rounding method, please use tools.float_round to round floats.")
|
||||||
|
return tools.float_round(f, precision_rounding=r)
|
||||||
|
|
||||||
|
# TODO for trunk: add rounding method parameter to tools.float_round and use this method as hook
|
||||||
|
def ceiling(f, r):
|
||||||
if not r:
|
if not r:
|
||||||
return f
|
return f
|
||||||
return round(f / r) * r
|
return math.ceil(f / r) * r
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,7 @@
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from _common import rounding
|
from openerp import tools
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
|
|
||||||
|
@ -294,7 +293,8 @@ class product_pricelist(osv.osv):
|
||||||
if price is not False:
|
if price is not False:
|
||||||
price_limit = price
|
price_limit = price
|
||||||
price = price * (1.0+(res['price_discount'] or 0.0))
|
price = price * (1.0+(res['price_discount'] or 0.0))
|
||||||
price = rounding(price, res['price_round']) #TOFIX: rounding with tools.float_rouding
|
if res['price_round']:
|
||||||
|
price = tools.float_round(price, precision_rounding=res['price_round'])
|
||||||
price += (res['price_surcharge'] or 0.0)
|
price += (res['price_surcharge'] or 0.0)
|
||||||
if res['price_min_margin']:
|
if res['price_min_margin']:
|
||||||
price = max(price, price_limit+res['price_min_margin'])
|
price = max(price, price_limit+res['price_min_margin'])
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
import math
|
import math
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from _common import rounding
|
from _common import ceiling
|
||||||
|
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import osv, fields
|
||||||
|
@ -177,7 +177,7 @@ class product_uom(osv.osv):
|
||||||
return qty
|
return qty
|
||||||
amount = qty / from_unit.factor
|
amount = qty / from_unit.factor
|
||||||
if to_unit:
|
if to_unit:
|
||||||
amount = rounding(amount * to_unit.factor, to_unit.rounding)
|
amount = ceiling(amount * to_unit.factor, to_unit.rounding)
|
||||||
return amount
|
return amount
|
||||||
|
|
||||||
def _compute_price(self, cr, uid, from_uom_id, price, to_uom_id=False):
|
def _compute_price(self, cr, uid, from_uom_id, price, to_uom_id=False):
|
||||||
|
|
|
@ -178,7 +178,6 @@
|
||||||
<kanban>
|
<kanban>
|
||||||
<field name="color"/>
|
<field name="color"/>
|
||||||
<field name="type"/>
|
<field name="type"/>
|
||||||
<field name="image_small"/>
|
|
||||||
<field name="list_price"/>
|
<field name="list_price"/>
|
||||||
<templates>
|
<templates>
|
||||||
<t t-name="kanban-box">
|
<t t-name="kanban-box">
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
-
|
|
||||||
In order to test conversation of UOM,
|
|
||||||
-
|
|
||||||
I convert Grams into TON with price.
|
|
||||||
-
|
|
||||||
!python {model: product.uom}: |
|
|
||||||
from_uom_id = ref("product_uom_gram")
|
|
||||||
to_uom_id = ref("product_uom_ton")
|
|
||||||
price = 2
|
|
||||||
qty = 1020000
|
|
||||||
price = self._compute_price(cr, uid, from_uom_id, price, to_uom_id)
|
|
||||||
qty = self._compute_qty(cr, uid, from_uom_id, qty, to_uom_id)
|
|
||||||
assert qty == 1.02, "Qty is not correspond."
|
|
||||||
assert price == 2000000.0, "Price is not correspond."
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
from . import test_uom
|
||||||
|
|
||||||
|
fast_suite = [
|
||||||
|
test_uom,
|
||||||
|
]
|
|
@ -0,0 +1,37 @@
|
||||||
|
from openerp.tests.common import TransactionCase
|
||||||
|
|
||||||
|
class TestUom(TransactionCase):
|
||||||
|
"""Tests for unit of measure conversion"""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestUom, self).setUp()
|
||||||
|
self.product = self.registry('product.product')
|
||||||
|
self.uom = self.registry('product.uom')
|
||||||
|
self.imd = self.registry('ir.model.data')
|
||||||
|
|
||||||
|
def test_10_conversion(self):
|
||||||
|
cr, uid = self.cr, self.uid
|
||||||
|
gram_id = self.imd.get_object_reference(cr, uid, 'product', 'product_uom_gram')[1]
|
||||||
|
tonne_id = self.imd.get_object_reference(cr, uid, 'product', 'product_uom_ton')[1]
|
||||||
|
|
||||||
|
qty = self.uom._compute_qty(cr, uid, gram_id, 1020000, tonne_id)
|
||||||
|
self.assertEquals(qty, 1.02, "Converted quantity does not correspond.")
|
||||||
|
|
||||||
|
price = self.uom._compute_price(cr, uid, gram_id, 2, tonne_id)
|
||||||
|
self.assertEquals(price, 2000000.0, "Converted price does not correspond.")
|
||||||
|
|
||||||
|
def test_20_rounding(self):
|
||||||
|
cr, uid = self.cr, self.uid
|
||||||
|
unit_id = self.imd.get_object_reference(cr, uid, 'product', 'product_uom_unit')[1]
|
||||||
|
categ_unit_id = self.imd.get_object_reference(cr, uid, 'product', 'product_uom_categ_unit')[1]
|
||||||
|
|
||||||
|
score_id = self.uom.create(cr, uid, {
|
||||||
|
'name': 'Score',
|
||||||
|
'factor_inv': 20,
|
||||||
|
'uom_type': 'bigger',
|
||||||
|
'rounding': 1.0,
|
||||||
|
'category_id': categ_unit_id
|
||||||
|
})
|
||||||
|
|
||||||
|
qty = self.uom._compute_qty(cr, uid, unit_id, 2, score_id)
|
||||||
|
self.assertEquals(qty, 1, "Converted quantity should be rounded up.")
|
|
@ -53,9 +53,9 @@ class product_product(osv.osv):
|
||||||
states = ('draft', 'open', 'paid')
|
states = ('draft', 'open', 'paid')
|
||||||
|
|
||||||
sqlstr="""select
|
sqlstr="""select
|
||||||
sum(l.price_unit * l.quantity)/sum(l.quantity) as avg_unit_price,
|
sum(l.price_unit * l.quantity)/sum(nullif(l.quantity,0)) as avg_unit_price,
|
||||||
sum(l.quantity) as num_qty,
|
sum(l.quantity) as num_qty,
|
||||||
sum(l.quantity * (l.price_subtotal/l.quantity)) as total,
|
sum(l.quantity * (l.price_subtotal/(nullif(l.quantity,0)))) as total,
|
||||||
sum(l.quantity * pt.list_price) as sale_expected,
|
sum(l.quantity * pt.list_price) as sale_expected,
|
||||||
sum(l.quantity * pt.standard_price) as normal_cost
|
sum(l.quantity * pt.standard_price) as normal_cost
|
||||||
from account_invoice_line l
|
from account_invoice_line l
|
||||||
|
|
|
@ -180,8 +180,8 @@ class sale_order(osv.osv):
|
||||||
'date_confirm': fields.date('Confirmation Date', readonly=True, select=True, help="Date on which sales order is confirmed."),
|
'date_confirm': fields.date('Confirmation Date', readonly=True, select=True, help="Date on which sales order is confirmed."),
|
||||||
'user_id': fields.many2one('res.users', 'Salesperson', states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, select=True, track_visibility='onchange'),
|
'user_id': fields.many2one('res.users', 'Salesperson', states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, select=True, track_visibility='onchange'),
|
||||||
'partner_id': fields.many2one('res.partner', 'Customer', readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, required=True, change_default=True, select=True, track_visibility='always'),
|
'partner_id': fields.many2one('res.partner', 'Customer', readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, required=True, change_default=True, select=True, track_visibility='always'),
|
||||||
'partner_invoice_id': fields.many2one('res.partner', 'Invoice Address', readonly=True, required=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, help="Invoice address for current sales order."),
|
'partner_invoice_id': fields.many2one('res.partner', 'Invoice Address', domain="[('parent_id','=',partner_id)]", readonly=True, required=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, help="Invoice address for current sales order."),
|
||||||
'partner_shipping_id': fields.many2one('res.partner', 'Delivery Address', readonly=True, required=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, help="Delivery address for current sales order."),
|
'partner_shipping_id': fields.many2one('res.partner', 'Delivery Address', domain="[('parent_id','=',partner_id)]", readonly=True, required=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, help="Delivery address for current sales order."),
|
||||||
'order_policy': fields.selection([
|
'order_policy': fields.selection([
|
||||||
('manual', 'On Demand'),
|
('manual', 'On Demand'),
|
||||||
], 'Create Invoice', required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]},
|
], 'Create Invoice', required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]},
|
||||||
|
|
Loading…
Reference in New Issue