Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
third-party
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cooperatic-foodcoops
third-party
Commits
056fe5d4
Commit
056fe5d4
authored
Sep 28, 2021
by
Damien Moulard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
shifts exchange & choose makeups
parent
683fab8a
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
146 additions
and
20 deletions
+146
-20
members-space-shifts-exchange.css
members_space/static/css/members-space-shifts-exchange.css
+63
-8
members-space-header.js
members_space/static/js/members-space-header.js
+4
-0
members-space-my-shifts.js
members_space/static/js/members-space-my-shifts.js
+1
-1
members-space-shifts-exchange.js
members_space/static/js/members-space-shifts-exchange.js
+0
-0
members-space.js
members_space/static/js/members-space.js
+4
-1
common.css
outils/static/css/common.css
+5
-0
models.py
shifts/models.py
+15
-0
views.py
shifts/views.py
+36
-9
index.html
templates/members_space/index.html
+10
-0
shifts_exchange.html
templates/members_space/shifts_exchange.html
+8
-1
No files found.
members_space/static/css/members-space-shifts-exchange.css
View file @
056fe5d4
#shifts_exchange_content
{
#shifts_exchange_content
{
width
:
95%
;
width
:
95%
;
margin
:
3rem
auto
;
margin
:
3rem
auto
;
display
:
flex
;
flex-direction
:
column
;
}
}
#shifts_list
{
#shifts_list
{
flex-direction
:
column
;
flex-direction
:
column
;
display
:
none
;
display
:
none
;
width
:
min-content
;
/* ??? */
width
:
min-content
;
max-width
:
100%
;
}
@media
screen
and
(
max-width
:
768px
)
{
#partner_shifts_list
{
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
}
}
}
.selectable_shift_line
{
.selectable_shift_line
{
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
margin-left
:
15px
;
margin-left
:
15px
;
margin
:
1
rem
0
;
margin
:
0.75
rem
0
;
border-radius
:
5px
;
border-radius
:
5px
;
}
}
...
@@ -21,14 +32,33 @@
...
@@ -21,14 +32,33 @@
margin-right
:
10px
;
margin-right
:
10px
;
}
}
/* .selectable_shift_line_text {
.selectable_shift_line.btn
{
border: 2px solid #424242;
cursor
:
not-allowed
;
border-radius: 5px;
}
padding: 0.75rem;
} */
#need_to_select_makeups_message
{
display
:
none
;
align-self
:
center
;
background-color
:
#d9534f
;
color
:
white
;
margin
:
0
1rem
1rem
1rem
;
padding
:
1rem
1.25rem
;
text-align
:
center
;
}
.makeups_warning
{
margin-right
:
3px
;
}
@media
screen
and
(
max-width
:
768px
)
{
.select_makeups_message_block
{
display
:
block
;
}
}
#calendar
{
#calendar
{
margin
:
3rem
auto
;
margin
:
3rem
1rem
;
display
:
none
;
}
}
.fc
.fc-event
{
.fc
.fc-event
{
...
@@ -36,6 +66,30 @@
...
@@ -36,6 +66,30 @@
margin
:
1px
10px
!important
;
margin
:
1px
10px
!important
;
}
}
.fc-event.shift_booked
{
background-color
:
#585858
;
cursor
:
auto
;
border-color
:
#585858
;
}
.fc-list-event.shift_booked
{
color
:
white
;
}
#calendar
.fc-list-table
{
#calendar
.fc-list-table
{
table-layout
:
auto
;
table-layout
:
auto
;
}
.resp-header-toolbar
{
display
:
flex
;
flex-direction
:
column
;
}
.resp-header-toolbar
.fc-toolbar-chunk
{
text-align
:
center
;
margin
:
0.25rem
;
}
.date_old_shift
,
.time_old_shift
,
.date_new_shift
,
.time_new_shift
{
font-weight
:
bold
;
}
}
\ No newline at end of file
members_space/static/js/members-space-header.js
View file @
056fe5d4
...
@@ -18,23 +18,27 @@ $(document).ready(function() {
...
@@ -18,23 +18,27 @@ $(document).ready(function() {
if
(
current_location
!==
"home"
)
{
if
(
current_location
!==
"home"
)
{
goto
(
'home'
);
goto
(
'home'
);
}
}
toggleHeader
();
});
});
$
(
'#nav_my_info'
).
on
(
'click'
,
(
e
)
=>
{
$
(
'#nav_my_info'
).
on
(
'click'
,
(
e
)
=>
{
e
.
preventDefault
();
e
.
preventDefault
();
if
(
current_location
!==
"my_info"
)
{
if
(
current_location
!==
"my_info"
)
{
goto
(
'mes-infos'
);
goto
(
'mes-infos'
);
}
}
toggleHeader
();
});
});
$
(
'#nav_my_shifts'
).
on
(
'click'
,
(
e
)
=>
{
$
(
'#nav_my_shifts'
).
on
(
'click'
,
(
e
)
=>
{
e
.
preventDefault
();
e
.
preventDefault
();
if
(
current_location
!==
"my_shifts"
)
{
if
(
current_location
!==
"my_shifts"
)
{
goto
(
'mes-services'
);
goto
(
'mes-services'
);
}
}
toggleHeader
();
});
});
$
(
'#nav_shifts_exchange'
).
on
(
'click'
,
(
e
)
=>
{
$
(
'#nav_shifts_exchange'
).
on
(
'click'
,
(
e
)
=>
{
e
.
preventDefault
();
e
.
preventDefault
();
if
(
current_location
!==
"shifts_exchange"
)
{
if
(
current_location
!==
"shifts_exchange"
)
{
goto
(
'echange-de-services'
);
goto
(
'echange-de-services'
);
}
}
toggleHeader
();
});
});
});
});
members_space/static/js/members-space-my-shifts.js
View file @
056fe5d4
...
@@ -55,7 +55,7 @@ function prepare_server_data(data) {
...
@@ -55,7 +55,7 @@ function prepare_server_data(data) {
f_date_shift_start
=
f_date_shift_start
.
charAt
(
0
).
toUpperCase
()
+
f_date_shift_start
.
slice
(
1
);
f_date_shift_start
=
f_date_shift_start
.
charAt
(
0
).
toUpperCase
()
+
f_date_shift_start
.
slice
(
1
);
history_item
.
movement_date
=
f_date_shift_start
+
" - "
+
datetime_shift_start
.
toLocaleTimeString
(
"fr-fr"
);
history_item
.
movement_date
=
f_date_shift_start
+
" - "
+
datetime_shift_start
.
toLocaleTimeString
(
"fr-fr"
,
time_options
);
// Text replacements
// Text replacements
history_item
.
name
=
(
history_item
.
name
===
"Clôturer le service"
)
?
"Décompte 28j"
:
history_item
.
name
;
//Clôlturer le service
history_item
.
name
=
(
history_item
.
name
===
"Clôturer le service"
)
?
"Décompte 28j"
:
history_item
.
name
;
//Clôlturer le service
...
...
members_space/static/js/members-space-shifts-exchange.js
View file @
056fe5d4
This diff is collapsed.
Click to expand it.
members_space/static/js/members-space.js
View file @
056fe5d4
...
@@ -8,6 +8,7 @@ var base_location = null,
...
@@ -8,6 +8,7 @@ var base_location = null,
partner_history
=
null
;
partner_history
=
null
;
var
date_options
=
{
weekday
:
"long"
,
year
:
"numeric"
,
month
:
"long"
,
day
:
"numeric"
};
var
date_options
=
{
weekday
:
"long"
,
year
:
"numeric"
,
month
:
"long"
,
day
:
"numeric"
};
var
time_options
=
{
hour
:
'2-digit'
,
minute
:
'2-digit'
};
/* - Data */
/* - Data */
...
@@ -124,7 +125,7 @@ function prepare_shift_line_template(date_begin) {
...
@@ -124,7 +125,7 @@ function prepare_shift_line_template(date_begin) {
f_date_shift_start
=
f_date_shift_start
.
charAt
(
0
).
toUpperCase
()
+
f_date_shift_start
.
slice
(
1
);
f_date_shift_start
=
f_date_shift_start
.
charAt
(
0
).
toUpperCase
()
+
f_date_shift_start
.
slice
(
1
);
shift_line_template
.
find
(
".shift_line_date"
).
text
(
f_date_shift_start
);
shift_line_template
.
find
(
".shift_line_date"
).
text
(
f_date_shift_start
);
shift_line_template
.
find
(
".shift_line_time"
).
text
(
datetime_shift_start
.
toLocaleTimeString
(
"fr-fr"
));
shift_line_template
.
find
(
".shift_line_time"
).
text
(
datetime_shift_start
.
toLocaleTimeString
(
"fr-fr"
,
time_options
));
return
shift_line_template
;
return
shift_line_template
;
}
}
...
@@ -190,6 +191,8 @@ function init_my_info_data() {
...
@@ -190,6 +191,8 @@ function init_my_info_data() {
}
}
$
(
document
).
ready
(
function
()
{
$
(
document
).
ready
(
function
()
{
// TODO essayer de ne charger les js que au besoin
$
.
ajaxSetup
({
headers
:
{
"X-CSRFToken"
:
getCookie
(
'csrftoken'
)
}
});
$
.
ajaxSetup
({
headers
:
{
"X-CSRFToken"
:
getCookie
(
'csrftoken'
)
}
});
// If partner is associated (attached), display the pair's main partner shift data
// If partner is associated (attached), display the pair's main partner shift data
...
...
outils/static/css/common.css
View file @
056fe5d4
...
@@ -60,6 +60,11 @@ footer { position: fixed;
...
@@ -60,6 +60,11 @@ footer { position: fixed;
margin
:
auto
;
margin
:
auto
;
padding
:
15px
;
padding
:
15px
;
}
}
@media
screen
and
(
max-width
:
768px
)
{
.overlay-content
.mconfirm
{
width
:
100%
;
}
}
.overlay-content
.mconfirm
button
{
margin
:
5px
;}
.overlay-content
.mconfirm
button
{
margin
:
5px
;}
.overlay-content
>
em
{
.overlay-content
>
em
{
color
:
#fff
;
color
:
#fff
;
...
...
shifts/models.py
View file @
056fe5d4
...
@@ -300,3 +300,17 @@ class CagetteShift(models.Model):
...
@@ -300,3 +300,17 @@ class CagetteShift(models.Model):
def
get_test
(
self
,
odooModel
,
cond
,
fieldsDatas
):
def
get_test
(
self
,
odooModel
,
cond
,
fieldsDatas
):
return
self
.
o_api
.
search_read
(
odooModel
,
cond
,
fieldsDatas
,
limit
=
1000
)
return
self
.
o_api
.
search_read
(
odooModel
,
cond
,
fieldsDatas
,
limit
=
1000
)
def
decrement_makeups_to_do
(
self
,
partner_id
):
""" Decrements partners makeups to do if > 0 """
cond
=
[[
'id'
,
'='
,
partner_id
]]
fields
=
[
'makeups_to_do'
]
makeups_to_do
=
self
.
o_api
.
search_read
(
'res.partner'
,
cond
,
fields
)[
0
][
"makeups_to_do"
]
if
makeups_to_do
>
0
:
makeups_to_do
-=
1
f
=
{
"makeups_to_do"
:
makeups_to_do
}
return
self
.
o_api
.
update
(
'res.partner'
,
partner_id
,
f
)
else
:
return
"makeups already at 0"
\ No newline at end of file
shifts/views.py
View file @
056fe5d4
...
@@ -119,9 +119,6 @@ def get_list_shift_calendar(request, partner_id):
...
@@ -119,9 +119,6 @@ def get_list_shift_calendar(request, partner_id):
smax
=
int
(
value
[
'seats_available'
])
+
int
(
value
[
'seats_reserved'
])
smax
=
int
(
value
[
'seats_available'
])
+
int
(
value
[
'seats_reserved'
])
title_prefix
=
''
title_prefix
=
''
# if use_new_members_space is True:
# title_prefix = value["name"] + " ~ "
# else:
if
len
(
value
[
'address_id'
])
==
2
and
','
in
value
[
'address_id'
][
1
]:
if
len
(
value
[
'address_id'
])
==
2
and
','
in
value
[
'address_id'
][
1
]:
title_prefix
=
str
(
value
[
'address_id'
][
1
])
.
split
(
","
)[
1
]
+
" -- "
title_prefix
=
str
(
value
[
'address_id'
][
1
])
.
split
(
","
)[
1
]
+
" -- "
...
@@ -131,19 +128,31 @@ def get_list_shift_calendar(request, partner_id):
...
@@ -131,19 +128,31 @@ def get_list_shift_calendar(request, partner_id):
event
[
"end"
]
=
dateIsoUTC
(
value
[
'date_begin_tz'
])
event
[
"end"
]
=
dateIsoUTC
(
value
[
'date_begin_tz'
])
if
len
(
l
)
>
0
:
if
len
(
l
)
>
0
:
event
[
"className"
]
=
"shift_booked"
if
use_new_members_space
is
True
:
event
[
"classNames"
]
=
[
"shift_booked"
]
else
:
event
[
"className"
]
=
"shift_booked"
event
[
"changed"
]
=
False
event
[
"changed"
]
=
False
# elif int(value['seats_reserved']) == int(value['seats_max']):
# elif int(value['seats_reserved']) == int(value['seats_max']):
# event["className"] = "shift_full"
# event["className"] = "shift_full"
# event["changed"] = False
# event["changed"] = False
elif
int
(
value
[
'seats_reserved'
])
==
0
:
elif
int
(
value
[
'seats_reserved'
])
==
0
:
event
[
"className"
]
=
"shift_empty"
if
use_new_members_space
is
True
:
event
[
"classNames"
]
=
[
"shift_empty"
]
else
:
event
[
"className"
]
=
"shift_empty"
event
[
"changed"
]
=
True
event
[
"changed"
]
=
True
elif
_is_middled_filled_considered
(
value
[
'seats_reserved'
],
smax
)
is
True
:
elif
_is_middled_filled_considered
(
value
[
'seats_reserved'
],
smax
)
is
True
:
event
[
"className"
]
=
"shift_less_alf"
if
use_new_members_space
is
True
:
event
[
"classNames"
]
=
[
"shift_less_alf"
]
else
:
event
[
"className"
]
=
"shift_less_alf"
event
[
"changed"
]
=
True
event
[
"changed"
]
=
True
else
:
else
:
event
[
"className"
]
=
"shift_other"
if
use_new_members_space
is
True
:
event
[
"classNames"
]
=
[
"shift_other"
]
else
:
event
[
"className"
]
=
"shift_other"
event
[
"changed"
]
=
True
event
[
"changed"
]
=
True
event
[
"registration_ids"
]
=
value
[
'registration_ids'
]
event
[
"registration_ids"
]
=
value
[
'registration_ids'
]
...
@@ -215,18 +224,36 @@ def add_shift(request):
...
@@ -215,18 +224,36 @@ def add_shift(request):
cs
=
CagetteShift
()
cs
=
CagetteShift
()
if
'idNewShift'
in
request
.
POST
and
'idPartner'
in
request
.
POST
:
if
'idNewShift'
in
request
.
POST
and
'idPartner'
in
request
.
POST
:
data
=
{
data
=
{
"idPartner"
:
int
(
request
.
POST
[
'idPartner'
]),
"idShift"
:
int
(
request
.
POST
[
'idNewShift'
]),
"in_ftop_team"
:
request
.
POST
[
'in_ftop_team'
]}
"idPartner"
:
int
(
request
.
POST
[
'idPartner'
]),
"idShift"
:
int
(
request
.
POST
[
'idNewShift'
]),
"in_ftop_team"
:
request
.
POST
[
'in_ftop_team'
]
}
#Insertion du nouveau shift
#Insertion du nouveau shift
st_r_id
=
False
st_r_id
=
False
try
:
try
:
st_r_id
=
cs
.
set_shift
(
data
)
st_r_id
=
cs
.
set_shift
(
data
)
except
Exception
as
e
:
except
Exception
as
e
:
coop_logger
.
error
(
"Add shift :
%
s,
%
s"
,
str
(
e
),
str
(
data
))
coop_logger
.
error
(
"Add shift :
%
s,
%
s"
,
str
(
e
),
str
(
data
))
if
st_r_id
:
if
st_r_id
:
response
=
{
'result'
:
True
}
response
=
{
'result'
:
True
}
else
:
else
:
response
=
{
'result'
:
False
}
response
=
{
'result'
:
False
}
# decrement makeups_to_do
res_decrement
=
False
try
:
res_decrement
=
cs
.
decrement_makeups_to_do
(
int
(
request
.
POST
[
'idPartner'
]))
except
Exception
as
e
:
coop_logger
.
error
(
"Decrement makeups to do :
%
s,
%
s"
,
str
(
e
),
str
(
data
))
if
res_decrement
:
response
[
"decrement_makeups"
]
=
res_decrement
else
:
response
[
"decrement_makeups"
]
=
False
else
:
else
:
response
=
{
'result'
:
False
}
response
=
{
'result'
:
False
}
return
JsonResponse
(
response
)
return
JsonResponse
(
response
)
...
...
templates/members_space/index.html
View file @
056fe5d4
...
@@ -42,6 +42,16 @@
...
@@ -42,6 +42,16 @@
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"modal_shift_exchange_template"
>
<div>
Je suis sur le point d'échanger le service du :
</div>
<div><span
class=
"date_old_shift"
></span>
à
<span
class=
"time_old_shift"
></span></div>
<div>
par celui du :
</div>
<div><span
class=
"date_new_shift"
></span>
à
<span
class=
"time_new_shift"
></span></div>
</div>
<div
id=
"modal_add_shift_template"
>
<div>
Je suis sur le point de m'inscrire au service du :
<span
class=
"date_new_shift"
></span>
à
<span
class=
"time_new_shift"
></span></div>
</div>
</div>
</div>
</div>
</div>
...
...
templates/members_space/shifts_exchange.html
View file @
056fe5d4
<div
id=
"shifts_exchange"
>
<div
id=
"shifts_exchange"
>
<div
id=
"shifts_exchange_content"
>
<div
id=
"shifts_exchange_content"
>
<div
id=
"need_to_select_makeups_message"
>
<span
class=
"select_makeups_message_block"
>
<i
class=
"fas fa-exclamation-triangle makeups_warning"
></i>
J'ai
<span
class=
"makeups_nb"
></span>
rattrapage(s) à faire.
</span>
<span
class=
"select_makeups_message_block"
>
Je dois les sélectionner dans le calendrier.
</span>
<span
class=
"select_makeups_message_block"
>
Je ne peux pas échanger de service tant que je n'ai pas choisi mes rattrapages.
</span>
</div>
<div
id=
"partner_shifts_list"
>
<div
id=
"partner_shifts_list"
>
Liste de mes services :
<h4>
Liste de mes services :
</h4>
<div
class=
"loading-incoming-shifts"
>
<div
class=
"loading-incoming-shifts"
>
<i
class=
"fas fa-spinner fa-spin fa-lg"
></i>
<i
class=
"fas fa-spinner fa-spin fa-lg"
></i>
</div>
</div>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment