diff --git a/Back/database/Pipe/DB_Mother/095_Up_Conf_protcole.txt b/Back/database/Pipe/DB_Mother/095_Up_Conf_protcole.txt new file mode 100644 index 000000000..62c86aa56 --- /dev/null +++ b/Back/database/Pipe/DB_Mother/095_Up_Conf_protcole.txt @@ -0,0 +1,44 @@ + + + UPDATE f SET InputType = 'GridFormEditor',Options = '{"protocoleType":'+Options+',"nbFixedCol":0,"delFirst":0,"showLines":0}' + FROM [ModuleForms] f + where Options in (214,222) and InputType like '%listof%' and module_id = 1 + + Update f SET FieldSizeDisplay= 3, FieldSizeEdit = 3 + FROM ModuleForms f + WHERE TypeObj = 222 and module_id = 1 + AND Name = 'sampled' + + Update f SET FieldSizeDisplay= 5, FieldSizeEdit = 5 + FROM ModuleForms f + WHERE TypeObj = 222 and module_id = 1 + AND Name = 'Measured_by' + + + Update f SET FieldSizeDisplay= 4, FieldSizeEdit = 4 + FROM ModuleForms f + WHERE TypeObj = 222 and module_id = 1 + AND Name = 'Egg_code' + + + + Update f SET FieldSizeDisplay= 4, FieldSizeEdit = 4 + FROM ModuleForms f + WHERE TypeObj = 214 and module_id = 1 + AND Name = 'frequency' + + Update f SET FieldSizeDisplay= 5, FieldSizeEdit = 5 + FROM ModuleForms f + WHERE TypeObj = 214 and module_id = 1 + AND Name in ('sex','age','signal') + + +Update f SET Options = 2010086 +FROM ModuleForms f +WHERE module_id = 1 and TypeObj = 231 and Name = 'sex' + + +INSERT INTO [dbo].[TVersion] (TVer_FileName,TVer_Date,TVer_DbName) VALUES ('95_Up_Conf_protcole',GETDATE(),(SELECT db_name())) + + +GO diff --git a/Back/database/Pipe/DB_Mother/096_ecoReleve_Sensor_Up_type_argos.txt b/Back/database/Pipe/DB_Mother/096_ecoReleve_Sensor_Up_type_argos.txt new file mode 100644 index 000000000..6e49a1328 --- /dev/null +++ b/Back/database/Pipe/DB_Mother/096_ecoReleve_Sensor_Up_type_argos.txt @@ -0,0 +1,15 @@ + + ALTER TABLE [ecoReleve_Sensor].[dbo].[T_argosgps] + ALTER COLUMN [type] varchar (20) not NULL + GO + + UPDATE [ecoReleve_Sensor].[dbo].[T_argosgps] SET type = 'argos' + WHERE type ='arg' +GO + + + +INSERT INTO [dbo].[TVersion] (TVer_FileName,TVer_Date,TVer_DbName) VALUES ('96_ecoReleve_Sensor_Up_type_argos',GETDATE(),(SELECT db_name())) + + +GO diff --git a/Back/database/Pipe/DB_Mother/097_Up_SP_validate_ALL_RFID.txt b/Back/database/Pipe/DB_Mother/097_Up_SP_validate_ALL_RFID.txt new file mode 100644 index 000000000..34f80c599 --- /dev/null +++ b/Back/database/Pipe/DB_Mother/097_Up_SP_validate_ALL_RFID.txt @@ -0,0 +1,112 @@ + + +ALTER PROCEDURE [dbo].[sp_validate_ALL_rfid] + @freq int, + @user int, + @nb_insert int OUTPUT, + @error int OUTPUT, + @exist int OUTPUT +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + + DECLARE @data_to_insert table ( PK_id int + , FK_ind int + , FK_Sensor int + , chip_code varchar(10) + , date_ datetime + , lat decimal(9,5) + , lon decimal(9,5) + ,ele int + ,freq int ); + Declare @data_duplicate table ( + PK_id int + + ); + + -- Gather not validated data. + WITH data AS ( + SELECT ID + , FK_Sensor + , chip_code + , date_ + ,validated + ,checked + , FK_MonitoredSite + , ROW_NUMBER() OVER (PARTITION BY FK_Sensor, chip_code, CONVERT(DATE, date_), DATEPART(hour, date_), DATEPART(minute, date_)/@freq ORDER BY date_) as r + FROM VRfidData_With_equipSite where checked = 0 + ) + INSERT INTO @data_to_insert + ( PK_id + , FK_Sensor + , chip_code + , date_ + , lat + , lon + ,freq + ,ele) + SELECT data.ID + , data.FK_Sensor + , data.chip_code + , data.date_ + , lat + , lon + ,@freq + ,ele + FROM data + JOIN MonitoredSitePosition p + ON p.FK_MonitoredSite = data.FK_MonitoredSite AND p.StartDate <= data.date_ + WHERE not exists (SELECT * FROM MonitoredSitePosition p1 + WHERE p.FK_MonitoredSite = p1.FK_MonitoredSite AND p1.StartDate > p.StartDate AND p1.StartDate <= data.date_ ) + and data.FK_MonitoredSite is not null AND data.r = 1 AND data.validated = 0 and data.checked=0; + + UPDATE d SET FK_ind = iv.FK_Individual + FROM @data_to_insert d + JOIN IndividualDynPropValue iv + ON d.chip_code = iv.ValueString AND iv.FK_IndividualDynProp = 7 AND iv.StartDate <= d.date_ + WHERE NOT EXISTS ( + SELECT * FROM IndividualDynPropValue iv2 + WHERE iv.FK_Individual = iv2.FK_IndividualDynProp AND iv.FK_IndividualDynProp = iv2.FK_IndividualDynProp + AND iv2.StartDate > iv.StartDate AND iv2.StartDate <= d.date_) + + insert into @data_duplicate + SELECT d.PK_id + FROM @data_to_insert d JOIN Individual_Location loc + ON d.FK_ind = loc.FK_Individual and d.date_ = loc.Date and d.FK_Sensor = loc.FK_Sensor + + -- Insert only the first chip lecture per RFID, per individual, per hour. + INSERT INTO Individual_Location (creator, FK_Sensor, FK_Individual, type_, Date, lat, lon, creationDate,FK_Region,ELE,OriginalData_ID) + SELECT @user, FK_Sensor, FK_ind, 'rfid', date_, lat, lon, CURRENT_TIMESTAMP,NULL,ele,'T_rfid_'+CONVERT(Varchar,d.PK_id) + FROM @data_to_insert d WHERE d.PK_id NOT IN (SELECT * FROM @data_duplicate) + + + + -- Update inserted data. + UPDATE VRfidData_With_equipSite SET validated = 1 , frequency= @freq + WHERE VRfidData_With_equipSite.ID IN (SELECT PK_id FROM @data_to_insert); + UPDATE VRfidData_With_equipSite SET checked = 1 Where checked = 0 + + + + SELECT @nb_insert = COUNT(*) FROM @data_to_insert where PK_id not in (select * from @data_duplicate) + Select @exist = Count (*) from @data_duplicate + SELECT @error = @@ERROR + + RETURN +END + + + + +GO + + + + + +INSERT INTO [dbo].[TVersion] (TVer_FileName,TVer_Date,TVer_DbName) VALUES ('97_Up_SP_validate_ALL_RFID',GETDATE(),(SELECT db_name())) + + +GO diff --git a/Back/database/Pipe/DB_Mother/098_Up_SP_validate_RFID.txt b/Back/database/Pipe/DB_Mother/098_Up_SP_validate_RFID.txt new file mode 100644 index 000000000..832c1ea15 --- /dev/null +++ b/Back/database/Pipe/DB_Mother/098_Up_SP_validate_RFID.txt @@ -0,0 +1,113 @@ + + + +ALTER PROCEDURE [dbo].[sp_validate_rfid] + @IdEquip int, + @freq int, + @user int, + @nb_insert int OUTPUT, + @error int OUTPUT, + @exist int OUTPUT +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + + DECLARE @data_to_insert table ( PK_id int + , FK_ind int + , FK_Sensor int + , chip_code varchar(10) + , date_ datetime + , lat decimal(9,5) + , lon decimal(9,5) + ,ele int + ,freq int ); + Declare @data_duplicate table ( + PK_id int + + ); + + -- Gather not validated data. + WITH data AS ( + SELECT ID + , FK_Sensor + , chip_code + , date_ + ,validated + ,checked + , FK_MonitoredSite + , ROW_NUMBER() OVER (PARTITION BY FK_Sensor, chip_code, CONVERT(DATE, date_), DATEPART(hour, date_), DATEPART(minute, date_)/@freq ORDER BY date_) as r + FROM VRfidData_With_equipSite where equipID = @IdEquip + ) + INSERT INTO @data_to_insert + ( PK_id + , FK_Sensor + , chip_code + , date_ + , lat + , lon + ,freq + ,ele) + SELECT data.ID + , data.FK_Sensor + , data.chip_code + , data.date_ + , lat + , lon + ,@freq + ,ele + FROM data + JOIN MonitoredSitePosition p + ON p.FK_MonitoredSite = data.FK_MonitoredSite AND p.StartDate <= data.date_ + WHERE not exists (SELECT * FROM MonitoredSitePosition p1 + WHERE p.FK_MonitoredSite = p1.FK_MonitoredSite AND p1.StartDate > p.StartDate AND p1.StartDate <= data.date_ ) + and data.FK_MonitoredSite is not null AND data.r = 1 AND data.validated = 0 and data.checked=0; + + UPDATE d SET FK_ind = iv.FK_Individual + FROM @data_to_insert d + JOIN IndividualDynPropValue iv + ON d.chip_code = iv.ValueString AND iv.FK_IndividualDynProp = 7 AND iv.StartDate <= d.date_ + WHERE NOT EXISTS ( + SELECT * FROM IndividualDynPropValue iv2 + WHERE iv.FK_Individual = iv2.FK_IndividualDynProp AND iv.FK_IndividualDynProp = iv2.FK_IndividualDynProp + AND iv2.StartDate > iv.StartDate AND iv2.StartDate <= d.date_) + + insert into @data_duplicate + SELECT d.PK_id + FROM @data_to_insert d JOIN Individual_Location loc + ON d.FK_ind = loc.FK_Individual and d.date_ = loc.Date and d.FK_Sensor = loc.FK_Sensor + + -- Insert only the first chip lecture per RFID, per individual, per hour. + INSERT INTO Individual_Location (creator, FK_Sensor, FK_Individual, type_, Date, lat, lon, creationDate,FK_Region,ELE,OriginalData_ID) + SELECT @user, FK_Sensor, FK_ind, 'rfid', date_, lat, lon, CURRENT_TIMESTAMP,dbo.fn_GetRegionFromLatLon(lat,lon),ele,'T_rfid_'+CONVERT(Varchar,d.PK_id) + FROM @data_to_insert d WHERE d.PK_id NOT IN (SELECT * FROM @data_duplicate) + + + + -- Update inserted data. + UPDATE VRfidData_With_equipSite SET validated = 1 , frequency= @freq + WHERE VRfidData_With_equipSite.ID IN (SELECT PK_id FROM @data_to_insert); + UPDATE VRfidData_With_equipSite SET checked = 1 Where equipID = @IdEquip + + + + SELECT @nb_insert = COUNT(*) FROM @data_to_insert where PK_id not in (select * from @data_duplicate) + Select @exist = Count (*) from @data_duplicate + SELECT @error = @@ERROR + + RETURN +END + + + +GO + + + + + +INSERT INTO [dbo].[TVersion] (TVer_FileName,TVer_Date,TVer_DbName) VALUES ('98_Up_SP_validate_RFID',GETDATE(),(SELECT db_name())) + + +GO diff --git a/Back/database/Pipe/DB_Mother/099_Up_Individual_Location_OriginalDataID_withRFID.txt b/Back/database/Pipe/DB_Mother/099_Up_Individual_Location_OriginalDataID_withRFID.txt new file mode 100644 index 000000000..a56b8c64a --- /dev/null +++ b/Back/database/Pipe/DB_Mother/099_Up_Individual_Location_OriginalDataID_withRFID.txt @@ -0,0 +1,11 @@ +UPDATE l SET OriginalData_ID = 'T_rfid_'+CONVERT(VARCHAR,r.ID) +FROM Individual_Location l +JOIN ecoReleve_Sensor.dbo.T_rfid r ON l.FK_Sensor = r.FK_Sensor AND l.Date = r.date_ +WHERE l.OriginalData_ID is null and type_ = 'rfid' +GO + + +INSERT INTO [dbo].[TVersion] (TVer_FileName,TVer_Date,TVer_DbName) VALUES ('99_Up_Individual_Location_OriginalDataID_withRFID',GETDATE(),(SELECT db_name())) + + +GO diff --git a/Back/ecoreleve_server/Views/__init__.py b/Back/ecoreleve_server/Views/__init__.py index ce1ece368..10505aab0 100644 --- a/Back/ecoreleve_server/Views/__init__.py +++ b/Back/ecoreleve_server/Views/__init__.py @@ -4,49 +4,57 @@ from pyramid.security import NO_PERMISSION_REQUIRED from ..Models import sendLog + def add_cors_headers_response_callback(event): def cors_headers(request, response): response.headers.update({ - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'POST,GET,DELETE,PUT,OPTIONS', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, Accept, Authorization', - 'Access-Control-Allow-Credentials': 'true', - 'Access-Control-Max-Age': '1728000', + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'POST,GET,DELETE,PUT,OPTIONS', + 'Access-Control-Allow-Headers': 'Origin, Content-Type, Accept, Authorization', + 'Access-Control-Allow-Credentials': 'true', + 'Access-Control-Max-Age': '1728000', }) event.request.add_response_callback(cors_headers) -@view_config(context=Exception, permission = NO_PERMISSION_REQUIRED) + +@view_config(context=Exception, permission=NO_PERMISSION_REQUIRED) def error_view(exc, request): - sendLog(logLevel=5,domaine=3) + sendLog(logLevel=5, domaine=3) return exc def notfound(request): return HTTPNotFound('Not found') -### test if the match url is integer +# test if the match url is integer + + def integers(*segment_names): def predicate(info, request): match = info['match'] for segment_name in segment_names: try: match[segment_name] = int(match[segment_name]) - if int(match[segment_name]) == 0 : + if int(match[segment_name]) == 0: return False except (TypeError, ValueError): return False return True return predicate + def add_routes(config): config.add_route('weekData', 'ecoReleve-Core/weekData') - config.add_route('location_graph', 'ecoReleve-Core/individuals/location/graph') + config.add_route('location_graph', + 'ecoReleve-Core/individuals/location/graph') config.add_route('station_graph', 'ecoReleve-Core/stations/graph') - config.add_route('individual_graph', 'ecoReleve-Core/stats/individuals/graph') - config.add_route('individual_monitored', 'ecoReleve-Core/stats/individuals/monitored/graph') - config.add_route('uncheckedDatas_graph', 'ecoReleve-Core/sensor/uncheckedDatas/graph') - + config.add_route('individual_graph', + 'ecoReleve-Core/stats/individuals/graph') + config.add_route('individual_monitored', + 'ecoReleve-Core/stats/individuals/monitored/graph') + config.add_route('uncheckedDatas_graph', + 'ecoReleve-Core/sensor/uncheckedDatas/graph') # ------------------------------------------------------------------------------------------------------------------------- # config.add_route('jsLog', 'ecoReleve-Core/log/error') @@ -54,17 +62,20 @@ def add_routes(config): ##### Security routes ##### config.add_route('security/login', 'ecoReleve-Core/security/login') config.add_route('security/logout', 'ecoReleve-Core/security/logout') - config.add_route('security/has_access', 'ecoReleve-Core/security/has_access') + config.add_route('security/has_access', + 'ecoReleve-Core/security/has_access') # ------------------------------------------------------------------------------------------------------------------------- # ##### User ##### config.add_route('users/id', 'ecoReleve-Core/users/{id}') config.add_route('core/user', 'ecoReleve-Core/user') config.add_route('core/currentUser', 'ecoReleve-Core/currentUser') - config.add_route('autocomplete/onLoad', 'ecoReleve-Core/autocomplete/{obj}/{prop}/onLoad') - config.add_route('autocomplete', 'ecoReleve-Core/autocomplete/{obj}/{prop}') - config.add_route('autocomplete/ID', 'ecoReleve-Core/autocomplete/{obj}/{prop}/{valReturn}') - + config.add_route('autocomplete/onLoad', + 'ecoReleve-Core/autocomplete/{obj}/{prop}/onLoad') + config.add_route( + 'autocomplete', 'ecoReleve-Core/autocomplete/{obj}/{prop}') + config.add_route('autocomplete/ID', + 'ecoReleve-Core/autocomplete/{obj}/{prop}/{valReturn}') # ------------------------------------------------------------------------------------------------------------------------- # ##### Stations ##### @@ -72,96 +83,130 @@ def add_routes(config): config.add_route('locality', 'ecoReleve-Core/locality') config.add_route('stations', 'ecoReleve-Core/stations/') config.add_route('stations/export', 'ecoReleve-Core/stations/export') - #config.add_route('stations/fileImport', 'ecoReleve-Core/stations/fileImport/{id}') - config.add_route('stations/id', 'ecoReleve-Core/stations/{id}',custom_predicates = (integers('id'),)) + #config.add_route('stations/fileImport', 'ecoReleve-Core/stations/fileImport/{id}') + config.add_route( + 'stations/id', 'ecoReleve-Core/stations/{id}', custom_predicates=(integers('id'),)) config.add_route('stations/action', 'ecoReleve-Core/stations/{action}') - # ------------------------------------------------------------------------------------------------------------------------- # ##### Stations/Protocols ##### - config.add_route('stations/id/protocols', 'ecoReleve-Core/stations/{id}/protocols',custom_predicates = (integers('id'),)) - config.add_route('stations/id/protocols/', 'ecoReleve-Core/stations/{id}/protocols/',custom_predicates = (integers('id'),)) - config.add_route('stations/id/protocols/obs_id', 'ecoReleve-Core/stations/{id}/protocols/{obs_id}',custom_predicates = (integers('id', 'obs_id'),)) - config.add_route('stations/id/protocols/action', 'ecoReleve-Core/stations/{id}/protocols/{action}') + config.add_route('stations/id/protocols', + 'ecoReleve-Core/stations/{id}/protocols', custom_predicates=(integers('id'),)) + config.add_route('stations/id/protocols/', + 'ecoReleve-Core/stations/{id}/protocols/', custom_predicates=(integers('id'),)) + config.add_route('stations/id/protocols/obs_id', + 'ecoReleve-Core/stations/{id}/protocols/{obs_id}', custom_predicates=(integers('id', 'obs_id'),)) + config.add_route('stations/id/protocols/action', + 'ecoReleve-Core/stations/{id}/protocols/{action}') # ------------------------------------------------------------------------------------------------------------------------- # ##### Protocols ##### # config.add_route('protocols', 'ecoReleve-Core/protocols') config.add_route('protocols', 'ecoReleve-Core/protocols/') - config.add_route('protocols/id', 'ecoReleve-Core/protocols/{id}',custom_predicates = (integers('id'),)) - config.add_route('protocols/action', 'ecoReleve-Core/protocols/{action}') + config.add_route( + 'protocols/id', 'ecoReleve-Core/protocols/{id}', custom_predicates=(integers('id'),)) + config.add_route('protocols/action', 'ecoReleve-Core/protocols/{action}') # ------------------------------------------------------------------------------------------------------------------------- # ##### Protocols types ##### config.add_route('protocolTypes', 'ecoReleve-Core/protocolTypes') # ------------------------------------------------------------------------------------------------------------------------- # - ##### FieldActivity ##### + ##### FieldActivity ##### config.add_route('fieldActivity', 'ecoReleve-Core/fieldActivity') - + # -----------------------------##### Sensors datas (Argos + GSM + RFID) #####----------------------------------------------------- # - + config.add_route('sensors/datas', 'ecoReleve-Core/sensors/{type}/datas') - config.add_route('sensors/uncheckedDatas', 'ecoReleve-Core/sensors/{type}/uncheckedDatas') - config.add_route('sensors/uncheckedDatas/id_indiv/ptt', 'ecoReleve-Core/sensors/{type}/uncheckedDatas/{id_indiv}/{id_ptt}') + config.add_route('sensors/uncheckedDatas', + 'ecoReleve-Core/sensors/{type}/uncheckedDatas') + config.add_route('sensors/uncheckedDatas/id_indiv/ptt', + 'ecoReleve-Core/sensors/{type}/uncheckedDatas/{id_indiv}/{id_ptt}') # ------------------------------------------------------------------------------------------------------------------------- # ##### Sensors caracteristics(Argos + GSM + RFID) ##### - - config.add_route('sensors', 'ecoReleve-Core/sensors/') - config.add_route('sensors/insert', 'ecoReleve-Core/sensors') + + config.add_route('sensors', 'ecoReleve-Core/sensors/') + config.add_route('sensors/insert', 'ecoReleve-Core/sensors') config.add_route('sensors/export', 'ecoReleve-Core/sensors/export') - config.add_route('sensors/id', 'ecoReleve-Core/sensors/{id}',custom_predicates = (integers('id'),)) - config.add_route('sensors/id/history', 'ecoReleve-Core/sensors/{id}/history',custom_predicates = (integers('id'),)) + config.add_route( + 'sensors/id', 'ecoReleve-Core/sensors/{id}', custom_predicates=(integers('id'),)) + config.add_route('sensors/id/history', + 'ecoReleve-Core/sensors/{id}/history', custom_predicates=(integers('id'),)) + config.add_route('sensors/id/equipment', + 'ecoReleve-Core/sensors/{id}/equipment', custom_predicates=(integers('id'),)) config.add_route('sensors/action', 'ecoReleve-Core/sensors/{action}') - # ------------------------------------------------------------------------------------------------------------------------- # ##### Individuals ##### - config.add_route('individuals', 'ecoReleve-Core/individuals/') - config.add_route('individuals/advanced', 'ecoReleve-Core/individuals/advanced/') + config.add_route('individuals', 'ecoReleve-Core/individuals/') + config.add_route('individuals/advanced', + 'ecoReleve-Core/individuals/advanced/') config.add_route('individuals/insert', 'ecoReleve-Core/individuals') config.add_route('individuals/export', 'ecoReleve-Core/individuals/export') - config.add_route('individuals/id', 'ecoReleve-Core/individuals/{id}',custom_predicates = (integers('id'),)) - config.add_route('individuals/id/history', 'ecoReleve-Core/individuals/{id}/history',custom_predicates = (integers('id'),)) - config.add_route('individuals/id/equipment', 'ecoReleve-Core/individuals/{id}/equipment',custom_predicates = (integers('id'),)) - config.add_route('individuals/id/location', 'ecoReleve-Core/individuals/{id}/locations',custom_predicates = (integers('id'),)) - config.add_route('individuals/id/location/id_loc', 'ecoReleve-Core/individuals/{id}/locations/{id_loc}',custom_predicates = (integers('id','id_loc'),)) - config.add_route('individuals/id/history/action', 'ecoReleve-Core/individuals/{id}/history/{action}',custom_predicates = (integers('id'),)) - config.add_route('individuals/id/location/action', 'ecoReleve-Core/individuals/{id}/locations/{action}',custom_predicates = (integers('id'),)) - config.add_route('individuals/id/equipment/action', 'ecoReleve-Core/individuals/{id}/equipment/{action}',custom_predicates = (integers('id'),)) - config.add_route('individuals/advanced/action', 'ecoReleve-Core/individuals/advanced/{action}') - config.add_route('individuals/action', 'ecoReleve-Core/individuals/{action}') + config.add_route( + 'individuals/id', 'ecoReleve-Core/individuals/{id}', custom_predicates=(integers('id'),)) + config.add_route('individuals/id/history', + 'ecoReleve-Core/individuals/{id}/history', custom_predicates=(integers('id'),)) + config.add_route('individuals/id/equipment', + 'ecoReleve-Core/individuals/{id}/equipment', custom_predicates=(integers('id'),)) + config.add_route('individuals/id/location', + 'ecoReleve-Core/individuals/{id}/locations', custom_predicates=(integers('id'),)) + config.add_route('individuals/id/location/id_loc', + 'ecoReleve-Core/individuals/{id}/locations/{id_loc}', custom_predicates=(integers('id', 'id_loc'),)) + config.add_route('individuals/id/history/action', + 'ecoReleve-Core/individuals/{id}/history/{action}', custom_predicates=(integers('id'),)) + config.add_route('individuals/id/location/action', + 'ecoReleve-Core/individuals/{id}/locations/{action}', custom_predicates=(integers('id'),)) + config.add_route('individuals/id/equipment/action', + 'ecoReleve-Core/individuals/{id}/equipment/{action}', custom_predicates=(integers('id'),)) + config.add_route('individuals/advanced/action', + 'ecoReleve-Core/individuals/advanced/{action}') + config.add_route('individuals/action', + 'ecoReleve-Core/individuals/{action}') # ------------------------------------------------------------------------------------------------------------------------- # ##### MonitoredSite ##### - config.add_route('monitoredSites', 'ecoReleve-Core/monitoredSites/') - config.add_route('monitoredSites/', 'ecoReleve-Core/monitoredSites') - config.add_route('monitoredSites/export', 'ecoReleve-Core/monitoredSites/export') - config.add_route('monitoredSites/id', 'ecoReleve-Core/monitoredSites/{id}',custom_predicates = (integers('id'),)) - config.add_route('monitoredSites/id/history', 'ecoReleve-Core/monitoredSites/{id}/history/',custom_predicates = (integers('id'),)) - config.add_route('monitoredSites/id/station', 'ecoReleve-Core/monitoredSites/{id}/stations',custom_predicates = (integers('id'),)) - config.add_route('monitoredSites/id/equipment', 'ecoReleve-Core/monitoredSites/{id}/equipment',custom_predicates = (integers('id'),)) - config.add_route('monitoredSites/id/history/action', 'ecoReleve-Core/monitoredSites/{id}/history/{action}',custom_predicates = (integers('id'),)) - config.add_route('monitoredSites/id/station/action', 'ecoReleve-Core/monitoredSites/{id}/stations/{action}',custom_predicates = (integers('id'),)) - config.add_route('monitoredSites/id/equipment/action', 'ecoReleve-Core/monitoredSites/{id}/equipment/{action}',custom_predicates = (integers('id'),)) - config.add_route('monitoredSites/action', 'ecoReleve-Core/monitoredSites/{action}') + config.add_route('monitoredSites', 'ecoReleve-Core/monitoredSites/') + config.add_route('monitoredSites/', 'ecoReleve-Core/monitoredSites') + config.add_route('monitoredSites/export', + 'ecoReleve-Core/monitoredSites/export') + config.add_route('monitoredSites/id', + 'ecoReleve-Core/monitoredSites/{id}', custom_predicates=(integers('id'),)) + config.add_route('monitoredSites/id/history', + 'ecoReleve-Core/monitoredSites/{id}/history/', custom_predicates=(integers('id'),)) + config.add_route('monitoredSites/id/station', + 'ecoReleve-Core/monitoredSites/{id}/stations', custom_predicates=(integers('id'),)) + config.add_route('monitoredSites/id/equipment', + 'ecoReleve-Core/monitoredSites/{id}/equipment', custom_predicates=(integers('id'),)) + config.add_route('monitoredSites/id/history/action', + 'ecoReleve-Core/monitoredSites/{id}/history/{action}', custom_predicates=(integers('id'),)) + config.add_route('monitoredSites/id/station/action', + 'ecoReleve-Core/monitoredSites/{id}/stations/{action}', custom_predicates=(integers('id'),)) + config.add_route('monitoredSites/id/equipment/action', + 'ecoReleve-Core/monitoredSites/{id}/equipment/{action}', custom_predicates=(integers('id'),)) + config.add_route('monitoredSites/action', + 'ecoReleve-Core/monitoredSites/{action}') # ------------------------------------------------------------------------------------------------------------------------- # ##### Release ##### config.add_route('release', 'ecoReleve-Core/release/') - config.add_route('release/individuals', 'ecoReleve-Core/release/individuals/') - config.add_route('release/individuals/action', 'ecoReleve-Core/release/individuals/{action}') + config.add_route('release/individuals', + 'ecoReleve-Core/release/individuals/') + config.add_route('release/individuals/action', + 'ecoReleve-Core/release/individuals/{action}') config.add_route('release/action', 'ecoReleve-Core/release/{action}') # ------------------------------------------------------------------------------------------------------------------------- # ##### Export ##### config.add_route('export', 'ecoReleve-Core/export/') config.add_route('export/themes', 'ecoReleve-Core/export/themes') - config.add_route('export/themes/id/views', 'ecoReleve-Core/export/themes/{id}/views') - config.add_route('export/views/id', 'ecoReleve-Core/export/views/{id}/') #geo, datas - config.add_route('export/views/id/action', 'ecoReleve-Core/export/views/{id}/{action}') #filtres, cols, count - config.add_route('export/views/getFile', 'ecoReleve-Core/export/views/getFile') #getFile - - - + config.add_route('export/themes/id/views', + 'ecoReleve-Core/export/themes/{id}/views') + config.add_route('export/views/id', + 'ecoReleve-Core/export/views/{id}/') # geo, datas + # filtres, cols, count + config.add_route('export/views/id/action', + 'ecoReleve-Core/export/views/{id}/{action}') + config.add_route('export/views/getFile', + 'ecoReleve-Core/export/views/getFile') # getFile diff --git a/Back/ecoreleve_server/Views/argosImport.py b/Back/ecoreleve_server/Views/argosImport.py index 90edeb8b0..eb81e3014 100644 --- a/Back/ecoreleve_server/Views/argosImport.py +++ b/Back/ecoreleve_server/Views/argosImport.py @@ -84,7 +84,7 @@ def parseDSFileAndInsert(full_filename,session): os.makedirs(out_path) try: os.remove(con_file) - except : + except : pass # Config init.txt for MTI-PArser @@ -92,7 +92,7 @@ def parseDSFileAndInsert(full_filename,session): cc['out'] = out_path cc['ini'] = con_file - with open(con_file,'w') as f: + with open(con_file,'w') as f: print('-eng\n-title\n-out\n'+out_path+'\n'+full_filename, file=f) # execute MTI-Parser @@ -119,7 +119,7 @@ def parseDSFileAndInsert(full_filename,session): parent.kill() except: pass - # WARNING if another client execute this process this function kill all active process + # WARNING if another client execute this process this function kill all active process # try: # os.system('taskkill /f /im MTIwinGPS.exe') # except: @@ -169,7 +169,7 @@ def parseDSFileAndInsert(full_filename,session): except : EngDataBis = tempEng - if EngData is not None : + if EngData is not None : EngToInsert = checkExistingEng(EngData,session) nb_existingEng += EngData.shape[0] if EngToInsert.shape[0] != 0 : @@ -226,7 +226,7 @@ def checkExistingEng(EngData,session) : # Extract non existing data DFToInsert = EngData[~EngData['id'].isin(merge['id'])] - # rename column + # rename column DFToInsert['FK_ptt'] = DFToInsert['ptt'] DFToInsert = DFToInsert.drop(['id','ptt'],1) except: @@ -316,7 +316,7 @@ def parseDIAGFileAndInsert(full_filename,session): else: try : splitParameters[i] = re.sub('[\s]'," ",splitParameters[i]) - a = 1 + a = 1 if colsInBlock[i] in ['lon1','lon2','lat1','lat2']: if 'W' in splitParameters[i] or 'S' in splitParameters[i]: a = -1 @@ -336,7 +336,7 @@ def parseDIAGFileAndInsert(full_filename,session): df = pd.DataFrame.from_dict(ListOfdictParams) df = df.dropna(subset=['date']) DFToInsert = checkExistingArgos(df,session) - DFToInsert.loc[:,('type')]=list(itertools.repeat('arg',len(DFToInsert.index))) + DFToInsert.loc[:,('type')]=list(itertools.repeat('argos',len(DFToInsert.index))) DFToInsert.loc[:,('checked')]=list(itertools.repeat(0,len(DFToInsert.index))) DFToInsert.loc[:,('imported')]=list(itertools.repeat(0,len(DFToInsert.index))) DFToInsert = DFToInsert.drop(['id','lat1','lat2','lon1','lon2'],1) @@ -361,7 +361,7 @@ def checkExistingArgos (dfToCheck,session) : queryArgos = queryArgos.where(and_(ArgosGps.date >= minDate , ArgosGps.date <= maxDate)) data = session.execute(queryArgos).fetchall() - # load data from Db into DF + # load data from Db into DF ArgosRecords = pd.DataFrame.from_records(data ,columns=[ArgosGps.pk_id.name, ArgosGps.date.name, ArgosGps.lat.name, ArgosGps.lon.name, ArgosGps.ptt.name] , coerce_float=True ) diff --git a/Back/ecoreleve_server/Views/individual.py b/Back/ecoreleve_server/Views/individual.py index 8a043b146..2aeb1ee23 100644 --- a/Back/ecoreleve_server/Views/individual.py +++ b/Back/ecoreleve_server/Views/individual.py @@ -12,16 +12,17 @@ Base, IndivLocationList, Station - ) +) from ..GenericObjets.FrontModules import FrontModules from ..GenericObjets import ListObjectWithDynProp import transaction -import json, itertools +import json +import itertools from datetime import datetime import datetime as dt import pandas as pd import numpy as np -from sqlalchemy import select, and_,cast, DATE,func,desc,join,asc +from sqlalchemy import select, and_, cast, DATE, func, desc, join, asc from sqlalchemy.orm import aliased from pyramid.security import NO_PERMISSION_REQUIRED from traceback import print_exc @@ -29,128 +30,144 @@ from ..utils.distance import haversine from ..utils.generator import Generator import io -from pyramid.response import Response ,FileResponse +from pyramid.response import Response, FileResponse from pyramid import threadlocal from ..controllers.security import routes_permission prefix = 'individuals' # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/action', renderer='json', request_method = 'GET',permission = routes_permission[prefix]['GET']) -@view_config(route_name= prefix+'/id/history/action', renderer='json', request_method = 'GET',permission = routes_permission[prefix]['GET']) -@view_config(route_name= prefix+'/id/equipment/action', renderer='json', request_method = 'GET',permission = routes_permission[prefix]['GET']) + + +@view_config(route_name=prefix + '/action', renderer='json', request_method='GET', permission=routes_permission[prefix]['GET']) +@view_config(route_name=prefix + '/id/history/action', renderer='json', request_method='GET', permission=routes_permission[prefix]['GET']) +@view_config(route_name=prefix + '/id/equipment/action', renderer='json', request_method='GET', permission=routes_permission[prefix]['GET']) def actionOnIndividuals(request): dictActionFunc = { - 'count' : count_, - 'forms' : getForms, - '0' : getForms, - 'getFields': getFields, - 'getFilters': getFilters, - 'getType': getIndividualType + 'count': count_, + 'forms': getForms, + '0': getForms, + 'getFields': getFields, + 'getFilters': getFilters, + 'getType': getIndividualType } actionName = request.matchdict['action'] return dictActionFunc[actionName](request) -def count_ (request = None,listObj = None) : + +def count_(request=None, listObj=None): session = request.dbsession ModuleType = 'IndivFilter' - moduleFront = session.query(FrontModules).filter(FrontModules.Name == ModuleType).one() - if request is not None : + moduleFront = session.query(FrontModules).filter( + FrontModules.Name == ModuleType).one() + if request is not None: data = request.params - if 'criteria' in data: + if 'criteria' in data: data['criteria'] = json.loads(data['criteria']) - if data['criteria'] != {} : - searchInfo['criteria'] = [obj for obj in data['criteria'] if obj['Value'] != str(-1) ] - else : - searchInfo = {'criteria':[]} - searchInfo['criteria'].append({'Column':'FK_IndividualType','Operator': '=', 'Value':1}) - listObj = ListObjectWithDynProp(Individual,moduleFront) - count = listObj.count(searchInfo = searchInfo) - else : + if data['criteria'] != {}: + searchInfo['criteria'] = [obj for obj in data[ + 'criteria'] if obj['Value'] != str(-1)] + else: + searchInfo = {'criteria': []} + searchInfo['criteria'].append( + {'Column': 'FK_IndividualType', 'Operator': '=', 'Value': 1}) + listObj = ListObjectWithDynProp(Individual, moduleFront) + count = listObj.count(searchInfo=searchInfo) + else: count = listObj.count() - return count + return count + -def getFilters (request): +def getFilters(request): session = request.dbsession - if 'typeObj' in request.params : + if 'typeObj' in request.params: objType = request.params['typeObj'] - else : + else: objType = 1 if 'FilterName' in request.params and request.params['FilterName'] != '': ModuleType = request.params['FilterName'] else: ModuleType = 'IndivFilter' - filtersList = Individual(FK_IndividualType = objType).GetFilters(ModuleType) + filtersList = Individual(FK_IndividualType=objType).GetFilters(ModuleType) filters = {} - for i in range(len(filtersList)) : + for i in range(len(filtersList)): filters[str(i)] = filtersList[i] return filters -def getForms(request) : + +def getForms(request): session = request.dbsession typeIndiv = request.params['ObjectType'] ModuleName = 'IndivForm' - Conf = session.query(FrontModules).filter(FrontModules.Name==ModuleName ).first() - newIndiv = Individual(FK_IndividualType = typeIndiv) + Conf = session.query(FrontModules).filter( + FrontModules.Name == ModuleName).first() + newIndiv = Individual(FK_IndividualType=typeIndiv) newIndiv.init_on_load() - schema = newIndiv.GetDTOWithSchema(Conf,'edit') + schema = newIndiv.GetDTOWithSchema(Conf, 'edit') return schema -def getFields(request) : + +def getFields(request): session = request.dbsession - if 'typeObj' in request.params : + if 'typeObj' in request.params: objType = request.params['typeObj'] - else : + else: objType = 1 ModuleType = request.params['name'] - if ModuleType in ['default','AdvancedIndivFilter'] : + if ModuleType in ['default', 'AdvancedIndivFilter']: ModuleType = 'IndivFilter' - cols = Individual(FK_IndividualType = objType).GetGridFields(ModuleType) + cols = Individual(FK_IndividualType=objType).GetGridFields(ModuleType) return cols + def getIndividualType(request): session = request.dbsession - query = select([IndividualType.ID.label('val'), IndividualType.Name.label('label')]) - response = [ OrderedDict(row) for row in session.execute(query).fetchall()] + query = select([IndividualType.ID.label('val'), + IndividualType.Name.label('label')]) + response = [OrderedDict(row) for row in session.execute(query).fetchall()] return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id', renderer='json', request_method = 'GET',permission = routes_permission[prefix]['GET']) + + +@view_config(route_name=prefix + '/id', renderer='json', request_method='GET', permission=routes_permission[prefix]['GET']) def getIndiv(request): session = request.dbsession id = request.matchdict['id'] curIndiv = session.query(Individual).get(id) curIndiv.LoadNowValues() - # if Form value exists in request --> return data with schema else return only data - if 'FormName' in request.params : + # if Form value exists in request --> return data with schema else return + # only data + if 'FormName' in request.params: ModuleName = request.params['FormName'] - try : + try: DisplayMode = request.params['DisplayMode'] - except : + except: DisplayMode = 'display' - Conf = session.query(FrontModules).filter(FrontModules.Name=='IndivForm').first() - response = curIndiv.GetDTOWithSchema(Conf,DisplayMode) - - elif 'geo' in request.params : - geoJson=[] - joinTable = join(Individual_Location, Sensor, Individual_Location.FK_Sensor == Sensor.ID) - stmt = select([Individual_Location,Sensor.UnicIdentifier]).select_from(joinTable - ).where(Individual_Location.FK_Individual == id) + Conf = session.query(FrontModules).filter( + FrontModules.Name == 'IndivForm').first() + response = curIndiv.GetDTOWithSchema(Conf, DisplayMode) + + elif 'geo' in request.params: + geoJson = [] + joinTable = join(Individual_Location, Sensor, + Individual_Location.FK_Sensor == Sensor.ID) + stmt = select([Individual_Location, Sensor.UnicIdentifier]).select_from(joinTable + ).where(Individual_Location.FK_Individual == id) dataResult = session.execute(stmt).fetchall() for row in dataResult: - geoJson.append({'type':'Feature', 'properties':{'type':row['type_'] - , 'sensor':row['UnicIdentifier'],'date':row['Date'],'ID':row['ID']} - , 'geometry':{'type':'Point', 'coordinates':[row['LAT'],row['LON']]}}) - result = {'type':'FeatureCollection', 'features':geoJson} + geoJson.append({'type': 'Feature', 'properties': {'type': row['type_'], 'sensor': row['UnicIdentifier'], 'date': row[ + 'Date'], 'ID': row['ID']}, 'geometry': {'type': 'Point', 'coordinates': [row['LAT'], row['LON']]}}) + result = {'type': 'FeatureCollection', 'features': geoJson} response = result - else : - response = curIndiv.GetFlatObject() + else: + response = curIndiv.GetFlatObject() # if 'geoDynamic' in request.params : # geoJson=[] # joinTable = join(Individual_Location, Sensor, Individual_Location.FK_Sensor == Sensor.ID) @@ -158,14 +175,14 @@ def getIndiv(request): # ).where(Individual_Location.FK_Individual == id # ).where(Individual_Location.type_ == 'GSM').order_by(asc(Individual_Location.Date)) # dataResult = session.execute(stmt).fetchall() - + # df = pd.DataFrame.from_records(dataResult, columns=dataResult[0].keys(), coerce_float=True) # X1 = df.iloc[:-1][['LAT', 'LON']].values # X2 = df.iloc[1:][['LAT', 'LON']].values # df['dist'] = np.append(haversine(X1, X2), 0).round(3) # # Compute the speed # df['speed'] = (df['dist'] / ((df['Date'] - df['Date'].shift(-1)).fillna(1) / np.timedelta64(1, 'h'))).round(3) - # df['Date'] = df['Date'].apply(lambda row: np.datetime64(row).astype(datetime)) + # df['Date'] = df['Date'].apply(lambda row: np.datetime64(row).astype(datetime)) # for i in range(df.shape[0]): # geoJson.append({'type':'Feature', 'properties':{'type':df.loc[i,'type_'] @@ -173,59 +190,65 @@ def getIndiv(request): # , 'geometry':{'type':'Point', 'coordinates':[df.loc[i,'LAT'],df.loc[i,'LON']]}}) # result = {'type':'FeatureCollection', 'features':geoJson} # response = result - # else : + # else : # response = curIndiv.GetFlatObject() return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/history', renderer='json', request_method = 'GET',permission = routes_permission[prefix]['GET']) + + +@view_config(route_name=prefix + '/id/history', renderer='json', request_method='GET', permission=routes_permission[prefix]['GET']) def getIndivHistory(request): session = request.dbsession id = request.matchdict['id'] - tableJoin = join(IndividualDynPropValue,IndividualDynProp - ,IndividualDynPropValue.FK_IndividualDynProp == IndividualDynProp.ID) - query = select([IndividualDynPropValue,IndividualDynProp.Name]).select_from(tableJoin).where( + tableJoin = join(IndividualDynPropValue, IndividualDynProp, + IndividualDynPropValue.FK_IndividualDynProp == IndividualDynProp.ID) + query = select([IndividualDynPropValue, IndividualDynProp.Name]).select_from(tableJoin).where( IndividualDynPropValue.FK_Individual == id - ).order_by(desc(IndividualDynPropValue.StartDate)) + ).order_by(desc(IndividualDynPropValue.StartDate)) result = session.execute(query).fetchall() response = [] for row in result: curRow = OrderedDict(row) dictRow = {} - for key in curRow : - if curRow[key] is not None : - if 'Value' in key : - dictRow['value'] = curRow[key] - elif 'FK' not in key : + for key in curRow: + if curRow[key] is not None: + if 'Value' in key: + dictRow['value'] = curRow[key] + elif 'FK' not in key: dictRow[key] = curRow[key] - dictRow['StartDate'] = curRow['StartDate'].strftime('%Y-%m-%d %H:%M:%S') + dictRow['StartDate'] = curRow[ + 'StartDate'].strftime('%Y-%m-%d %H:%M:%S') response.append(dictRow) return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/equipment', renderer='json', request_method = 'GET',permission = routes_permission[prefix]['GET']) + + +@view_config(route_name=prefix + '/id/equipment', renderer='json', request_method='GET', permission=routes_permission[prefix]['GET']) def getIndivEquipment(request): session = request.dbsession id_indiv = request.matchdict['id'] table = Base.metadata.tables['IndividualEquipment'] - joinTable = join(table,Sensor, table.c['FK_Sensor'] == Sensor.ID) - joinTable = join(joinTable,SensorType, Sensor.FK_SensorType == SensorType.ID) - query = select([table.c['StartDate'],table.c['EndDate'],Sensor.UnicIdentifier,table.c['FK_Individual'],SensorType.Name.label('Type')] - ).select_from(joinTable - ).where(table.c['FK_Individual'] == id_indiv - ).order_by(desc(table.c['StartDate'])) + joinTable = join(table, Sensor, table.c['FK_Sensor'] == Sensor.ID) + joinTable = join(joinTable, SensorType, + Sensor.FK_SensorType == SensorType.ID) + query = select([table.c['StartDate'], table.c['EndDate'], Sensor.UnicIdentifier, Sensor.ID.label('SensorID'), table.c['FK_Individual'], SensorType.Name.label('Type')] + ).select_from(joinTable + ).where(table.c['FK_Individual'] == id_indiv + ).order_by(desc(table.c['StartDate'])) result = session.execute(query).fetchall() response = [] for row in result: curRow = OrderedDict(row) curRow['StartDate'] = curRow['StartDate'].strftime('%Y-%m-%d %H:%M:%S') - if curRow['EndDate'] is not None : - curRow['EndDate'] = curRow['EndDate'].strftime('%Y-%m-%d %H:%M:%S') + if curRow['EndDate'] is not None: + curRow['EndDate'] = curRow['EndDate'].strftime('%Y-%m-%d %H:%M:%S') else: curRow['EndDate'] = '' response.append(curRow) @@ -233,7 +256,9 @@ def getIndivEquipment(request): return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id', renderer='json', request_method = 'DELETE',permission = routes_permission[prefix]['DELETE']) + + +@view_config(route_name=prefix + '/id', renderer='json', request_method='DELETE', permission=routes_permission[prefix]['DELETE']) def deleteIndiv(request): session = request.dbsession id_ = request.matchdict['id'] @@ -243,7 +268,9 @@ def deleteIndiv(request): return True # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id', renderer='json', request_method = 'PUT',permission = routes_permission[prefix]['PUT']) + + +@view_config(route_name=prefix + '/id', renderer='json', request_method='PUT', permission=routes_permission[prefix]['PUT']) def updateIndiv(request): session = request.dbsession data = request.json_body @@ -254,37 +281,43 @@ def updateIndiv(request): return {} # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix + '/insert', renderer='json', request_method = 'POST',permission = routes_permission[prefix]['POST']) + + +@view_config(route_name=prefix + '/insert', renderer='json', request_method='POST', permission=routes_permission[prefix]['POST']) def insertIndiv(request): session = request.dbsession data = request.json_body - if not isinstance(data,list): + if not isinstance(data, list): return insertOneNewIndiv(request) - else : + else: print('_______INsert LIST') - #transaction.commit() - #return insertListNewIndivs(request) + # transaction.commit() + # return insertListNewIndivs(request) # ------------------------------------------------------------------------------------------------------------------------- # -def insertOneNewIndiv (request) : + + +def insertOneNewIndiv(request): session = request.dbsession - session.autoflush = False # if set True create automatically a new indiv = not what we want + # if set True create automatically a new indiv = not what we want + session.autoflush = False data = {} - startDate = None + startDate = None - for items , value in request.json_body.items() : + for items, value in request.json_body.items(): data[items] = value existingIndivID = None if 'stationID' in data: curSta = session.query(Station).get(data['stationID']) - startDate=curSta.StationDate + startDate = curSta.StationDate indivType = int(data['FK_IndividualType']) - newIndiv = Individual(FK_IndividualType = indivType , creationDate = datetime.now(),Original_ID = '0') + newIndiv = Individual(FK_IndividualType=indivType, + creationDate=datetime.now(), Original_ID='0') # newIndiv.IndividualType = session.execute(([IndividualType.ID]).where(IndividualType.ID==indivType)).fetchone() newIndiv.init_on_load() - newIndiv.UpdateFromJson(data,startDate=startDate) + newIndiv.UpdateFromJson(data, startDate=startDate) if indivType == 2: existingIndivID = checkExisting(newIndiv) @@ -300,30 +333,35 @@ def insertOneNewIndiv (request) : return {'ID': indivID} + def checkExisting(indiv): # session = threadlocal.get_current_registry().dbmaker.session_factory() session = threadlocal.get_current_registry().dbmaker() indivData = indiv.PropDynValuesOfNow - searchInfo = {'criteria':[{'Column':key,'Operator':'is','Value':val} for key,val in indivData.items()],'order_by':['ID:asc']} - + searchInfo = {'criteria': [{'Column': key, 'Operator': 'is', 'Value': val} + for key, val in indivData.items()], 'order_by': ['ID:asc']} + ModuleType = 'IndivFilter' - moduleFront = session.query(FrontModules).filter(FrontModules.Name == ModuleType).one() + moduleFront = session.query(FrontModules).filter( + FrontModules.Name == ModuleType).one() - listObj = IndividualList(moduleFront,typeObj = 2) + listObj = IndividualList(moduleFront, typeObj=2) dataResult = listObj.GetFlatDataList(searchInfo) - if len(dataResult)>0: + if len(dataResult) > 0: existingID = dataResult[0]['ID'] - else : + else: existingID = None return existingID # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix, renderer='json', request_method = 'GET', permission = routes_permission[prefix]['GET']) -@view_config(route_name= prefix, renderer='json', request_method = 'POST', permission = routes_permission[prefix]['GET']) -def searchIndiv(request,searchInfo=None,noCount=False): + + +@view_config(route_name=prefix, renderer='json', request_method='GET', permission=routes_permission[prefix]['GET']) +@view_config(route_name=prefix, renderer='json', request_method='POST', permission=routes_permission[prefix]['GET']) +def searchIndiv(request, searchInfo=None, noCount=False): session = request.dbsession history = False startDate = None @@ -332,94 +370,103 @@ def searchIndiv(request,searchInfo=None,noCount=False): searchInfo = request.params.mixed() # searchInfo = {} # searchInfo['criteria'] = [] - if 'criteria' in searchInfo: + if 'criteria' in searchInfo: searchInfo['criteria'] = json.loads(searchInfo['criteria']) - if searchInfo['criteria'] != {} : - searchInfo['criteria'] = [obj for obj in searchInfo['criteria'] if obj['Value'] != str(-1) ] - else : - searchInfo['criteria'] = [] + if searchInfo['criteria'] != {}: + searchInfo['criteria'] = [obj for obj in searchInfo[ + 'criteria'] if obj['Value'] != str(-1)] + else: + searchInfo['criteria'] = [] searchInfo['order_by'] = json.loads(searchInfo['order_by']) searchInfo['offset'] = json.loads(searchInfo['offset']) searchInfo['per_page'] = json.loads(searchInfo['per_page']) - if 'startDate' in searchInfo and searchInfo['startDate']!='': - startDate = datetime.strptime(searchInfo['startDate'],'%d/%m/%Y %H:%M:%S') + if 'startDate' in searchInfo and searchInfo['startDate'] != '': + startDate = datetime.strptime( + searchInfo['startDate'], '%d/%m/%Y %H:%M:%S') if 'history' in searchInfo and searchInfo['history'] == '1': history = True if 'typeObj' in request.params: typeObj = request.params['typeObj'] - searchInfo['criteria'].append({'Column':'FK_IndividualType','Operator': '=', 'Value':request.params['typeObj']}) + searchInfo['criteria'].append( + {'Column': 'FK_IndividualType', 'Operator': '=', 'Value': request.params['typeObj']}) else: - searchInfo['criteria'].append({'Column':'FK_IndividualType','Operator': '=', 'Value':1}) + searchInfo['criteria'].append( + {'Column': 'FK_IndividualType', 'Operator': '=', 'Value': 1}) typeObj = 1 ModuleType = 'IndivFilter' - moduleFront = session.query(FrontModules).filter(FrontModules.Name == ModuleType).one() + moduleFront = session.query(FrontModules).filter( + FrontModules.Name == ModuleType).one() - listObj = IndividualList(moduleFront,typeObj = typeObj,history=history,startDate=startDate) + listObj = IndividualList(moduleFront, typeObj=typeObj, + history=history, startDate=startDate) dataResult = listObj.GetFlatDataList(searchInfo) if not noCount: countResult = listObj.count(searchInfo) - result = [{'total_entries':countResult}] + result = [{'total_entries': countResult}] result.append(dataResult) - else : + else: result = dataResult return result -@view_config(route_name= prefix+'/id/location/action', renderer='json', request_method = 'GET',permission = routes_permission[prefix]['GET']) +@view_config(route_name=prefix + '/id/location/action', renderer='json', request_method='GET', permission=routes_permission[prefix]['GET']) def actionOnIndividualsLoc(request): dictActionFunc = { - 'getFields': getFieldsLoc, - 'getFilters': getFiltersLoc, + 'getFields': getFieldsLoc, + 'getFilters': getFiltersLoc, } actionName = request.matchdict['action'] return dictActionFunc[actionName](request) -def getFieldsLoc(request) : + +def getFieldsLoc(request): session = request.dbsession - gene = IndivLocationList('Individual_Location',session,None) + gene = IndivLocationList('Individual_Location', session, None) return gene.get_col() # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/location', renderer='json',permission = routes_permission[prefix]['GET']) + + +@view_config(route_name=prefix + '/id/location', renderer='json', permission=routes_permission[prefix]['GET']) def getIndivLocation(request): id_ = request.matchdict['id'] session = request.dbsession - gene = IndivLocationList('Individual_Location',session,id_) + gene = IndivLocationList('Individual_Location', session, id_) response = None data = request.params.mixed() - if 'criteria' in data: + if 'criteria' in data: criteria = json.loads(data['criteria']) - else : + else: criteria = {} - + if 'per_page' in data: offset = json.loads(data['offset']) per_page = json.loads(data['per_page']) order_by = json.loads(data['order_by']) - else : - offset= None - per_page= None - order_by= None + else: + offset = None + per_page = None + order_by = None - if 'geo' in request.params : - result = gene.get_geoJSON(criteria,['ID','Date','type_']) + if 'geo' in request.params: + result = gene.get_geoJSON(criteria, ['ID', 'Date', 'type_']) else: - result = gene.search(criteria,offset=offset,per_page=per_page,order_by=['StationDate:desc']) - for row in result : + result = gene.search(criteria, offset=offset, + per_page=per_page, order_by=['StationDate:desc']) + for row in result: row['Date'] = row['Date'].strftime('%Y-%m-%d %H:%M:%S') row['format'] = 'YYYY-MM-DD HH:mm:ss' - - # ************ POC Indiv location PLayer **************** + # ************ POC Indiv location PLayer **************** # if 'geoDynamic' in request.params : # geoJson=[] @@ -428,14 +475,14 @@ def getIndivLocation(request): # ).where(Individual_Location.FK_Individual == id # ).where(Individual_Location.type_ == 'GSM').order_by(asc(Individual_Location.Date)) # dataResult = session.execute(stmt).fetchall() - + # df = pd.DataFrame.from_records(dataResult, columns=dataResult[0].keys(), coerce_float=True) # X1 = df.iloc[:-1][['LAT', 'LON']].values # X2 = df.iloc[1:][['LAT', 'LON']].values # df['dist'] = np.append(haversine(X1, X2), 0).round(3) # # Compute the speed # df['speed'] = (df['dist'] / ((df['Date'] - df['Date'].shift(-1)).fillna(1) / np.timedelta64(1, 'h'))).round(3) - # df['Date'] = df['Date'].apply(lambda row: np.datetime64(row).astype(datetime)) + # df['Date'] = df['Date'].apply(lambda row: np.datetime64(row).astype(datetime)) # for i in range(df.shape[0]): # geoJson.append({'type':'Feature', 'properties':{'type':df.loc[i,'type_'] @@ -443,44 +490,48 @@ def getIndivLocation(request): # , 'geometry':{'type':'Point', 'coordinates':[df.loc[i,'LAT'],df.loc[i,'LON']]}}) # result = {'type':'FeatureCollection', 'features':geoJson} # response = result - # else : + # else : # response = curIndiv.GetFlatObject() return result -@view_config(route_name= prefix+'/id/location', renderer='json', request_method = 'PUT',permission = routes_permission[prefix]['PUT']) +@view_config(route_name=prefix + '/id/location', renderer='json', request_method='PUT', permission=routes_permission[prefix]['PUT']) def delIndivLocationList(request): session = request.dbsession IdList = json.loads(request.params['IDs']) - session.query(Individual_Location).filter(Individual_Location.ID.in_(IdList)).delete(synchronize_session=False) + session.query(Individual_Location).filter( + Individual_Location.ID.in_(IdList)).delete(synchronize_session=False) -@view_config(route_name= prefix+'/id/location/id_loc', renderer='json', request_method = 'GET',permission = routes_permission[prefix]['PUT']) +@view_config(route_name=prefix + '/id/location/id_loc', renderer='json', request_method='GET', permission=routes_permission[prefix]['PUT']) def delIndivLocation(request): session = request.dbsession Id = request.matchdict['id_loc'] - session.query(Individual_Location).filter(Individual_Location.ID == Id).delete(synchronize_session=False) + session.query(Individual_Location).filter( + Individual_Location.ID == Id).delete(synchronize_session=False) @view_config(route_name=prefix + '/export', renderer='json', request_method='GET') def individuals_export(request): session = request.dbsession searchInfo = request.params.mixed() - if 'criteria' in searchInfo: + if 'criteria' in searchInfo: searchInfo['criteria'] = json.loads(searchInfo['criteria']) - if searchInfo['criteria'] != {} : - searchInfo['criteria'] = [obj for obj in searchInfo['criteria'] if obj['Value'] != str(-1) ] + if searchInfo['criteria'] != {}: + searchInfo['criteria'] = [obj for obj in searchInfo[ + 'criteria'] if obj['Value'] != str(-1)] - dataResult = searchIndiv(request,searchInfo=searchInfo,noCount=True) + dataResult = searchIndiv(request, searchInfo=searchInfo, noCount=True) # ModuleType = 'IndivFilter' # moduleFront = session.query(FrontModules).filter(FrontModules.Name == ModuleType).one() # listObj = IndividualList(moduleFront) # dataResult = listObj.GetFlatDataList(searchInfo) - df = pd.DataFrame.from_records(dataResult, columns=dataResult[0].keys(), coerce_float=True) + df = pd.DataFrame.from_records(dataResult, columns=dataResult[ + 0].keys(), coerce_float=True) fout = io.BytesIO() writer = pd.ExcelWriter(fout) @@ -489,11 +540,4 @@ def individuals_export(request): file = fout.getvalue() dt = datetime.now().strftime('%d-%m-%Y') - return Response(file,content_disposition= "attachment; filename=individuals_export_"+dt+".xlsx",content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') - - - - - - - + return Response(file, content_disposition="attachment; filename=individuals_export_" + dt + ".xlsx", content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') diff --git a/Back/ecoreleve_server/Views/protocols.py b/Back/ecoreleve_server/Views/protocols.py index 10a98aee5..43ce8eef0 100644 --- a/Back/ecoreleve_server/Views/protocols.py +++ b/Back/ecoreleve_server/Views/protocols.py @@ -7,119 +7,137 @@ Station, ErrorAvailable, sendLog - ) +) from ..GenericObjets.FrontModules import FrontModules import json from datetime import datetime -from sqlalchemy import func,select,and_, or_, join +from sqlalchemy import func, select, and_, or_, join from pyramid.security import NO_PERMISSION_REQUIRED from collections import OrderedDict from traceback import print_exc from ..controllers.security import routes_permission - prefixProt = 'protocols' prefix = 'stations' # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/protocols/', renderer='json', request_method = 'GET',permission = routes_permission[prefixProt]['GET']) -@view_config(route_name= prefix+'/id/protocols', renderer='json', request_method = 'GET',permission = routes_permission[prefixProt]['GET']) -def GetProtocolsofStation (request) : - session = request.dbsession + +@view_config(route_name=prefix + '/id/protocols/', renderer='json', request_method='GET', permission=routes_permission[prefixProt]['GET']) +@view_config(route_name=prefix + '/id/protocols', renderer='json', request_method='GET', permission=routes_permission[prefixProt]['GET']) +def GetProtocolsofStation(request): + session = request.dbsession + response = None sta_id = request.matchdict['id'] data = {} searchInfo = {} - criteria = [{'Column': 'FK_Station', 'Operator':'=','Value':sta_id}] + criteria = [{'Column': 'FK_Station', 'Operator': '=', 'Value': sta_id}] response = [] curSta = session.query(Station).get(sta_id) - try : - if 'criteria' in request.params or request.params == {} : + try: + if 'criteria' in request.params or request.params == {}: searchInfo = data searchInfo['criteria'] = [] searchInfo['criteria'].extend(criteria) - listObs = ListObjectWithDynProp(session,Observation,searchInfo) + listObs = ListObjectWithDynProp(session, Observation, searchInfo) response = listObs.GetFlatList() - except : + except: pass - try : - if 'FormName' in request.params : + try: + if 'FormName' in request.params: ModuleName = 'ObservationForm' - listObs = list(session.query(Observation).filter(and_(Observation.FK_Station == sta_id,Observation.Parent_Observation == None))) - listType =list(session.query(FieldActivity_ProtocoleType - ).filter(FieldActivity_ProtocoleType.FK_fieldActivity == curSta.fieldActivityId)) - Conf = session.query(FrontModules).filter(FrontModules.Name == ModuleName ).first() - ### TODO : if protocols exists, append the new protocol form at the after : 2 loops, no choice + listObs = list(session.query(Observation).filter( + and_(Observation.FK_Station == sta_id, Observation.Parent_Observation == None))) + listType = list(session.query(FieldActivity_ProtocoleType + ).filter(FieldActivity_ProtocoleType.FK_fieldActivity == curSta.fieldActivityId)) + Conf = session.query(FrontModules).filter( + FrontModules.Name == ModuleName).first() + # TODO : if protocols exists, append the new protocol form at the + # after : 2 loops, no choice if listObs or listType: # max_iter = max(len(listObs),len(listType)) listProto = {} - for i in range(len(listObs)) : - try : + for i in range(len(listObs)): + try: DisplayMode = 'display' obs = listObs[i] - typeName = obs.GetType().Name.replace('_',' ') + typeName = obs.GetType().Name.replace('_', ' ') typeID = obs.GetType().ID obs.LoadNowValues() - try : - listProto[typeID]['obs'].append(obs.GetDTOWithSchema(Conf,DisplayMode)) - except : + try: + listProto[typeID]['obs'].append( + obs.GetDTOWithSchema(Conf, DisplayMode)) + except: listObsWithSchema = [] - listObsWithSchema.append(obs.GetDTOWithSchema(Conf,DisplayMode)) - listProto[typeID] = {'Name': typeName,'obs':listObsWithSchema} + listObsWithSchema.append( + obs.GetDTOWithSchema(Conf, DisplayMode)) + listProto[typeID] = { + 'Name': typeName, 'obs': listObsWithSchema} pass - except Exception as e : + except Exception as e: print_exc() pass - for i in range(len(listType)) : - try : + for i in range(len(listType)): + try: DisplayMode = 'edit' - + virginTypeID = listType[i].FK_ProtocoleType - virginObs = Observation(FK_ProtocoleType = virginTypeID) - viginTypeName = virginObs.GetType().Name.replace('_',' ') - try : - if virginTypeID not in listProto : + virginObs = Observation(FK_ProtocoleType=virginTypeID) + viginTypeName = virginObs.GetType().Name.replace('_', ' ') + try: + if virginTypeID not in listProto: test_ = listProto[virginTypeID] - virginForm = virginObs.GetDTOWithSchema(Conf,DisplayMode) - virginForm['data']['FK_ProtocoleType'] = virginTypeID - listProto[virginTypeID]['obs'].append(virginForm) - except : - if virginTypeID not in listProto : + virginForm = virginObs.GetDTOWithSchema( + Conf, DisplayMode) + virginForm['data'][ + 'FK_ProtocoleType'] = virginTypeID + listProto[virginTypeID][ + 'obs'].append(virginForm) + except: + if virginTypeID not in listProto: listSchema = [] - virginForm = virginObs.GetDTOWithSchema(Conf,DisplayMode) - virginForm['data']['FK_ProtocoleType'] = virginTypeID + virginForm = virginObs.GetDTOWithSchema( + Conf, DisplayMode) + virginForm['data'][ + 'FK_ProtocoleType'] = virginTypeID listSchema.append(virginForm) - listProto[virginTypeID] = {'Name': viginTypeName,'obs':listSchema} + listProto[virginTypeID] = { + 'Name': viginTypeName, 'obs': listSchema} pass - except : + except: print_exc() pass - globalListProto = [{'ID':objID, 'Name':listProto[objID]['Name'],'obs':listProto[objID]['obs'] } for objID in listProto.keys()] - response = sorted(globalListProto, key=lambda k: k['Name']) - except Exception as e : + globalListProto = [{'ID': objID, 'Name': listProto[objID][ + 'Name'], 'obs':listProto[objID]['obs']} for objID in listProto.keys()] + response = sorted(globalListProto, key=lambda k: k['Name']) + except Exception as e: print_exc() - print (e) + print(e) pass return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/protocols', renderer='json', request_method = 'POST',permission = routes_permission[prefixProt]['POST']) -@view_config(route_name= prefix+'/id/protocols/', renderer='json', request_method = 'POST',permission = routes_permission[prefixProt]['POST']) -def insertNewProtocol (request) : + + +@view_config(route_name=prefix + '/id/protocols', renderer='json', request_method='POST', permission=routes_permission[prefixProt]['POST']) +@view_config(route_name=prefix + '/id/protocols/', renderer='json', request_method='POST', permission=routes_permission[prefixProt]['POST']) +def insertNewProtocol(request): session = request.dbsession data = {} - for items , value in request.json_body.items() : + for items, value in request.json_body.items(): data[items] = value data['FK_Station'] = request.matchdict['id'] sta = session.query(Station).get(request.matchdict['id']) - newProto = Observation(FK_ProtocoleType = data['FK_ProtocoleType'],FK_Station=data['FK_Station']) #,FK_Station=data['FK_Station']) - newProto.ProtocoleType = session.query(ProtocoleType).filter(ProtocoleType.ID==data['FK_ProtocoleType']).first() + newProto = Observation(FK_ProtocoleType=data['FK_ProtocoleType'], FK_Station=data[ + 'FK_Station']) # ,FK_Station=data['FK_Station']) + newProto.ProtocoleType = session.query(ProtocoleType).filter( + ProtocoleType.ID == data['FK_ProtocoleType']).first() listOfSubProtocols = [] - for items , value in data.items() : - if isinstance(value,list) and items != 'children': + for items, value in data.items(): + if isinstance(value, list) and items != 'children': listOfSubProtocols = value # if listOfSubProtocols !=[] and 'sub_ProtocoleType' in data: # for obj in listOfSubProtocols: @@ -127,21 +145,23 @@ def insertNewProtocol (request) : data['Observation_childrens'] = listOfSubProtocols newProto.init_on_load() newProto.UpdateFromJson(data) - try : + try: newProto.Station = sta session.add(newProto) session.flush() message = {'id': newProto.ID} - except ErrorAvailable as e : + except ErrorAvailable as e: session.rollback() request.response.status_code = 510 message = e.value - sendLog(logLevel=1,domaine=3,msg_number = request.response.status_code) + sendLog(logLevel=1, domaine=3, msg_number=request.response.status_code) return message # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/protocols/obs_id', renderer='json', request_method = 'PUT',permission = routes_permission[prefixProt]['PUT']) + + +@view_config(route_name=prefix + '/id/protocols/obs_id', renderer='json', request_method='PUT', permission=routes_permission[prefixProt]['PUT']) def updateObservation(request): session = request.dbsession data = request.json_body @@ -152,23 +172,25 @@ def updateObservation(request): subObsList = [] message = 'ok' - for items , value in data.items(): - if isinstance(value,list) and items != 'children': + for items, value in data.items(): + if isinstance(value, list) and items != 'children': listOfSubProtocols = value data['Observation_childrens'] = listOfSubProtocols curObs.UpdateFromJson(data) - try : - if curObs.Equipment is not None : + try: + if curObs.Equipment is not None: curObs.Station = curObs.Station - except ErrorAvailable as e : + except ErrorAvailable as e: session.rollback() request.response.status_code = 510 message = e.value return message # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/protocols/obs_id', renderer='json', request_method = 'DELETE',permission = routes_permission[prefixProt]['DELETE']) + + +@view_config(route_name=prefix + '/id/protocols/obs_id', renderer='json', request_method='DELETE', permission=routes_permission[prefixProt]['DELETE']) def deleteObservation(request): session = request.dbsession id_obs = request.matchdict['obs_id'] @@ -178,90 +200,107 @@ def deleteObservation(request): return {} # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/protocols/obs_id', renderer='json', request_method = 'GET',permission = routes_permission[prefixProt]['GET']) + + +@view_config(route_name=prefix + '/id/protocols/obs_id', renderer='json', request_method='GET', permission=routes_permission[prefixProt]['GET']) def getObservation(request): session = request.dbsession id_obs = request.matchdict['obs_id'] id_sta = request.matchdict['id'] - try : - curObs = session.query(Observation).filter(and_(Observation.ID ==id_obs, Observation.FK_Station == id_sta )).one() + try: + curObs = session.query(Observation).filter( + and_(Observation.ID == id_obs, Observation.FK_Station == id_sta)).one() curObs.LoadNowValues() - # if Form value exists in request --> return data with schema else return only data - if 'FormName' in request.params : + # if Form value exists in request --> return data with schema else + # return only data + if 'FormName' in request.params: ModuleName = request.params['FormName'] - try : + try: DisplayMode = request.params['DisplayMode'] - except : + except: DisplayMode = 'display' - Conf = session.query(FrontModules).filter(FrontModules.Name=='ObservationForm' ).first() - response = curObs.GetDTOWithSchema(Conf,DisplayMode) - else : - response = curObs.GetFlatObject() - except Exception as e : + Conf = session.query(FrontModules).filter( + FrontModules.Name == 'ObservationForm').first() + response = curObs.GetDTOWithSchema(Conf, DisplayMode) + else: + response = curObs.GetFlatObject() + except Exception as e: response = {} return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/protocols/action', renderer='json', request_method = 'GET',permission = routes_permission[prefixProt]['GET']) + + +@view_config(route_name=prefix + '/id/protocols/action', renderer='json', request_method='GET', permission=routes_permission[prefixProt]['GET']) def actionOnObs(request): session = request.dbsession dictActionFunc = { - 'count' : countObs, - 'forms' : getObsForms, - '0' : getObsForms, - 'fields': getObsFields + 'count': countObs, + 'forms': getObsForms, + '0': getObsForms, + 'fields': getObsFields } actionName = request.matchdict['action'] return dictActionFunc[actionName](request) -def countObs (request) : + +def countObs(request): session = request.dbsession # ## TODO count stations return -def getObsForms(request) : + +def getObsForms(request): session = request.dbsession typeObs = request.params['ObjectType'] sta_id = request.matchdict['id'] ModuleName = 'ObservationForm' - Conf = session.query(FrontModules).filter(FrontModules.Name==ModuleName ).first() - newObs = Observation(FK_ProtocoleType = typeObs, FK_Station = sta_id) + Conf = session.query(FrontModules).filter( + FrontModules.Name == ModuleName).first() + newObs = Observation(FK_ProtocoleType=typeObs, FK_Station=sta_id) newObs.init_on_load() - schema = newObs.GetDTOWithSchema(Conf,'edit') + schema = newObs.GetDTOWithSchema(Conf, 'edit') return schema -def getObsFields(request) : + +def getObsFields(request): session = request.dbsession # ## TODO return fields Station return # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefixProt, renderer='json', request_method = 'PUT',permission = routes_permission[prefixProt]['PUT']) + + +@view_config(route_name=prefixProt, renderer='json', request_method='PUT', permission=routes_permission[prefixProt]['PUT']) def updateListProtocols(request): session = request.dbsession - # TODO - # update a list of protocols + # TODO + # update a list of protocols return # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefixProt, renderer='json', request_method = 'POST',permission = routes_permission[prefixProt]['POST']) + + +@view_config(route_name=prefixProt, renderer='json', request_method='POST', permission=routes_permission[prefixProt]['POST']) def insertProtocols(request): session = request.dbsession - return insertNewProtocol (request) + return insertNewProtocol(request) # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefixProt+'/action', renderer='json', request_method = 'GET',permission = routes_permission[prefixProt]['GET']) + + +@view_config(route_name=prefixProt + '/action', renderer='json', request_method='GET', permission=routes_permission[prefixProt]['GET']) def actionOnProtocols(request): dictActionFunc = { - 'count' : count, - 'forms' : getForms, - '0' : getForms, - 'fields': getFields + 'count': count, + 'forms': getForms, + '0': getForms, + 'fields': getFields } actionName = request.matchdict['action'] return dictActionFunc[actionName](request) @@ -273,58 +312,69 @@ def actionOnProtocols(request): # return # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefixProt + '/id', renderer='json', request_method = 'GET',permission = routes_permission[prefixProt]['GET']) -def getProtocol (request): + + +@view_config(route_name=prefixProt + '/id', renderer='json', request_method='GET', permission=routes_permission[prefixProt]['GET']) +def getProtocol(request): session = request.dbsession id = request.matchdict['id'] curProt = session.query(Observation).get(id) curProt.LoadNowValues() - # if Form value exists in request --> return data with schema else return only data - if 'FormName' in request.params : + # if Form value exists in request --> return data with schema else return + # only data + if 'FormName' in request.params: ModuleName = request.params['FormName'] - try : + try: DisplayMode = request.params['DisplayMode'] - except : + except: DisplayMode = 'display' - Conf = session.query(FrontModules).filter(FrontModules.Name=='ObservationForm' ).first() + Conf = session.query(FrontModules).filter( + FrontModules.Name == 'ObservationForm').first() curProt.LoadNowValues() - response = curProt.GetDTOWithSchema(Conf,DisplayMode) - else : - response = curProt.GetFlatObject() + response = curProt.GetDTOWithSchema(Conf, DisplayMode) + else: + response = curProt.GetFlatObject() return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= 'fieldActivity', renderer='json', request_method = 'GET') -def getFieldActivityList (request) : + + +@view_config(route_name='fieldActivity', renderer='json', request_method='GET') +def getFieldActivityList(request): session = request.dbsession - query = select([fieldActivity.ID.label('value'), fieldActivity.Name.label('label')]) + query = select([fieldActivity.ID.label('value'), + fieldActivity.Name.label('label')]) result = session.execute(query).fetchall() res = [] - for row in result : - res.append({'label':row['label'], 'value': row['value']}) - return sorted(res , key = lambda x : x['label']) + for row in result: + res.append({'label': row['label'], 'value': row['value']}) + return sorted(res, key=lambda x: x['label']) # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= 'protocolTypes', renderer='json', request_method = 'GET') -def getListofProtocolTypes (request): + + +@view_config(route_name='protocolTypes', renderer='json', request_method='GET') +def getListofProtocolTypes(request): session = request.dbsession - if 'FieldActivityID' in request.params : + if 'FieldActivityID' in request.params: fieldActivityID = request.params['FieldActivityID'] - join_table = join(ProtocoleType,FieldActivity_ProtocoleType,ProtocoleType.ID == FieldActivity_ProtocoleType.FK_ProtocoleType ) + join_table = join(ProtocoleType, FieldActivity_ProtocoleType, + ProtocoleType.ID == FieldActivity_ProtocoleType.FK_ProtocoleType) query = select([ProtocoleType.ID, ProtocoleType.Name] - ).where(and_(or_(ProtocoleType.Status == 4,ProtocoleType.Status == 8),FieldActivity_ProtocoleType.FK_fieldActivity == fieldActivityID) - ).select_from(join_table) - else : - query = select([ProtocoleType.ID, ProtocoleType.Name]).where(or_(ProtocoleType.Status == 4,ProtocoleType.Status == 8)) + ).where(and_(or_(ProtocoleType.Status == 4, ProtocoleType.Status == 8), FieldActivity_ProtocoleType.FK_fieldActivity == fieldActivityID) + ).select_from(join_table) + else: + query = select([ProtocoleType.ID, ProtocoleType.Name]).where( + or_(ProtocoleType.Status == 4, ProtocoleType.Status == 8)) result = session.execute(query).fetchall() res = [] for row in result: elem = {} elem['ID'] = row['ID'] - elem['Name'] = row['Name'].replace('_',' ') + elem['Name'] = row['Name'].replace('_', ' ') res.append(elem) - res = sorted(res, key=lambda k: k['Name']) + res = sorted(res, key=lambda k: k['Name']) return res diff --git a/Back/ecoreleve_server/Views/sensor.py b/Back/ecoreleve_server/Views/sensor.py index b528bbccd..b34fb7668 100644 --- a/Back/ecoreleve_server/Views/sensor.py +++ b/Back/ecoreleve_server/Views/sensor.py @@ -9,192 +9,246 @@ MonitoredSite, Base, SensorList - ) +) from ..GenericObjets.FrontModules import FrontModules from ..GenericObjets import ListObjectWithDynProp -import json, itertools +import json +import itertools from datetime import datetime import datetime as dt import pandas as pd import numpy as np -from sqlalchemy import select, and_,cast, DATE,func,desc,join, distinct,outerjoin,asc +from sqlalchemy import select, and_, cast, DATE, func, desc, join, distinct, outerjoin, asc from sqlalchemy.orm import aliased from pyramid.security import NO_PERMISSION_REQUIRED from traceback import print_exc from collections import OrderedDict from datetime import datetime import io -from pyramid.response import Response ,FileResponse +from pyramid.response import Response, FileResponse from ..controllers.security import routes_permission from sqlalchemy.exc import IntegrityError - - prefix = 'sensors' # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/action', renderer='json', request_method = 'GET') + + +@view_config(route_name=prefix + '/action', renderer='json', request_method='GET') #@view_config(route_name= prefix+'/id/history/action', renderer='json', request_method = 'GET') def actionOnSensors(request): dictActionFunc = { - 'count' : count_, - 'forms' : getForms, - '0' : getForms, - 'getFields': getFields, - 'getFilters': getFilters, - 'getModels' : getSensorModels, - 'getCompany' : getCompany, - 'getSerialNumber' : getSerialNumber, - 'getType' : getSensorType, - 'getUnicIdentifier' : getUnicIdentifier + 'count': count_, + 'forms': getForms, + '0': getForms, + 'getFields': getFields, + 'getFilters': getFilters, + 'getModels': getSensorModels, + 'getCompany': getCompany, + 'getSerialNumber': getSerialNumber, + 'getType': getSensorType, + 'getUnicIdentifier': getUnicIdentifier } actionName = request.matchdict['action'] return dictActionFunc[actionName](request) -def count_ (request = None,listObj = None): + +def count_(request=None, listObj=None): session = request.dbsession - if request is not None : + if request is not None: data = request.params - if 'criteria' in data: + if 'criteria' in data: data['criteria'] = json.loads(data['criteria']) - if data['criteria'] != {} : - searchInfo['criteria'] = [obj for obj in data['criteria'] if obj['Value'] != str(-1) ] + if data['criteria'] != {}: + searchInfo['criteria'] = [obj for obj in data[ + 'criteria'] if obj['Value'] != str(-1)] listObj = ListObjectWithDynProp(Sensor) - count = listObj.count(searchInfo = searchInfo) - else : + count = listObj.count(searchInfo=searchInfo) + else: count = listObj.count() - return count + return count + -def getFilters (request): +def getFilters(request): ModuleType = 'SensorFilter' filtersList = Sensor().GetFilters(ModuleType) filters = {} - for i in range(len(filtersList)) : + for i in range(len(filtersList)): filters[str(i)] = filtersList[i] return filters -def getForms(request) : + +def getForms(request): session = request.dbsession typeSensor = request.params['ObjectType'] ModuleName = 'SensorForm' - Conf = session.query(FrontModules).filter(FrontModules.Name==ModuleName ).first() - newSensor = Sensor(FK_SensorType = typeSensor) + Conf = session.query(FrontModules).filter( + FrontModules.Name == ModuleName).first() + newSensor = Sensor(FK_SensorType=typeSensor) newSensor.init_on_load() - schema = newSensor.GetDTOWithSchema(Conf,'edit') + schema = newSensor.GetDTOWithSchema(Conf, 'edit') return schema -def getFields(request) : + +def getFields(request): session = request.dbsession ModuleType = request.params['name'] - if ModuleType == 'default' : + if ModuleType == 'default': ModuleType = 'SensorFilter' cols = Sensor().GetGridFields(ModuleType) return cols + def getSensorModels(request): session = request.dbsession sensorType = request.params['sensorType'] - query = select([distinct(Sensor.Model)]).where(Sensor.FK_SensorType == sensorType) - response = getData(query,session) + query = select([distinct(Sensor.Model)]).where( + Sensor.FK_SensorType == sensorType) + response = getData(query, session) return response -def getCompany (request): + +def getCompany(request): session = request.dbsession sensorType = request.params['sensorType'] - query = select([distinct(Sensor.Compagny)]).where(Sensor.FK_SensorType == sensorType) - response = getData(query,session) + query = select([distinct(Sensor.Compagny)]).where( + Sensor.FK_SensorType == sensorType) + response = getData(query, session) return response -def getSerialNumber (request): + +def getSerialNumber(request): session = request.dbsession sensorType = request.params['sensorType'] - query = select([distinct(Sensor.SerialNumber)]).where(Sensor.FK_SensorType == sensorType) - response = getData(query,session) + query = select([distinct(Sensor.SerialNumber)]).where( + Sensor.FK_SensorType == sensorType) + response = getData(query, session) return response -def getUnicIdentifier (request): + +def getUnicIdentifier(request): session = request.dbsession sensorType = request.params['sensorType'] - query = select([Sensor.UnicIdentifier.label('label'),Sensor.ID.label('val')]).where(Sensor.FK_SensorType == sensorType) - response = [ OrderedDict(row) for row in session.execute(query).fetchall()] + query = select([Sensor.UnicIdentifier.label('label'), Sensor.ID.label( + 'val')]).where(Sensor.FK_SensorType == sensorType) + response = [OrderedDict(row) for row in session.execute(query).fetchall()] return response -def getData(query,session): + +def getData(query, session): result = session.execute(query).fetchall() response = [] for row in result: curRow = OrderedDict(row) dictRow = {} - for key in curRow : - if curRow[key] is not None : + for key in curRow: + if curRow[key] is not None: response.append(curRow[key]) return response + def getSensorType(request): session = request.dbsession - query = select([SensorType.ID.label('val'), SensorType.Name.label('label')]) - response = [ OrderedDict(row) for row in session.execute(query).fetchall()] + query = select([SensorType.ID.label('val'), + SensorType.Name.label('label')]) + response = [OrderedDict(row) for row in session.execute(query).fetchall()] return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id', renderer='json', request_method = 'GET') + + +@view_config(route_name=prefix + '/id', renderer='json', request_method='GET') def getSensor(request): session = request.dbsession id = request.matchdict['id'] curSensor = session.query(Sensor).get(id) curSensor.LoadNowValues() - # if Form value exists in request --> return data with schema else return only data - if 'FormName' in request.params : + # if Form value exists in request --> return data with schema else return + # only data + if 'FormName' in request.params: ModuleName = request.params['FormName'] - try : + try: DisplayMode = request.params['DisplayMode'] - except : + except: DisplayMode = 'display' - Conf = session.query(FrontModules).filter(FrontModules.Name=='SensorForm').first() - response = curSensor.GetDTOWithSchema(Conf,DisplayMode) - elif 'geo' in request.params : - geoJson=[] - result = {'type':'FeatureCollection', 'features':geoJson} + Conf = session.query(FrontModules).filter( + FrontModules.Name == 'SensorForm').first() + response = curSensor.GetDTOWithSchema(Conf, DisplayMode) + elif 'geo' in request.params: + geoJson = [] + result = {'type': 'FeatureCollection', 'features': geoJson} response = result - else : - response = curSensor.GetFlatObject() + else: + response = curSensor.GetFlatObject() return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id/history', renderer='json', request_method = 'GET') + +@view_config(route_name=prefix + '/id/history', renderer='json', request_method='GET', permission=routes_permission[prefix]['GET']) def getSensorHistory(request): session = request.dbsession id = request.matchdict['id'] + + tableJoin = join(SensorDynPropValue, SensorDynProp, + SensorDynPropValue.FK_SensorDynProp == SensorDynProp.ID) + query = select([SensorDynPropValue, SensorDynProp.Name]).select_from(tableJoin).where( + SensorDynPropValue.FK_Sensor == id + ).order_by(desc(SensorDynPropValue.StartDate)) + + result = session.execute(query).fetchall() + response = [] + + for row in result: + curRow = OrderedDict(row) + dictRow = {} + for key in curRow: + if curRow[key] is not None: + if 'Value' in key: + dictRow['value'] = curRow[key] + elif 'FK' not in key: + dictRow[key] = curRow[key] + dictRow['StartDate'] = curRow[ + 'StartDate'].strftime('%Y-%m-%d %H:%M:%S') + response.append(dictRow) + + return response + + +@view_config(route_name=prefix + '/id/equipment', renderer='json', request_method='GET') +def getSensorEquipment(request): + session = request.dbsession + id = request.matchdict['id'] curSensor = session.query(Sensor).get(id) curSensorType = curSensor.GetType().Name - if ('RFID' in curSensorType.upper()) : + if ('RFID' in curSensorType.upper()): table = Base.metadata.tables['MonitoredSiteEquipment'] - joinTable = join(table,Sensor, table.c['FK_Sensor'] == Sensor.ID) - joinTable = join(joinTable,MonitoredSite, table.c['FK_MonitoredSite'] == MonitoredSite.ID) - query = select([table.c['StartDate'],table.c['EndDate'],Sensor.UnicIdentifier,MonitoredSite.Name, MonitoredSite.ID.label('MonitoredSiteID')]).select_from(joinTable - ).where(table.c['FK_Sensor'] == id - ).order_by(desc(table.c['StartDate'])) - - elif (curSensorType.lower() in ['gsm','satellite','vhf']): + joinTable = join(table, Sensor, table.c['FK_Sensor'] == Sensor.ID) + joinTable = join(joinTable, MonitoredSite, table.c[ + 'FK_MonitoredSite'] == MonitoredSite.ID) + query = select([table.c['StartDate'], table.c['EndDate'], Sensor.UnicIdentifier, MonitoredSite.Name, MonitoredSite.ID.label('MonitoredSiteID')]).select_from(joinTable + ).where(table.c['FK_Sensor'] == id + ).order_by(desc(table.c['StartDate'])) + + elif (curSensorType.lower() in ['gsm', 'satellite', 'vhf']): table = Base.metadata.tables['IndividualEquipment'] - joinTable = join(table,Sensor, table.c['FK_Sensor'] == Sensor.ID) - query = select([table.c['StartDate'],table.c['EndDate'],table.c['FK_Individual'],Sensor.UnicIdentifier]).select_from(joinTable - ).where(table.c['FK_Sensor'] == id - ).order_by(desc(table.c['StartDate'])) - else : + joinTable = join(table, Sensor, table.c['FK_Sensor'] == Sensor.ID) + query = select([table.c['StartDate'], table.c['EndDate'], table.c['FK_Individual'], Sensor.UnicIdentifier]).select_from(joinTable + ).where(table.c['FK_Sensor'] == id + ).order_by(desc(table.c['StartDate'])) + else: return 'bad request' result = session.execute(query).fetchall() @@ -202,14 +256,17 @@ def getSensorHistory(request): for row in result: curRow = OrderedDict(row) curRow['StartDate'] = curRow['StartDate'].strftime('%Y-%m-%d %H:%M:%S') - curRow['EndDate'] = curRow['EndDate'].strftime('%Y-%m-%d %H:%M:%S') if curRow['EndDate'] is not None else None + curRow['EndDate'] = curRow['EndDate'].strftime( + '%Y-%m-%d %H:%M:%S') if curRow['EndDate'] is not None else None curRow['format'] = 'YYYY-MM-DD HH:mm:ss' response.append(curRow) return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id', renderer='json', request_method = 'DELETE',permission = routes_permission[prefix]['DELETE']) + + +@view_config(route_name=prefix + '/id', renderer='json', request_method='DELETE', permission=routes_permission[prefix]['DELETE']) def deleteSensor(request): session = request.dbsession id_ = request.matchdict['id'] @@ -219,7 +276,9 @@ def deleteSensor(request): return True # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix+'/id', renderer='json', request_method = 'PUT',permission = routes_permission[prefix]['PUT']) + + +@view_config(route_name=prefix + '/id', renderer='json', request_method='PUT', permission=routes_permission[prefix]['PUT']) def updateSensor(request): session = request.dbsession data = request.json_body @@ -231,27 +290,33 @@ def updateSensor(request): return {} # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix + '/insert', renderer='json', request_method = 'POST',permission = routes_permission[prefix]['POST']) + + +@view_config(route_name=prefix + '/insert', renderer='json', request_method='POST', permission=routes_permission[prefix]['POST']) def insertSensor(request): data = request.json_body - if not isinstance(data,list): + if not isinstance(data, list): return insertOneNewSensor(request) - else : + else: print('_______INsert LIST') - #transaction.commit() - #return insertListNewSensord(request) + # transaction.commit() + # return insertListNewSensord(request) # ------------------------------------------------------------------------------------------------------------------------- # -def insertOneNewSensor (request) : + + +def insertOneNewSensor(request): session = request.dbsession data = {} - for items , value in request.json_body.items() : + for items, value in request.json_body.items(): data[items] = value try: sensorType = int(data['FK_SensorType']) - newSensor = Sensor(FK_SensorType = sensorType , creationDate = datetime.now()) - newSensor.SensorType = session.query(SensorType).filter(SensorType.ID== sensorType).first() + newSensor = Sensor(FK_SensorType=sensorType, + creationDate=datetime.now()) + newSensor.SensorType = session.query(SensorType).filter( + SensorType.ID == sensorType).first() newSensor.init_on_load() newSensor.UpdateFromJson(data) @@ -269,53 +334,61 @@ def insertOneNewSensor (request) : return response # ------------------------------------------------------------------------------------------------------------------------- # -@view_config(route_name= prefix, renderer='json', request_method = 'GET') + + +@view_config(route_name=prefix, renderer='json', request_method='GET') def searchSensor(request): session = request.dbsession data = request.params.mixed() searchInfo = {} searchInfo['criteria'] = [] - if 'criteria' in data: + if 'criteria' in data: data['criteria'] = json.loads(data['criteria']) - if data['criteria'] != {} : - searchInfo['criteria'] = [obj for obj in data['criteria'] if obj['Value'] != str(-1) ] + if data['criteria'] != {}: + searchInfo['criteria'] = [obj for obj in data[ + 'criteria'] if obj['Value'] != str(-1)] searchInfo['order_by'] = json.loads(data['order_by']) searchInfo['offset'] = json.loads(data['offset']) searchInfo['per_page'] = json.loads(data['per_page']) ModuleType = 'SensorFilter' - moduleFront = session.query(FrontModules).filter(FrontModules.Name == ModuleType).one() + moduleFront = session.query(FrontModules).filter( + FrontModules.Name == ModuleType).one() listObj = SensorList(moduleFront) dataResult = listObj.GetFlatDataList(searchInfo) countResult = listObj.count(searchInfo) - result = [{'total_entries':countResult}] + result = [{'total_entries': countResult}] result.append(dataResult) return result + @view_config(route_name=prefix + '/export', renderer='json', request_method='GET') def sensors_export(request): session = request.dbsession data = request.params.mixed() searchInfo = {} searchInfo['criteria'] = [] - if 'criteria' in data: + if 'criteria' in data: data['criteria'] = json.loads(data['criteria']) - if data['criteria'] != {} : - searchInfo['criteria'] = [obj for obj in data['criteria'] if obj['Value'] != str(-1) ] + if data['criteria'] != {}: + searchInfo['criteria'] = [obj for obj in data[ + 'criteria'] if obj['Value'] != str(-1)] searchInfo['order_by'] = [] ModuleType = 'SensorFilter' - moduleFront = session.query(FrontModules).filter(FrontModules.Name == ModuleType).one() + moduleFront = session.query(FrontModules).filter( + FrontModules.Name == ModuleType).one() listObj = SensorList(moduleFront) dataResult = listObj.GetFlatDataList(searchInfo) - df = pd.DataFrame.from_records(dataResult, columns=dataResult[0].keys(), coerce_float=True) + df = pd.DataFrame.from_records(dataResult, columns=dataResult[ + 0].keys(), coerce_float=True) fout = io.BytesIO() writer = pd.ExcelWriter(fout) @@ -324,9 +397,4 @@ def sensors_export(request): file = fout.getvalue() dt = datetime.now().strftime('%d-%m-%Y') - return Response(file,content_disposition= "attachment; filename=sensor_export_"+dt+".xlsx",content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') - - - - - + return Response(file, content_disposition="attachment; filename=sensor_export_" + dt + ".xlsx", content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') diff --git a/Back/ecoreleve_server/Views/user.py b/Back/ecoreleve_server/Views/user.py index e891173de..964cc42b7 100644 --- a/Back/ecoreleve_server/Views/user.py +++ b/Back/ecoreleve_server/Views/user.py @@ -45,7 +45,10 @@ def current_user(request): query = select([ User.id.label('PK_id'), - User.Login.label('fullname') + User.Login.label('fullname'), + User.Firstname.label('Firstname'), + User.Language.label('Language'), + User.Lastname.label('Lastname') ]).where(User.id == request.authenticated_userid['iss']) response = dict(session.execute(query).fetchone()) response['role'] = currentUserRole diff --git a/Front/app/app.js b/Front/app/app.js index 500963cc1..d33a258b8 100644 --- a/Front/app/app.js +++ b/Front/app/app.js @@ -1,4 +1,6 @@ + define(['marionette', 'lyt-rootview', 'router', 'controller','sweetAlert','config', + //circular dependencies, I don't konw where to put it 4 the moment 'ns_modules/ns_bbfe/bbfe-number', 'ns_modules/ns_bbfe/bbfe-timePicker', @@ -18,11 +20,12 @@ define(['marionette', 'lyt-rootview', 'router', 'controller','sweetAlert','confi 'ns_modules/ns_cell/bg-timestampCell', 'ns_modules/ns_cell/autocompCell', 'ns_modules/ns_cell/bg-integerCell', + 'i18n' ], -function( Marionette, LytRootView, Router, Controller,Swal,config) { +function( Marionette, LytRootView, Router, Controller,Swal,config) { var app = {}; var JST = window.JST = window.JST || {}; @@ -66,13 +69,13 @@ function( Marionette, LytRootView, Router, Controller,Swal,config) { $.xhrPool.allowAbort = false; $.xhrPool.abortAll = function() { // our abort function if ($.xhrPool.allowAbort){ - $(this).each(function(idx, jqXHR) { + $(this).each(function(idx, jqXHR) { jqXHR.abort(); }); - $.xhrPool.length = 0 + $.xhrPool.length = 0; } }; - + // $.ajaxSetup({ beforeSend: function(jqXHR) { // before jQuery send the request we will push it to our array $.xhrPool.push(jqXHR); @@ -95,7 +98,7 @@ function( Marionette, LytRootView, Router, Controller,Swal,config) { confirmButtonText: 'OK', closeOnConfirm: true, }); - } + }; $(document).ajaxError(function( event, jqxhr, settings, thrownError ) { if (jqxhr.status == 401){ @@ -105,17 +108,29 @@ function( Marionette, LytRootView, Router, Controller,Swal,config) { window.formChange = false; window.formEdition = false; + // get not allowed urls in config.js + window.notAllowedUrl = []; + if (config.disabledFunc){ + var disabled = config.disabledFunc ; + for (var i=0; i< disabled.length;i++){ + window.notAllowedUrl.push(disabled[i]); + } + } + window.checkExitForm = function(confirmCallback,cancelCallback) { if(window.formChange && window.formEdition){ + var title = i18n.translate('swal.savingForm-title'); + var savingFormContent = i18n.translate('swal.savingForm-content'); + var cancelMsg = i18n.translate('button.cancel'); Swal({ - title: 'Saving form', - text: 'Current form is not yet saved. Would you like to continue without saving it?', + title: title, + text: savingFormContent, type: 'warning', showCancelButton: true, confirmButtonColor: 'rgb(221, 107, 85)', confirmButtonText: 'OK', cancelButtonColor: 'grey', - cancelButtonText: 'Cancel', + cancelButtonText: cancelMsg, closeOnConfirm: true, }, function(isConfirm) { @@ -150,7 +165,7 @@ function( Marionette, LytRootView, Router, Controller,Swal,config) { lineNumber:lineNumber, column:column } }); - } + }; window.app = app; return app; diff --git a/Front/app/base/header/lyt-breadcrumb.js b/Front/app/base/header/lyt-breadcrumb.js index 6af02d08f..c57f793b4 100644 --- a/Front/app/base/header/lyt-breadcrumb.js +++ b/Front/app/base/header/lyt-breadcrumb.js @@ -1,4 +1,4 @@ -define(['marionette', 'config'], +define(['marionette', 'config','i18n'], function(Marionette, config) { 'use strict'; return Marionette.LayoutView.extend({ @@ -19,7 +19,15 @@ function(Marionette, config) { }, onShow: function() { - + this.$el.i18n(); + var disabled = config.disabledFunc ; + if (!disabled){ + return ; + } + for (var i=0; i< disabled.length;i++){ + var functionnality = disabled[i]; + $("." + functionnality).addClass('disabled'); + } }, }); }); diff --git a/Front/app/base/header/lyt-header.js b/Front/app/base/header/lyt-header.js index c6ff24639..8ac7760dd 100644 --- a/Front/app/base/header/lyt-header.js +++ b/Front/app/base/header/lyt-header.js @@ -6,14 +6,14 @@ function($,Marionette, config, Breadcrumb) { template: 'app/base/header/tpl-header.html', className: 'header', events: { - 'click #logout': 'logout', + 'click #logout': 'logout' }, regions: { 'breadcrumb': '#breadcrumb' }, ui: { - 'userName': '#userName' + 'userName': '#userName', }, logout: function() { @@ -26,17 +26,46 @@ function($,Marionette, config, Breadcrumb) { }, onShow: function() { + // activate pipefy if it is demo instance var _this = this; + var isDomoInstance = config.instance ; + if(isDomoInstance == 'demo') { + $('.pipefy-support').removeClass('hidden'); + if(window.app.logged) { + this.getUser(); + } else { + var func_rep = window.setInterval(function(){ + if(window.app.logged){ + _this.getUser(); + window.clearInterval(func_rep); + } + }, 50); + } + this.$el.i18n(); + } + else { + window.app.user = new Backbone.Model(); + window.app.user.url = config.coreUrl + 'currentUser'; + window.app.user.fetch({ + success: function(data) { + $('body').addClass(window.app.user.get('role')); + $.xhrPool.allowAbort = true; + _this.ui.userName.html(window.app.user.get('fullname')); + } + }); + } this.breadcrumb.show(new Breadcrumb()); - window.app.user = new Backbone.Model(); - window.app.user.url = config.coreUrl + 'currentUser'; - window.app.user.fetch({ - success: function(data) { - $('body').addClass(window.app.user.get('role')); - $.xhrPool.allowAbort = true; - _this.ui.userName.html(window.app.user.get('fullname')); + }, + + getUser : function(){ + var _this = this; + var user = new Backbone.Model(); + user.url = config.coreUrl + 'currentUser'; + user.fetch({ + success: function(md) { + _this.ui.userName.html(user.get('Firstname') + ' ' + user.get('Lastname') ); } }); - }, + } }); }); diff --git a/Front/app/base/header/tpl-breadcrumb.html b/Front/app/base/header/tpl-breadcrumb.html index ec7aca243..e8be30fd8 100644 --- a/Front/app/base/header/tpl-breadcrumb.html +++ b/Front/app/base/header/tpl-breadcrumb.html @@ -8,28 +8,28 @@