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
425c3876
Commit
425c3876
authored
Nov 17, 2021
by
François
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
#1669 #1643 Fix entrance delay rules
parent
fdf11094
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
19 deletions
+24
-19
models.py
members/models.py
+19
-14
urls.py
members/urls.py
+1
-1
views.py
members/views.py
+4
-4
No files found.
members/models.py
View file @
425c3876
...
@@ -1117,24 +1117,26 @@ class CagetteServices(models.Model):
...
@@ -1117,24 +1117,26 @@ class CagetteServices(models.Model):
def
get_services_at_time
(
time
,
tz_offset
,
with_members
=
True
):
def
get_services_at_time
(
time
,
tz_offset
,
with_members
=
True
):
"""Retrieve present services with member linked."""
"""Retrieve present services with member linked."""
# import operator
default_acceptable_minutes_after_shift_begins
=
getattr
(
settings
,
'ACCEPTABLE_ENTRANCE_MINUTES_AFTER_SHIFT_BEGINS'
,
15
)
min
_before_shift_starts_delay
=
20
min
utes_before_shift_starts_delay
=
getattr
(
settings
,
'ACCEPTABLE_ENTRANCE_MINUTES_BEFORE_SHIFT'
,
15
)
min
_after_shift_starts_delay
=
20
min
utes_after_shift_starts_delay
=
default_acceptable_minutes_after_shift_begins
late_mode
=
getattr
(
settings
,
'ENTRANCE_WITH_LATE_MODE'
,
False
)
late_mode
=
getattr
(
settings
,
'ENTRANCE_WITH_LATE_MODE'
,
False
)
max_duration
=
getattr
(
settings
,
'MAX_DURATION'
,
180
)
if
late_mode
is
True
:
if
late_mode
is
True
:
min_before_shift_starts_delay
=
getattr
(
settings
,
'ENTRANCE_VALIDATION_GRACE_DELAY'
,
60
)
minutes_after_shift_starts_delay
=
getattr
(
settings
,
'ENTRANCE_VALIDATION_GRACE_DELAY'
,
60
)
min_after_shift_starts_delay
=
0
api
=
OdooAPI
()
api
=
OdooAPI
()
now
=
dateutil
.
parser
.
parse
(
time
)
-
datetime
.
timedelta
(
minutes
=
tz_offset
)
now
=
dateutil
.
parser
.
parse
(
time
)
-
datetime
.
timedelta
(
minutes
=
tz_offset
)
start1
=
now
-
datetime
.
timedelta
(
minutes
=
min_before_shift_starts_delay
)
start1
=
now
+
datetime
.
timedelta
(
minutes
=
minutes_before_shift_starts_delay
)
start2
=
now
+
datetime
.
timedelta
(
minutes
=
min_after_shift_starts_delay
)
start2
=
now
-
datetime
.
timedelta
(
minutes
=
minutes_after_shift_starts_delay
)
cond
=
[[
'date_begin_tz'
,
'>='
,
start1
.
isoformat
()],
end
=
start1
+
datetime
.
timedelta
(
minutes
=
max_duration
)
[
'date_begin_tz'
,
'<='
,
start2
.
isoformat
()]]
cond
=
[[
'date_end_tz'
,
'<='
,
end
.
isoformat
()]]
cond
.
append
(
'|'
)
cond
.
append
([
'date_begin_tz'
,
'>='
,
start1
.
isoformat
()])
cond
.
append
([
'date_begin_tz'
,
'>='
,
start2
.
isoformat
()])
fields
=
[
'name'
,
'week_number'
,
'registration_ids'
,
fields
=
[
'name'
,
'week_number'
,
'registration_ids'
,
'standard_registration_ids'
,
'standard_registration_ids'
,
'shift_template_id'
,
'shift_ticket_ids'
,
'shift_template_id'
,
'shift_ticket_ids'
,
'date_begin_tz'
,
'date_end_tz'
]
'date_begin_tz'
,
'date_end_tz'
]
## return (start1.isoformat(), start2.isoformat())
services
=
api
.
search_read
(
'shift.shift'
,
cond
,
fields
,
order
=
"date_begin_tz ASC"
)
services
=
api
.
search_read
(
'shift.shift'
,
cond
,
fields
,
order
=
"date_begin_tz ASC"
)
for
s
in
services
:
for
s
in
services
:
if
(
len
(
s
[
'registration_ids'
])
>
0
):
if
(
len
(
s
[
'registration_ids'
])
>
0
):
...
@@ -1143,7 +1145,7 @@ class CagetteServices(models.Model):
...
@@ -1143,7 +1145,7 @@ class CagetteServices(models.Model):
now
.
replace
(
tzinfo
=
None
)
now
.
replace
(
tzinfo
=
None
)
-
-
dateutil
.
parser
.
parse
(
s
[
'date_begin_tz'
])
.
replace
(
tzinfo
=
None
)
dateutil
.
parser
.
parse
(
s
[
'date_begin_tz'
])
.
replace
(
tzinfo
=
None
)
)
.
seconds
/
60
>
min_after_shift_starts_delay
)
.
total_seconds
()
/
60
>
default_acceptable_minutes_after_shift_begins
if
with_members
is
True
:
if
with_members
is
True
:
cond
=
[[
'id'
,
'in'
,
s
[
'registration_ids'
]],
[
'state'
,
'!='
,
'cancel'
]]
cond
=
[[
'id'
,
'in'
,
s
[
'registration_ids'
]],
[
'state'
,
'!='
,
'cancel'
]]
fields
=
[
'partner_id'
,
'shift_type'
,
'state'
]
fields
=
[
'partner_id'
,
'shift_type'
,
'state'
]
...
@@ -1211,14 +1213,17 @@ class CagetteServices(models.Model):
...
@@ -1211,14 +1213,17 @@ class CagetteServices(models.Model):
return
api
.
update
(
'shift.registration'
,
[
int
(
reg_id
)],
f
)
return
api
.
update
(
'shift.registration'
,
[
int
(
reg_id
)],
f
)
@staticmethod
@staticmethod
def
record_absences
():
def
record_absences
(
date
):
"""Called by cron script."""
"""Called by cron script."""
import
dateutil.parser
import
dateutil.parser
now
=
datetime
.
datetime
.
now
()
if
len
(
date
)
>
0
:
now
=
dateutil
.
parser
.
parse
(
date
)
else
:
now
=
datetime
.
datetime
.
now
()
# now = dateutil.parser.parse('2020-09-15T15:00:00Z')
# now = dateutil.parser.parse('2020-09-15T15:00:00Z')
date_24h_before
=
now
-
datetime
.
timedelta
(
hours
=
24
)
date_24h_before
=
now
-
datetime
.
timedelta
(
hours
=
24
)
# let authorized people time to set presence for those who came in late
# let authorized people time to set presence for those who came in late
end_date
=
now
-
datetime
.
timedelta
(
hours
=
3
)
end_date
=
now
-
datetime
.
timedelta
(
hours
=
2
)
api
=
OdooAPI
()
api
=
OdooAPI
()
absence_status
=
'excused'
absence_status
=
'excused'
res_c
=
api
.
search_read
(
'ir.config_parameter'
,
res_c
=
api
.
search_read
(
'ir.config_parameter'
,
...
...
members/urls.py
View file @
425c3876
...
@@ -40,7 +40,7 @@ urlpatterns = [
...
@@ -40,7 +40,7 @@ urlpatterns = [
url
(
r'^save_photo/([0-9]+)$'
,
views
.
save_photo
,
name
=
'save_photo'
),
url
(
r'^save_photo/([0-9]+)$'
,
views
.
save_photo
,
name
=
'save_photo'
),
url
(
r'^services_at_time/([0-9TZ\-\: \.]+)/([0-9\-]+)$'
,
views
.
services_at_time
),
url
(
r'^services_at_time/([0-9TZ\-\: \.]+)/([0-9\-]+)$'
,
views
.
services_at_time
),
url
(
r'^service_presence/$'
,
views
.
record_service_presence
),
url
(
r'^service_presence/$'
,
views
.
record_service_presence
),
url
(
r'^record_absences$'
,
views
.
record_absences
),
url
(
r'^record_absences
/?([0-9\-\ \:]*)
$'
,
views
.
record_absences
),
url
(
r'^close_ftop_service$'
,
views
.
close_ftop_service
),
url
(
r'^close_ftop_service$'
,
views
.
close_ftop_service
),
url
(
r'^get_credentials$'
,
views
.
get_credentials
),
url
(
r'^get_credentials$'
,
views
.
get_credentials
),
url
(
r'^remove_data_from_couchdb$'
,
views
.
remove_data_from_CouchDB
),
url
(
r'^remove_data_from_couchdb$'
,
views
.
remove_data_from_CouchDB
),
...
...
members/views.py
View file @
425c3876
...
@@ -281,7 +281,8 @@ def record_service_presence(request):
...
@@ -281,7 +281,8 @@ def record_service_presence(request):
import
re
import
re
o_date
=
re
.
search
(
r'/([^\/]+?)$'
,
request
.
META
.
get
(
'HTTP_REFERER'
))
o_date
=
re
.
search
(
r'/([^\/]+?)$'
,
request
.
META
.
get
(
'HTTP_REFERER'
))
if
o_date
:
if
o_date
:
overrided_date
=
o_date
.
group
(
1
)
overrided_date
=
re
.
sub
(
r'(
%20
)'
,
' '
,
o_date
.
group
(
1
))
# rid = 0 => C'est un rattrapage, sur le service
# rid = 0 => C'est un rattrapage, sur le service
if
sid
>
0
and
stid
>
0
:
if
sid
>
0
and
stid
>
0
:
# Add member to service and take presence into account
# Add member to service and take presence into account
...
@@ -289,7 +290,6 @@ def record_service_presence(request):
...
@@ -289,7 +290,6 @@ def record_service_presence(request):
if
res
[
'rattrapage'
]
is
True
:
if
res
[
'rattrapage'
]
is
True
:
res
[
'update'
]
=
'ok'
res
[
'update'
]
=
'ok'
else
:
else
:
if
(
CagetteServices
.
registration_done
(
rid
,
overrided_date
)
is
True
):
if
(
CagetteServices
.
registration_done
(
rid
,
overrided_date
)
is
True
):
res
[
'update'
]
=
'ok'
res
[
'update'
]
=
'ok'
else
:
else
:
...
@@ -325,8 +325,8 @@ def easy_validate_shift_presence(request):
...
@@ -325,8 +325,8 @@ def easy_validate_shift_presence(request):
else
:
else
:
return
JsonResponse
(
res
,
safe
=
False
)
return
JsonResponse
(
res
,
safe
=
False
)
def
record_absences
(
request
):
def
record_absences
(
request
,
date
):
return
JsonResponse
({
'res'
:
CagetteServices
.
record_absences
()})
return
JsonResponse
({
'res'
:
CagetteServices
.
record_absences
(
date
)})
def
close_ftop_service
(
request
):
def
close_ftop_service
(
request
):
"""Close the closest past FTOP service"""
"""Close the closest past FTOP service"""
...
...
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