[IMP] doc: recommend not using @api.one
* alter docstring of @api.one to mark it as deprecated for 9.0, recommend using @api.multi instead - deprecation notes were not correctly styled, add styling matching "warning" alerts * move @api.one down the doc page to deemphasize it * fix "backend" tutorial to remove all instances of ``@api.one`` closes #8527
This commit is contained in:
parent
f627199def
commit
2474a91bc9
|
@ -9098,7 +9098,8 @@ hr.divider {
|
||||||
width: 900%;
|
width: 900%;
|
||||||
margin-left: -13px;
|
margin-left: -13px;
|
||||||
}
|
}
|
||||||
main .alert {
|
main .alert,
|
||||||
|
main .deprecated {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
border-width: 0 0 0 3px;
|
border-width: 0 0 0 3px;
|
||||||
|
@ -9110,25 +9111,35 @@ main .alert {
|
||||||
color: #173038;
|
color: #173038;
|
||||||
}
|
}
|
||||||
@media (min-width: 480px) {
|
@media (min-width: 480px) {
|
||||||
main .alert {
|
main .alert,
|
||||||
|
main .deprecated {
|
||||||
padding-left: 5.5em;
|
padding-left: 5.5em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
main .alert > p,
|
main .alert > p,
|
||||||
main .alert > ul {
|
main .deprecated > p,
|
||||||
|
main .alert > ul,
|
||||||
|
main .deprecated > ul {
|
||||||
margin: .5em 0;
|
margin: .5em 0;
|
||||||
}
|
}
|
||||||
main .alert > .alert-title,
|
main .alert > .alert-title,
|
||||||
main .alert > h3 {
|
main .deprecated > .alert-title,
|
||||||
|
main .alert > h3,
|
||||||
|
main .deprecated > h3 {
|
||||||
color: #4b9eb6;
|
color: #4b9eb6;
|
||||||
}
|
}
|
||||||
main .alert > .alert-title:before,
|
main .alert > .alert-title:before,
|
||||||
main .alert > h3:before {
|
main .deprecated > .alert-title:before,
|
||||||
|
main .alert > h3:before,
|
||||||
|
main .deprecated > h3:before {
|
||||||
content: "\e639";
|
content: "\e639";
|
||||||
}
|
}
|
||||||
main .alert > h3,
|
main .alert > h3,
|
||||||
main .alert > .alert-title {
|
main .deprecated > h3,
|
||||||
font-size: 1.642857143em;
|
main .alert > .alert-title,
|
||||||
|
main .deprecated > .alert-title,
|
||||||
|
main .alert > p > .versionmodified,
|
||||||
|
main .deprecated > p > .versionmodified {
|
||||||
line-height: 1em;
|
line-height: 1em;
|
||||||
margin: 0 0 10px 0;
|
margin: 0 0 10px 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -9136,12 +9147,15 @@ main .alert > .alert-title {
|
||||||
font-family: Lato, sans-serif;
|
font-family: Lato, sans-serif;
|
||||||
}
|
}
|
||||||
main .alert > h3:before,
|
main .alert > h3:before,
|
||||||
main .alert > .alert-title:before {
|
main .deprecated > h3:before,
|
||||||
|
main .alert > .alert-title:before,
|
||||||
|
main .deprecated > .alert-title:before,
|
||||||
|
main .alert > p > .versionmodified:before,
|
||||||
|
main .deprecated > p > .versionmodified:before {
|
||||||
font-family: 'Material-Design-Icons';
|
font-family: 'Material-Design-Icons';
|
||||||
content: "\e639";
|
content: "\e639";
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
text-rendering: geometricPrecision;
|
text-rendering: geometricPrecision;
|
||||||
font-size: 1.6em;
|
|
||||||
transform: translate(0, -0.15em);
|
transform: translate(0, -0.15em);
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
|
@ -9152,83 +9166,144 @@ main .alert > .alert-title:before {
|
||||||
}
|
}
|
||||||
@media (max-width: 480px) {
|
@media (max-width: 480px) {
|
||||||
main .alert > h3:before,
|
main .alert > h3:before,
|
||||||
main .alert > .alert-title:before {
|
main .deprecated > h3:before,
|
||||||
|
main .alert > .alert-title:before,
|
||||||
|
main .deprecated > .alert-title:before,
|
||||||
|
main .alert > p > .versionmodified:before,
|
||||||
|
main .deprecated > p > .versionmodified:before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
main .alert.alert-success {
|
main .alert.alert-success,
|
||||||
|
main .deprecated.alert-success {
|
||||||
border-color: #b9dfb9;
|
border-color: #b9dfb9;
|
||||||
background-color: #eef7ee;
|
background-color: #eef7ee;
|
||||||
color: #183518;
|
color: #183518;
|
||||||
}
|
}
|
||||||
main .alert.alert-success > .alert-title,
|
main .alert.alert-success > .alert-title,
|
||||||
main .alert.alert-success > h3 {
|
main .deprecated.alert-success > .alert-title,
|
||||||
|
main .alert.alert-success > h3,
|
||||||
|
main .deprecated.alert-success > h3 {
|
||||||
color: #50af51;
|
color: #50af51;
|
||||||
}
|
}
|
||||||
main .alert.alert-success > .alert-title:before,
|
main .alert.alert-success > .alert-title:before,
|
||||||
main .alert.alert-success > h3:before {
|
main .deprecated.alert-success > .alert-title:before,
|
||||||
|
main .alert.alert-success > h3:before,
|
||||||
|
main .deprecated.alert-success > h3:before {
|
||||||
content: "\e625";
|
content: "\e625";
|
||||||
}
|
}
|
||||||
main .alert.alert-info,
|
main .alert.alert-info,
|
||||||
main .alert.tip {
|
main .deprecated.alert-info,
|
||||||
|
main .alert.tip,
|
||||||
|
main .deprecated.tip {
|
||||||
border-color: #b8d9e2;
|
border-color: #b8d9e2;
|
||||||
background-color: #eef6f8;
|
background-color: #eef6f8;
|
||||||
color: #173038;
|
color: #173038;
|
||||||
}
|
}
|
||||||
main .alert.alert-info > .alert-title,
|
main .alert.alert-info > .alert-title,
|
||||||
|
main .deprecated.alert-info > .alert-title,
|
||||||
main .alert.tip > .alert-title,
|
main .alert.tip > .alert-title,
|
||||||
|
main .deprecated.tip > .alert-title,
|
||||||
main .alert.alert-info > h3,
|
main .alert.alert-info > h3,
|
||||||
main .alert.tip > h3 {
|
main .deprecated.alert-info > h3,
|
||||||
|
main .alert.tip > h3,
|
||||||
|
main .deprecated.tip > h3 {
|
||||||
color: #4b9eb6;
|
color: #4b9eb6;
|
||||||
}
|
}
|
||||||
main .alert.alert-info > .alert-title:before,
|
main .alert.alert-info > .alert-title:before,
|
||||||
|
main .deprecated.alert-info > .alert-title:before,
|
||||||
main .alert.tip > .alert-title:before,
|
main .alert.tip > .alert-title:before,
|
||||||
|
main .deprecated.tip > .alert-title:before,
|
||||||
main .alert.alert-info > h3:before,
|
main .alert.alert-info > h3:before,
|
||||||
main .alert.tip > h3:before {
|
main .deprecated.alert-info > h3:before,
|
||||||
|
main .alert.tip > h3:before,
|
||||||
|
main .deprecated.tip > h3:before {
|
||||||
content: "\e639";
|
content: "\e639";
|
||||||
}
|
}
|
||||||
main .alert.alert-warning,
|
main .alert.alert-warning,
|
||||||
main .alert.warning {
|
main .deprecated.alert-warning,
|
||||||
|
main .alert.warning,
|
||||||
|
main .deprecated.warning,
|
||||||
|
main .alert.deprecated,
|
||||||
|
main .deprecated.deprecated {
|
||||||
border-color: #fceedb;
|
border-color: #fceedb;
|
||||||
background-color: #fef9f3;
|
background-color: #fef9f3;
|
||||||
color: #81500b;
|
color: #81500b;
|
||||||
}
|
}
|
||||||
main .alert.alert-warning > .alert-title,
|
main .alert.alert-warning > .alert-title,
|
||||||
|
main .deprecated.alert-warning > .alert-title,
|
||||||
main .alert.warning > .alert-title,
|
main .alert.warning > .alert-title,
|
||||||
|
main .deprecated.warning > .alert-title,
|
||||||
|
main .alert.deprecated > .alert-title,
|
||||||
|
main .deprecated.deprecated > .alert-title,
|
||||||
main .alert.alert-warning > h3,
|
main .alert.alert-warning > h3,
|
||||||
main .alert.warning > h3 {
|
main .deprecated.alert-warning > h3,
|
||||||
|
main .alert.warning > h3,
|
||||||
|
main .deprecated.warning > h3,
|
||||||
|
main .alert.deprecated > h3,
|
||||||
|
main .deprecated.deprecated > h3,
|
||||||
|
main .alert.alert-warning > p > .versionmodified,
|
||||||
|
main .deprecated.alert-warning > p > .versionmodified,
|
||||||
|
main .alert.warning > p > .versionmodified,
|
||||||
|
main .deprecated.warning > p > .versionmodified,
|
||||||
|
main .alert.deprecated > p > .versionmodified,
|
||||||
|
main .deprecated.deprecated > p > .versionmodified {
|
||||||
color: #f0ad4e;
|
color: #f0ad4e;
|
||||||
}
|
}
|
||||||
main .alert.alert-warning > .alert-title:before,
|
main .alert.alert-warning > .alert-title:before,
|
||||||
|
main .deprecated.alert-warning > .alert-title:before,
|
||||||
main .alert.warning > .alert-title:before,
|
main .alert.warning > .alert-title:before,
|
||||||
|
main .deprecated.warning > .alert-title:before,
|
||||||
|
main .alert.deprecated > .alert-title:before,
|
||||||
|
main .deprecated.deprecated > .alert-title:before,
|
||||||
main .alert.alert-warning > h3:before,
|
main .alert.alert-warning > h3:before,
|
||||||
main .alert.warning > h3:before {
|
main .deprecated.alert-warning > h3:before,
|
||||||
|
main .alert.warning > h3:before,
|
||||||
|
main .deprecated.warning > h3:before,
|
||||||
|
main .alert.deprecated > h3:before,
|
||||||
|
main .deprecated.deprecated > h3:before,
|
||||||
|
main .alert.alert-warning > p > .versionmodified:before,
|
||||||
|
main .deprecated.alert-warning > p > .versionmodified:before,
|
||||||
|
main .alert.warning > p > .versionmodified:before,
|
||||||
|
main .deprecated.warning > p > .versionmodified:before,
|
||||||
|
main .alert.deprecated > p > .versionmodified:before,
|
||||||
|
main .deprecated.deprecated > p > .versionmodified:before {
|
||||||
content: "\e6a4";
|
content: "\e6a4";
|
||||||
}
|
}
|
||||||
main .alert.alert-danger {
|
main .alert.alert-danger,
|
||||||
|
main .deprecated.alert-danger {
|
||||||
border-color: #f4cecd;
|
border-color: #f4cecd;
|
||||||
background-color: #fdf7f7;
|
background-color: #fdf7f7;
|
||||||
color: #611715;
|
color: #611715;
|
||||||
}
|
}
|
||||||
main .alert.alert-danger > .alert-title,
|
main .alert.alert-danger > .alert-title,
|
||||||
main .alert.alert-danger > h3 {
|
main .deprecated.alert-danger > .alert-title,
|
||||||
|
main .alert.alert-danger > h3,
|
||||||
|
main .deprecated.alert-danger > h3 {
|
||||||
color: #d9534f;
|
color: #d9534f;
|
||||||
}
|
}
|
||||||
main .alert.alert-danger > .alert-title:before,
|
main .alert.alert-danger > .alert-title:before,
|
||||||
main .alert.alert-danger > h3:before {
|
main .deprecated.alert-danger > .alert-title:before,
|
||||||
|
main .alert.alert-danger > h3:before,
|
||||||
|
main .deprecated.alert-danger > h3:before {
|
||||||
content: "\e6a4";
|
content: "\e6a4";
|
||||||
}
|
}
|
||||||
main .alert.alert-exercise {
|
main .alert.alert-exercise,
|
||||||
|
main .deprecated.alert-exercise {
|
||||||
border-color: #deddde;
|
border-color: #deddde;
|
||||||
background-color: #f7f7f7;
|
background-color: #f7f7f7;
|
||||||
color: #393639;
|
color: #393639;
|
||||||
}
|
}
|
||||||
main .alert.alert-exercise > .alert-title,
|
main .alert.alert-exercise > .alert-title,
|
||||||
main .alert.alert-exercise > h3 {
|
main .deprecated.alert-exercise > .alert-title,
|
||||||
|
main .alert.alert-exercise > h3,
|
||||||
|
main .deprecated.alert-exercise > h3 {
|
||||||
color: #938e94;
|
color: #938e94;
|
||||||
}
|
}
|
||||||
main .alert.alert-exercise > .alert-title:before,
|
main .alert.alert-exercise > .alert-title:before,
|
||||||
main .alert.alert-exercise > h3:before {
|
main .deprecated.alert-exercise > .alert-title:before,
|
||||||
|
main .alert.alert-exercise > h3:before,
|
||||||
|
main .deprecated.alert-exercise > h3:before {
|
||||||
-webkit-transform: translate(0, 0);
|
-webkit-transform: translate(0, 0);
|
||||||
-ms-transform: translate(0, 0);
|
-ms-transform: translate(0, 0);
|
||||||
-o-transform: translate(0, 0);
|
-o-transform: translate(0, 0);
|
||||||
|
@ -9237,10 +9312,14 @@ main .alert.alert-exercise > h3:before {
|
||||||
content: "\e709";
|
content: "\e709";
|
||||||
}
|
}
|
||||||
@media (min-width: 1170px) {
|
@media (min-width: 1170px) {
|
||||||
main .alert.doc-content {
|
main .alert.doc-content,
|
||||||
|
main .deprecated.doc-content {
|
||||||
max-width: 55%;
|
max-width: 55%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
main .deprecated .versionmodified {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
.pq-patch {
|
.pq-patch {
|
||||||
background: #c2c2c2;
|
background: #c2c2c2;
|
||||||
}
|
}
|
||||||
|
@ -9508,7 +9587,7 @@ aside {
|
||||||
#navClone ul li {
|
#navClone ul li {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: none;
|
border-radius: 0;
|
||||||
border-bottom: 1px solid rgba(35, 43, 65, 0.1);
|
border-bottom: 1px solid rgba(35, 43, 65, 0.1);
|
||||||
}
|
}
|
||||||
.navbar-aside ul li > a,
|
.navbar-aside ul li > a,
|
||||||
|
@ -9520,7 +9599,7 @@ aside {
|
||||||
color: #393f4f;
|
color: #393f4f;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
display: block;
|
display: block;
|
||||||
border-radius: none;
|
border-radius: 0;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
background: #dbdbdb;
|
background: #dbdbdb;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
|
@ -9531,9 +9610,8 @@ aside {
|
||||||
#navClone ul li > a:active,
|
#navClone ul li > a:active,
|
||||||
.navbar-aside ul li > a:focus,
|
.navbar-aside ul li > a:focus,
|
||||||
#navClone ul li > a:focus {
|
#navClone ul li > a:focus {
|
||||||
background-color: transparent;
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
border-radius: none;
|
border-radius: 0;
|
||||||
background: #cecece;
|
background: #cecece;
|
||||||
border-left: 5px solid rgba(33, 183, 153, 0.5);
|
border-left: 5px solid rgba(33, 183, 153, 0.5);
|
||||||
}
|
}
|
||||||
|
@ -9617,7 +9695,6 @@ aside {
|
||||||
height: 56px;
|
height: 56px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
background-color: transparent;
|
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.1), 0 6px 20px 0 rgba(0, 0, 0, 0.05);
|
box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.1), 0 6px 20px 0 rgba(0, 0, 0, 0.05);
|
||||||
|
@ -9636,7 +9713,7 @@ aside {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
right: 0%;
|
right: 0;
|
||||||
width: 380px;
|
width: 380px;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -9650,7 +9727,6 @@ aside {
|
||||||
box-shadow: 0 0 0 transparent;
|
box-shadow: 0 0 0 transparent;
|
||||||
}
|
}
|
||||||
#floating_action_menu .content {
|
#floating_action_menu .content {
|
||||||
margin-bottom: 0;
|
|
||||||
margin: 0;
|
margin: 0;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
filter: alpha(opacity=0);
|
filter: alpha(opacity=0);
|
||||||
|
|
|
@ -353,7 +353,7 @@ hr.divider {
|
||||||
margin-left: -13px;
|
margin-left: -13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
main .alert {
|
main .alert, main .deprecated {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
border-width: 0 0 0 3px;
|
border-width: 0 0 0 3px;
|
||||||
|
@ -368,8 +368,7 @@ main .alert {
|
||||||
}
|
}
|
||||||
.alert-info; // 'INFO' is the default style
|
.alert-info; // 'INFO' is the default style
|
||||||
|
|
||||||
> h3, > .alert-title {
|
> h3, > .alert-title, > p > .versionmodified {
|
||||||
font-size: 1.642857143em;
|
|
||||||
line-height: 1em;
|
line-height: 1em;
|
||||||
margin: 0 0 10px 0;
|
margin: 0 0 10px 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -381,7 +380,6 @@ main .alert {
|
||||||
content: "\e639";
|
content: "\e639";
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
text-rendering: geometricPrecision;
|
text-rendering: geometricPrecision;
|
||||||
font-size: 1.6em;
|
|
||||||
transform: translate(0, -0.15em);
|
transform: translate(0, -0.15em);
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
|
@ -412,22 +410,22 @@ main .alert {
|
||||||
color: darken(@doc_info, 35%);
|
color: darken(@doc_info, 35%);
|
||||||
|
|
||||||
> .alert-title, > h3 {
|
> .alert-title, > h3 {
|
||||||
color: @doc_info
|
color: @doc_info;
|
||||||
}
|
&:before {
|
||||||
> .alert-title:before, > h3:before {
|
content: "\e639";
|
||||||
content: "\e639";
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&.alert-warning, &.warning {
|
&.alert-warning, &.warning, &.deprecated {
|
||||||
border-color: lighten(@doc_warning, 30%);
|
border-color: lighten(@doc_warning, 30%);
|
||||||
background-color: lighten(@doc_warning, 35%);
|
background-color: lighten(@doc_warning, 35%);
|
||||||
color: darken(@doc_warning, 35%);
|
color: darken(@doc_warning, 35%);
|
||||||
|
|
||||||
> .alert-title, > h3 {
|
> .alert-title, > h3, > p > .versionmodified {
|
||||||
color: @doc_warning
|
color: @doc_warning;
|
||||||
}
|
&:before {
|
||||||
> .alert-title:before, > h3:before {
|
content: "\e6a4";
|
||||||
content: "\e6a4";
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&.alert-danger {
|
&.alert-danger {
|
||||||
|
@ -436,10 +434,10 @@ main .alert {
|
||||||
color: darken(@doc_danger, 35%);
|
color: darken(@doc_danger, 35%);
|
||||||
|
|
||||||
> .alert-title, > h3 {
|
> .alert-title, > h3 {
|
||||||
color: @doc_danger
|
color: @doc_danger;
|
||||||
}
|
&:before {
|
||||||
> .alert-title:before, > h3:before {
|
content: "\e6a4";
|
||||||
content: "\e6a4";
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&.alert-exercise {
|
&.alert-exercise {
|
||||||
|
@ -449,11 +447,11 @@ main .alert {
|
||||||
|
|
||||||
> .alert-title, > h3 {
|
> .alert-title, > h3 {
|
||||||
color: @doc_exercise;
|
color: @doc_exercise;
|
||||||
}
|
&:before {
|
||||||
> .alert-title:before, > h3:before {
|
.translate(0;0);
|
||||||
.translate(0;0);
|
top: 28px;
|
||||||
top: 28px;
|
content: "\e709";
|
||||||
content: "\e709";
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -463,6 +461,9 @@ main .alert {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
main .deprecated .versionmodified {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
.pq-patch{
|
.pq-patch{
|
||||||
background: rgb(194, 194, 194);
|
background: rgb(194, 194, 194);
|
||||||
|
@ -688,7 +689,7 @@ aside{
|
||||||
li {
|
li {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
position:relative;
|
position:relative;
|
||||||
border-radius: none;
|
border-radius: 0;
|
||||||
border-bottom: 1px solid fadeout(@doc_text, 90%);
|
border-bottom: 1px solid fadeout(@doc_text, 90%);
|
||||||
> a {
|
> a {
|
||||||
font-size: 0.7em;
|
font-size: 0.7em;
|
||||||
|
@ -698,15 +699,14 @@ aside{
|
||||||
color: @doc_heading;
|
color: @doc_heading;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
display: block;
|
display: block;
|
||||||
border-radius: none;
|
border-radius: 0;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
background: darken(@doc_paper_dark, 10%);
|
background: darken(@doc_paper_dark, 10%);
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
|
|
||||||
&:hover, &:active, &:focus {
|
&:hover, &:active, &:focus {
|
||||||
background-color: transparent;
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
border-radius: none;
|
border-radius: 0;
|
||||||
background: darken(@doc_paper_dark, 15%);
|
background: darken(@doc_paper_dark, 15%);
|
||||||
border-left: 5px solid fadeout(@doc_accent, 50%);
|
border-left: 5px solid fadeout(@doc_accent, 50%);
|
||||||
}
|
}
|
||||||
|
@ -788,7 +788,6 @@ aside{
|
||||||
height: 56px;
|
height: 56px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
background-color: transparent;
|
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.1), 0 6px 20px 0 rgba(0, 0, 0, 0.05);
|
box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.1), 0 6px 20px 0 rgba(0, 0, 0, 0.05);
|
||||||
|
@ -806,7 +805,7 @@ aside{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
right: 0%;
|
right: 0;
|
||||||
width: 380px;
|
width: 380px;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -817,7 +816,6 @@ aside{
|
||||||
.box-shadow(0 0 0 transparent);
|
.box-shadow(0 0 0 transparent);
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
margin-bottom: 0;
|
|
||||||
margin:0;
|
margin:0;
|
||||||
li {
|
li {
|
||||||
border: none;
|
border: none;
|
||||||
|
|
|
@ -787,13 +787,6 @@ method should simply set the value of the field to compute on every record in
|
||||||
for record in self:
|
for record in self:
|
||||||
record.name = str(random.randint(1, 1e6))
|
record.name = str(random.randint(1, 1e6))
|
||||||
|
|
||||||
Our compute method is very simple: it loops over ``self`` and performs the same
|
|
||||||
operation on every record. We can make it slightly simpler by using the
|
|
||||||
decorator :func:`~openerp.api.one` to automatically loop on the collection::
|
|
||||||
|
|
||||||
@api.one
|
|
||||||
def _compute_name(self):
|
|
||||||
self.name = str(random.randint(1, 1e6))
|
|
||||||
|
|
||||||
Dependencies
|
Dependencies
|
||||||
------------
|
------------
|
||||||
|
@ -812,10 +805,10 @@ field whenever some of its dependencies have been modified::
|
||||||
name = fields.Char(compute='_compute_name')
|
name = fields.Char(compute='_compute_name')
|
||||||
value = fields.Integer()
|
value = fields.Integer()
|
||||||
|
|
||||||
@api.one
|
|
||||||
@api.depends('value')
|
@api.depends('value')
|
||||||
def _compute_name(self):
|
def _compute_name(self):
|
||||||
self.name = "Record with value %s" % self.value
|
for record in self:
|
||||||
|
self.name = "Record with value %s" % self.value
|
||||||
|
|
||||||
.. exercise:: Computed fields
|
.. exercise:: Computed fields
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# Parent 85a8d7317b9e13480f39ad739955442d15144451
|
# Parent 85a8d7317b9e13480f39ad739955442d15144451
|
||||||
|
# Parent 16fcdc4c6462a7872636f3c19550c16879af5281
|
||||||
|
|
||||||
Index: addons/openacademy/models.py
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
===================================================================
|
--- a/openacademy/models.py
|
||||||
--- addons.orig/openacademy/models.py 2014-08-28 13:45:01.987048512 +0200
|
+++ b/openacademy/models.py
|
||||||
+++ addons/openacademy/models.py 2014-08-28 13:59:30.387035620 +0200
|
|
||||||
@@ -1,5 +1,6 @@
|
@@ -1,5 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
@ -12,50 +12,49 @@ Index: addons/openacademy/models.py
|
||||||
from openerp import models, fields, api, exceptions
|
from openerp import models, fields, api, exceptions
|
||||||
|
|
||||||
class Course(models.Model):
|
class Course(models.Model):
|
||||||
@@ -55,6 +56,8 @@
|
@@ -55,6 +56,8 @@ class Session(models.Model):
|
||||||
attendee_ids = fields.Many2many('res.partner', string="Attendees")
|
attendee_ids = fields.Many2many('res.partner', string="Attendees")
|
||||||
|
|
||||||
taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')
|
taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')
|
||||||
+ end_date = fields.Date(string="End Date", store=True,
|
+ end_date = fields.Date(string="End Date", store=True,
|
||||||
+ compute='_get_end_date', inverse='_set_end_date')
|
+ compute='_get_end_date', inverse='_set_end_date')
|
||||||
|
|
||||||
@api.one
|
|
||||||
@api.depends('seats', 'attendee_ids')
|
@api.depends('seats', 'attendee_ids')
|
||||||
@@ -82,6 +85,30 @@
|
def _taken_seats(self):
|
||||||
|
@@ -81,6 +84,30 @@ class Session(models.Model):
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.one
|
|
||||||
+ @api.depends('start_date', 'duration')
|
+ @api.depends('start_date', 'duration')
|
||||||
+ def _get_end_date(self):
|
+ def _get_end_date(self):
|
||||||
+ if not (self.start_date and self.duration):
|
+ for r in self:
|
||||||
+ self.end_date = self.start_date
|
+ if not (r.start_date and r.duration):
|
||||||
+ return
|
+ r.end_date = r.start_date
|
||||||
|
+ continue
|
||||||
+
|
+
|
||||||
+ # Add duration to start_date, but: Monday + 5 days = Saturday, so
|
+ # Add duration to start_date, but: Monday + 5 days = Saturday, so
|
||||||
+ # subtract one second to get on Friday instead
|
+ # subtract one second to get on Friday instead
|
||||||
+ start = fields.Datetime.from_string(self.start_date)
|
+ start = fields.Datetime.from_string(r.start_date)
|
||||||
+ duration = timedelta(days=self.duration, seconds=-1)
|
+ duration = timedelta(days=r.duration, seconds=-1)
|
||||||
+ self.end_date = start + duration
|
+ r.end_date = start + duration
|
||||||
+
|
+
|
||||||
+ @api.one
|
|
||||||
+ def _set_end_date(self):
|
+ def _set_end_date(self):
|
||||||
+ if not (self.start_date and self.end_date):
|
+ for r in self:
|
||||||
+ return
|
+ if not (r.start_date and r.end_date):
|
||||||
|
+ continue
|
||||||
+
|
+
|
||||||
+ # Compute the difference between dates, but: Friday - Monday = 4 days,
|
+ # Compute the difference between dates, but: Friday - Monday = 4 days,
|
||||||
+ # so add one day to get 5 days instead
|
+ # so add one day to get 5 days instead
|
||||||
+ start_date = fields.Datetime.from_string(self.start_date)
|
+ start_date = fields.Datetime.from_string(r.start_date)
|
||||||
+ end_date = fields.Datetime.from_string(self.end_date)
|
+ end_date = fields.Datetime.from_string(r.end_date)
|
||||||
+ self.duration = (end_date - start_date).days + 1
|
+ r.duration = (end_date - start_date).days + 1
|
||||||
+
|
+
|
||||||
+ @api.one
|
|
||||||
@api.constrains('instructor_id', 'attendee_ids')
|
@api.constrains('instructor_id', 'attendee_ids')
|
||||||
def _check_instructor_not_in_attendees(self):
|
def _check_instructor_not_in_attendees(self):
|
||||||
if self.instructor_id and self.instructor_id in self.attendee_ids:
|
for r in self:
|
||||||
Index: addons/openacademy/views/openacademy.xml
|
diff --git a/openacademy/views/openacademy.xml b/openacademy/views/openacademy.xml
|
||||||
===================================================================
|
--- a/openacademy/views/openacademy.xml
|
||||||
--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 13:45:01.987048512 +0200
|
+++ b/openacademy/views/openacademy.xml
|
||||||
+++ addons/openacademy/views/openacademy.xml 2014-08-28 13:54:02.000000000 +0200
|
|
||||||
@@ -125,11 +125,24 @@
|
@@ -125,11 +125,24 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# Parent a358be0a577b0569831958a8ec1302825c645dee
|
# Parent a358be0a577b0569831958a8ec1302825c645dee
|
||||||
|
# Parent 59107edbe5f81bab5e7db172bf2bffa504ce399a
|
||||||
|
|
||||||
Index: addons/openacademy/models.py
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
===================================================================
|
--- a/openacademy/models.py
|
||||||
--- addons.orig/openacademy/models.py 2014-08-26 17:26:03.795783315 +0200
|
+++ b/openacademy/models.py
|
||||||
+++ addons/openacademy/models.py 2014-08-26 17:26:03.791783315 +0200
|
@@ -28,3 +28,13 @@ class Session(models.Model):
|
||||||
@@ -28,3 +28,13 @@
|
|
||||||
course_id = fields.Many2one('openacademy.course',
|
course_id = fields.Many2one('openacademy.course',
|
||||||
ondelete='cascade', string="Course", required=True)
|
ondelete='cascade', string="Course", required=True)
|
||||||
attendee_ids = fields.Many2many('res.partner', string="Attendees")
|
attendee_ids = fields.Many2many('res.partner', string="Attendees")
|
||||||
+
|
+
|
||||||
+ taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')
|
+ taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')
|
||||||
+
|
+
|
||||||
+ @api.one
|
|
||||||
+ @api.depends('seats', 'attendee_ids')
|
+ @api.depends('seats', 'attendee_ids')
|
||||||
+ def _taken_seats(self):
|
+ def _taken_seats(self):
|
||||||
+ if not self.seats:
|
+ for r in self:
|
||||||
+ self.taken_seats = 0.0
|
+ if not r.seats:
|
||||||
+ else:
|
+ r.taken_seats = 0.0
|
||||||
+ self.taken_seats = 100.0 * len(self.attendee_ids) / self.seats
|
+ else:
|
||||||
Index: addons/openacademy/views/openacademy.xml
|
+ r.taken_seats = 100.0 * len(r.attendee_ids) / r.seats
|
||||||
===================================================================
|
diff --git a/openacademy/views/openacademy.xml b/openacademy/views/openacademy.xml
|
||||||
--- addons.orig/openacademy/views/openacademy.xml 2014-08-26 17:26:03.795783315 +0200
|
--- a/openacademy/views/openacademy.xml
|
||||||
+++ addons/openacademy/views/openacademy.xml 2014-08-26 17:26:03.791783315 +0200
|
+++ b/openacademy/views/openacademy.xml
|
||||||
@@ -100,6 +100,7 @@
|
@@ -100,6 +100,7 @@
|
||||||
<field name="start_date"/>
|
<field name="start_date"/>
|
||||||
<field name="duration"/>
|
<field name="duration"/>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# Parent 7a7d003fe38426a405ce0657a627a139133ec4dd
|
# Parent 7a7d003fe38426a405ce0657a627a139133ec4dd
|
||||||
|
# Parent 52f54b46487c8224a5aade4b921be77360ed3eae
|
||||||
|
|
||||||
Index: addons/openacademy/models.py
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
===================================================================
|
--- a/openacademy/models.py
|
||||||
--- addons.orig/openacademy/models.py 2014-08-26 17:26:06.591783274 +0200
|
+++ b/openacademy/models.py
|
||||||
+++ addons/openacademy/models.py 2014-08-26 17:26:06.587783274 +0200
|
|
||||||
@@ -1,6 +1,6 @@
|
@@ -1,6 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
@ -13,13 +13,13 @@ Index: addons/openacademy/models.py
|
||||||
|
|
||||||
class Course(models.Model):
|
class Course(models.Model):
|
||||||
_name = 'openacademy.course'
|
_name = 'openacademy.course'
|
||||||
@@ -56,3 +56,9 @@
|
@@ -56,3 +56,9 @@ class Session(models.Model):
|
||||||
'message': "Increase seats or remove excess attendees",
|
'message': "Increase seats or remove excess attendees",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+ @api.one
|
|
||||||
+ @api.constrains('instructor_id', 'attendee_ids')
|
+ @api.constrains('instructor_id', 'attendee_ids')
|
||||||
+ def _check_instructor_not_in_attendees(self):
|
+ def _check_instructor_not_in_attendees(self):
|
||||||
+ if self.instructor_id and self.instructor_id in self.attendee_ids:
|
+ for r in self:
|
||||||
+ raise exceptions.ValidationError("A session's instructor can't be an attendee")
|
+ if r.instructor_id and r.instructor_id in r.attendee_ids:
|
||||||
|
+ raise exceptions.ValidationError("A session's instructor can't be an attendee")
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# Parent 7d14b75cdfd4c7a272a13572947de5d47f3e851f
|
# Parent 7d14b75cdfd4c7a272a13572947de5d47f3e851f
|
||||||
|
# Parent f400352a70963801f0b4732d33a0183e4f6800ff
|
||||||
|
|
||||||
Index: addons/openacademy/models.py
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
===================================================================
|
--- a/openacademy/models.py
|
||||||
--- addons.orig/openacademy/models.py 2014-08-28 11:00:44.343194847 +0200
|
+++ b/openacademy/models.py
|
||||||
+++ addons/openacademy/models.py 2014-08-28 13:44:32.143048955 +0200
|
@@ -13,6 +13,20 @@ class Course(models.Model):
|
||||||
@@ -13,6 +13,20 @@
|
|
||||||
session_ids = fields.One2many(
|
session_ids = fields.One2many(
|
||||||
'openacademy.session', 'course_id', string="Sessions")
|
'openacademy.session', 'course_id', string="Sessions")
|
||||||
|
|
||||||
+ @api.one
|
+ @api.multi
|
||||||
+ def copy(self, default=None):
|
+ def copy(self, default=None):
|
||||||
+ default = dict(default or {})
|
+ default = dict(default or {})
|
||||||
+
|
+
|
||||||
|
|
|
@ -1,40 +1,39 @@
|
||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# Parent dba00a105dd2a82490394b8dec5fea5f1d8847e1
|
# Parent dba00a105dd2a82490394b8dec5fea5f1d8847e1
|
||||||
|
# Parent f4374b6e2e661e0782e396b24c57c1eb97d13288
|
||||||
|
|
||||||
Index: addons/openacademy/models.py
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
===================================================================
|
--- a/openacademy/models.py
|
||||||
--- addons.orig/openacademy/models.py 2014-08-28 14:21:46.543015785 +0200
|
+++ b/openacademy/models.py
|
||||||
+++ addons/openacademy/models.py 2014-08-28 14:21:46.539015785 +0200
|
@@ -59,6 +59,9 @@ class Session(models.Model):
|
||||||
@@ -59,6 +59,9 @@
|
|
||||||
end_date = fields.Date(string="End Date", store=True,
|
end_date = fields.Date(string="End Date", store=True,
|
||||||
compute='_get_end_date', inverse='_set_end_date')
|
compute='_get_end_date', inverse='_set_end_date')
|
||||||
|
|
||||||
+ hours = fields.Float(string="Duration in hours",
|
+ hours = fields.Float(string="Duration in hours",
|
||||||
+ compute='_get_hours', inverse='_set_hours')
|
+ compute='_get_hours', inverse='_set_hours')
|
||||||
+
|
+
|
||||||
@api.one
|
|
||||||
@api.depends('seats', 'attendee_ids')
|
@api.depends('seats', 'attendee_ids')
|
||||||
def _taken_seats(self):
|
def _taken_seats(self):
|
||||||
@@ -109,6 +112,15 @@
|
for r in self:
|
||||||
self.duration = (end_date - start_date).days + 1
|
@@ -108,6 +111,15 @@ class Session(models.Model):
|
||||||
|
end_date = fields.Datetime.from_string(r.end_date)
|
||||||
|
r.duration = (end_date - start_date).days + 1
|
||||||
|
|
||||||
@api.one
|
|
||||||
+ @api.depends('duration')
|
+ @api.depends('duration')
|
||||||
+ def _get_hours(self):
|
+ def _get_hours(self):
|
||||||
+ self.hours = self.duration * 24
|
+ for r in self:
|
||||||
|
+ r.hours = r.duration * 24
|
||||||
+
|
+
|
||||||
+ @api.one
|
|
||||||
+ def _set_hours(self):
|
+ def _set_hours(self):
|
||||||
+ self.duration = self.hours / 24
|
+ for r in self:
|
||||||
|
+ r.duration = r.hours / 24
|
||||||
+
|
+
|
||||||
+ @api.one
|
|
||||||
@api.constrains('instructor_id', 'attendee_ids')
|
@api.constrains('instructor_id', 'attendee_ids')
|
||||||
def _check_instructor_not_in_attendees(self):
|
def _check_instructor_not_in_attendees(self):
|
||||||
if self.instructor_id and self.instructor_id in self.attendee_ids:
|
for r in self:
|
||||||
Index: addons/openacademy/views/openacademy.xml
|
diff --git a/openacademy/views/openacademy.xml b/openacademy/views/openacademy.xml
|
||||||
===================================================================
|
--- a/openacademy/views/openacademy.xml
|
||||||
--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:21:46.543015785 +0200
|
+++ b/openacademy/views/openacademy.xml
|
||||||
+++ addons/openacademy/views/openacademy.xml 2014-08-28 14:21:46.539015785 +0200
|
|
||||||
@@ -145,11 +145,23 @@
|
@@ -145,11 +145,23 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
@ -1,37 +1,36 @@
|
||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# Parent a6fe4d3923db1f8f5dff2c39a711a814b0a0f549
|
# Parent a6fe4d3923db1f8f5dff2c39a711a814b0a0f549
|
||||||
|
# Parent 0687e07f570f363bf5005c6337e0c565a63a6bac
|
||||||
|
|
||||||
Index: addons/openacademy/models.py
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
===================================================================
|
--- a/openacademy/models.py
|
||||||
--- addons.orig/openacademy/models.py 2014-08-28 14:21:55.039015659 +0200
|
+++ b/openacademy/models.py
|
||||||
+++ addons/openacademy/models.py 2014-08-28 14:21:55.031015659 +0200
|
@@ -62,6 +62,9 @@ class Session(models.Model):
|
||||||
@@ -62,6 +62,9 @@
|
|
||||||
hours = fields.Float(string="Duration in hours",
|
hours = fields.Float(string="Duration in hours",
|
||||||
compute='_get_hours', inverse='_set_hours')
|
compute='_get_hours', inverse='_set_hours')
|
||||||
|
|
||||||
+ attendees_count = fields.Integer(
|
+ attendees_count = fields.Integer(
|
||||||
+ string="Attendees count", compute='_get_attendees_count', store=True)
|
+ string="Attendees count", compute='_get_attendees_count', store=True)
|
||||||
+
|
+
|
||||||
@api.one
|
|
||||||
@api.depends('seats', 'attendee_ids')
|
@api.depends('seats', 'attendee_ids')
|
||||||
def _taken_seats(self):
|
def _taken_seats(self):
|
||||||
@@ -121,6 +124,11 @@
|
for r in self:
|
||||||
self.duration = self.hours / 24
|
@@ -120,6 +123,11 @@ class Session(models.Model):
|
||||||
|
for r in self:
|
||||||
|
r.duration = r.hours / 24
|
||||||
|
|
||||||
@api.one
|
|
||||||
+ @api.depends('attendee_ids')
|
+ @api.depends('attendee_ids')
|
||||||
+ def _get_attendees_count(self):
|
+ def _get_attendees_count(self):
|
||||||
+ self.attendees_count = len(self.attendee_ids)
|
+ for r in self:
|
||||||
|
+ r.attendees_count = len(r.attendee_ids)
|
||||||
+
|
+
|
||||||
+ @api.one
|
|
||||||
@api.constrains('instructor_id', 'attendee_ids')
|
@api.constrains('instructor_id', 'attendee_ids')
|
||||||
def _check_instructor_not_in_attendees(self):
|
def _check_instructor_not_in_attendees(self):
|
||||||
if self.instructor_id and self.instructor_id in self.attendee_ids:
|
for r in self:
|
||||||
Index: addons/openacademy/views/openacademy.xml
|
diff --git a/openacademy/views/openacademy.xml b/openacademy/views/openacademy.xml
|
||||||
===================================================================
|
--- a/openacademy/views/openacademy.xml
|
||||||
--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:21:55.039015659 +0200
|
+++ b/openacademy/views/openacademy.xml
|
||||||
+++ addons/openacademy/views/openacademy.xml 2014-08-28 14:21:55.031015659 +0200
|
@@ -157,11 +157,22 @@
|
||||||
@@ -158,11 +158,22 @@
|
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# Parent 8d5573b704b2867788dd6895503f1871c2976a29
|
# Parent 8d5573b704b2867788dd6895503f1871c2976a29
|
||||||
|
# Parent 9eb163e5da677a0d09e01a354ba56697b576a4bc
|
||||||
|
|
||||||
Index: addons/openacademy/models.py
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
===================================================================
|
--- a/openacademy/models.py
|
||||||
--- addons.orig/openacademy/models.py 2014-08-26 17:26:05.687783287 +0200
|
+++ b/openacademy/models.py
|
||||||
+++ addons/openacademy/models.py 2014-08-26 17:26:05.679783287 +0200
|
@@ -39,3 +39,20 @@ class Session(models.Model):
|
||||||
@@ -39,3 +39,20 @@
|
r.taken_seats = 0.0
|
||||||
self.taken_seats = 0.0
|
else:
|
||||||
else:
|
r.taken_seats = 100.0 * len(r.attendee_ids) / r.seats
|
||||||
self.taken_seats = 100.0 * len(self.attendee_ids) / self.seats
|
|
||||||
+
|
+
|
||||||
+ @api.onchange('seats', 'attendee_ids')
|
+ @api.onchange('seats', 'attendee_ids')
|
||||||
+ def _verify_valid_seats(self):
|
+ def _verify_valid_seats(self):
|
||||||
|
|
|
@ -1,39 +1,38 @@
|
||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# Parent 8c721171aa16a41e94059f53d6780c67b5ef2dfc
|
# Parent 8c721171aa16a41e94059f53d6780c67b5ef2dfc
|
||||||
|
# Parent 8d2ca42b5be2031ea9624896df53f09f7ca131be
|
||||||
|
|
||||||
Index: addons/openacademy/models.py
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
===================================================================
|
--- a/openacademy/models.py
|
||||||
--- addons.orig/openacademy/models.py 2014-08-28 14:22:01.371015565 +0200
|
+++ b/openacademy/models.py
|
||||||
+++ addons/openacademy/models.py 2014-08-28 14:22:01.367015565 +0200
|
@@ -66,6 +66,24 @@ class Session(models.Model):
|
||||||
@@ -66,6 +66,24 @@
|
|
||||||
attendees_count = fields.Integer(
|
attendees_count = fields.Integer(
|
||||||
string="Attendees count", compute='_get_attendees_count', store=True)
|
string="Attendees count", compute='_get_attendees_count', store=True)
|
||||||
|
|
||||||
+ state = fields.Selection([
|
+ state = fields.Selection([
|
||||||
+ ('draft', "Draft"),
|
+ ('draft', "Draft"),
|
||||||
+ ('confirmed', "Confirmed"),
|
+ ('confirmed', "Confirmed"),
|
||||||
+ ('done', "Done"),
|
+ ('done', "Done"),
|
||||||
+ ], default='draft')
|
+ ], default='draft')
|
||||||
+
|
+
|
||||||
+ @api.one
|
+ @api.multi
|
||||||
+ def action_draft(self):
|
+ def action_draft(self):
|
||||||
+ self.state = 'draft'
|
+ self.state = 'draft'
|
||||||
+
|
+
|
||||||
+ @api.one
|
+ @api.multi
|
||||||
+ def action_confirm(self):
|
+ def action_confirm(self):
|
||||||
+ self.state = 'confirmed'
|
+ self.state = 'confirmed'
|
||||||
+
|
+
|
||||||
+ @api.one
|
+ @api.multi
|
||||||
+ def action_done(self):
|
+ def action_done(self):
|
||||||
+ self.state = 'done'
|
+ self.state = 'done'
|
||||||
+
|
+
|
||||||
@api.one
|
|
||||||
@api.depends('seats', 'attendee_ids')
|
@api.depends('seats', 'attendee_ids')
|
||||||
def _taken_seats(self):
|
def _taken_seats(self):
|
||||||
Index: addons/openacademy/views/openacademy.xml
|
for r in self:
|
||||||
===================================================================
|
diff --git a/openacademy/views/openacademy.xml b/openacademy/views/openacademy.xml
|
||||||
--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:22:01.371015565 +0200
|
--- a/openacademy/views/openacademy.xml
|
||||||
+++ addons/openacademy/views/openacademy.xml 2014-08-28 14:22:01.367015565 +0200
|
+++ b/openacademy/views/openacademy.xml
|
||||||
@@ -96,6 +96,19 @@
|
@@ -96,6 +96,19 @@
|
||||||
<field name="model">openacademy.session</field>
|
<field name="model">openacademy.session</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# Parent c72382bf0c5794135fa318f6ba59899b2277d8c5
|
# Parent c72382bf0c5794135fa318f6ba59899b2277d8c5
|
||||||
|
# Parent 82f902dbb7aab4d3ddd9caaa9170536afa9d274d
|
||||||
|
|
||||||
Index: addons/openacademy/__openerp__.py
|
diff --git a/openacademy/__openerp__.py b/openacademy/__openerp__.py
|
||||||
===================================================================
|
--- a/openacademy/__openerp__.py
|
||||||
--- addons.orig/openacademy/__openerp__.py 2014-08-28 14:22:04.135015524 +0200
|
+++ b/openacademy/__openerp__.py
|
||||||
+++ addons/openacademy/__openerp__.py 2014-08-28 14:22:04.131015524 +0200
|
|
||||||
@@ -29,6 +29,7 @@
|
@@ -29,6 +29,7 @@
|
||||||
'templates.xml',
|
'templates.xml',
|
||||||
'views/openacademy.xml',
|
'views/openacademy.xml',
|
||||||
|
@ -13,23 +13,21 @@ Index: addons/openacademy/__openerp__.py
|
||||||
],
|
],
|
||||||
# only loaded in demonstration mode
|
# only loaded in demonstration mode
|
||||||
'demo': [
|
'demo': [
|
||||||
Index: addons/openacademy/models.py
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
===================================================================
|
--- a/openacademy/models.py
|
||||||
--- addons.orig/openacademy/models.py 2014-08-28 14:22:04.135015524 +0200
|
+++ b/openacademy/models.py
|
||||||
+++ addons/openacademy/models.py 2014-08-28 14:22:04.131015524 +0200
|
@@ -70,7 +70,7 @@ class Session(models.Model):
|
||||||
@@ -70,7 +70,7 @@
|
('draft', "Draft"),
|
||||||
('draft', "Draft"),
|
('confirmed', "Confirmed"),
|
||||||
('confirmed', "Confirmed"),
|
('done', "Done"),
|
||||||
('done', "Done"),
|
|
||||||
- ], default='draft')
|
- ], default='draft')
|
||||||
+ ])
|
+ ])
|
||||||
|
|
||||||
@api.one
|
@api.multi
|
||||||
def action_draft(self):
|
def action_draft(self):
|
||||||
Index: addons/openacademy/views/openacademy.xml
|
diff --git a/openacademy/views/openacademy.xml b/openacademy/views/openacademy.xml
|
||||||
===================================================================
|
--- a/openacademy/views/openacademy.xml
|
||||||
--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:22:04.135015524 +0200
|
+++ b/openacademy/views/openacademy.xml
|
||||||
+++ addons/openacademy/views/openacademy.xml 2014-08-28 14:22:04.131015524 +0200
|
|
||||||
@@ -97,13 +97,13 @@
|
@@ -97,13 +97,13 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Session Form">
|
<form string="Session Form">
|
||||||
|
@ -47,10 +45,10 @@ Index: addons/openacademy/views/openacademy.xml
|
||||||
string="Mark as done" states="confirmed"
|
string="Mark as done" states="confirmed"
|
||||||
class="oe_highlight"/>
|
class="oe_highlight"/>
|
||||||
<field name="state" widget="statusbar"/>
|
<field name="state" widget="statusbar"/>
|
||||||
Index: addons/openacademy/views/session_workflow.xml
|
diff --git a/openacademy/views/session_workflow.xml b/openacademy/views/session_workflow.xml
|
||||||
===================================================================
|
new file mode 100644
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null
|
||||||
+++ addons/openacademy/views/session_workflow.xml 2014-08-28 14:22:04.131015524 +0200
|
+++ b/openacademy/views/session_workflow.xml
|
||||||
@@ -0,0 +1,50 @@
|
@@ -0,0 +1,50 @@
|
||||||
+<openerp>
|
+<openerp>
|
||||||
+ <data>
|
+ <data>
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
Index: addons/openacademy/models.py
|
# HG changeset patch
|
||||||
===================================================================
|
# Parent 7c95aad3b60e4c2006c5f706bd157e8e05318bfa
|
||||||
--- addons.orig/openacademy/models.py 2014-08-28 14:02:42.203032773 +0200
|
|
||||||
+++ addons/openacademy/models.py 2014-08-28 14:06:54.871029022 +0200
|
diff --git a/openacademy/models.py b/openacademy/models.py
|
||||||
|
--- a/openacademy/models.py
|
||||||
|
+++ b/openacademy/models.py
|
||||||
@@ -1,7 +1,7 @@
|
@@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
@ -11,7 +13,7 @@ Index: addons/openacademy/models.py
|
||||||
|
|
||||||
class Course(models.Model):
|
class Course(models.Model):
|
||||||
_name = 'openacademy.course'
|
_name = 'openacademy.course'
|
||||||
@@ -19,11 +19,11 @@
|
@@ -19,11 +19,11 @@ class Course(models.Model):
|
||||||
default = dict(default or {})
|
default = dict(default or {})
|
||||||
|
|
||||||
copied_count = self.search_count(
|
copied_count = self.search_count(
|
||||||
|
@ -26,7 +28,7 @@ Index: addons/openacademy/models.py
|
||||||
|
|
||||||
default['name'] = new_name
|
default['name'] = new_name
|
||||||
return super(Course, self).copy(default)
|
return super(Course, self).copy(default)
|
||||||
@@ -97,15 +97,15 @@
|
@@ -97,15 +97,15 @@ class Session(models.Model):
|
||||||
if self.seats < 0:
|
if self.seats < 0:
|
||||||
return {
|
return {
|
||||||
'warning': {
|
'warning': {
|
||||||
|
@ -46,9 +48,9 @@ Index: addons/openacademy/models.py
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,4 +151,4 @@
|
@@ -151,4 +151,4 @@ class Session(models.Model):
|
||||||
@api.constrains('instructor_id', 'attendee_ids')
|
|
||||||
def _check_instructor_not_in_attendees(self):
|
def _check_instructor_not_in_attendees(self):
|
||||||
if self.instructor_id and self.instructor_id in self.attendee_ids:
|
for r in self:
|
||||||
- raise exceptions.ValidationError("A session's instructor can't be an attendee")
|
if r.instructor_id and r.instructor_id in r.attendee_ids:
|
||||||
+ raise exceptions.ValidationError(_("A session's instructor can't be an attendee"))
|
- raise exceptions.ValidationError("A session's instructor can't be an attendee")
|
||||||
|
+ raise exceptions.ValidationError(_("A session's instructor can't be an attendee"))
|
||||||
|
|
|
@ -766,8 +766,8 @@ Method decorators
|
||||||
=================
|
=================
|
||||||
|
|
||||||
.. automodule:: openerp.api
|
.. automodule:: openerp.api
|
||||||
:members: one, multi, model, depends, constrains, onchange, returns,
|
:members: multi, model, depends, constrains, onchange, returns,
|
||||||
v7, v8
|
one, v7, v8
|
||||||
|
|
||||||
.. _reference/orm/fields:
|
.. _reference/orm/fields:
|
||||||
|
|
||||||
|
|
|
@ -383,6 +383,15 @@ def one(method):
|
||||||
names = recs.method(args)
|
names = recs.method(args)
|
||||||
|
|
||||||
names = model.method(cr, uid, ids, args, context=context)
|
names = model.method(cr, uid, ids, args, context=context)
|
||||||
|
|
||||||
|
.. deprecated:: 9.0
|
||||||
|
|
||||||
|
:func:`~.one` often makes the code less clear and behaves in ways
|
||||||
|
developers and readers may not expect.
|
||||||
|
|
||||||
|
It is strongly recommended to use :func:`~.multi` and either
|
||||||
|
iterate on the ``self`` recordset or ensure that the recordset
|
||||||
|
is a single record with :meth:`~openerp.models.Model.ensure_one`.
|
||||||
"""
|
"""
|
||||||
split = get_context_split(method)
|
split = get_context_split(method)
|
||||||
downgrade = get_downgrade(method)
|
downgrade = get_downgrade(method)
|
||||||
|
|
Loading…
Reference in New Issue