forked from CIP-RIU/brapi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathba_studies_observationunits_save.R
67 lines (67 loc) · 2.82 KB
/
ba_studies_observationunits_save.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#' ba_studies_observationunits_save
#'
#' Call to invoke for saving the measurements (observations) collected from field for all the observation units.
#'
#' @param con brapi connection object
#' @param studyDbId character a unique study ID
#' @param unitData data.frame or tibble observation unit data
#' @param observationLevel character plot (default) or plant
#' @param transactionDbId character string
#' @param commit logical TRUE (default)
#'
#' @author Reinhard Simon
#' @references \href{https://github.com/plantbreeding/API/blob/master/Specification/Studies/SaveOrUpdateObservationUnits.md}{github}
#' @example inst/examples/ex-ba_studies_observationunits_save.R
#' @return character a unique sample ID assigned by the server
#' @family phenotyping
#' @export
ba_studies_observationunits_save <- function(con = NULL,
studyDbId = "",
unitData = NULL,
observationLevel = "plot",
transactionDbId = "",
commit = TRUE) {
ba_check(con, FALSE, "samples")
stopifnot(is.character(studyDbId))
stopifnot(is.data.frame(unitData))
stopifnot(nrow(unitData) > 0)
stopifnot(all(!is.null(unitData)))
stopifnot(all(!is.na(unitData)))
stopifnot(is.character(observationLevel))
stopifnot(is.character(transactionDbId))
stopifnot(is.logical(commit))
stopifnot(all(c("observationUnitDbId",
"observationDbId",
"observationVariableId",
"observationVariableName",
"collector",
"observationTimeStamp",
"value") %in% colnames(unitData)))
# convert table to list structure and insert additional parameters
ouids <- unique(unitData$observationUnitDbId)
n <- length(ouids)
obs <- list()
for (i in 1:n) {
recs <- unitData[unitData$observationUnitDbId == ouids[i], -c(1)]
m <- nrow(recs)
obs[[i]] <- list(observationUnitDbId = ouids[i], observations = list())
for (j in 1:m) {
obs[[i]]$observations[[j]] <- as.list(recs[j, ])
}
}
dat <- list(metadata = list(pagination = list(pageSize = 0,
currentPage = 0, totalCount = 0, totalPages = 0),
status = list(),
datafiles = list()),
result = list(transactionDbId = transactionDbId,
commit = tolower(as.character(commit)),
data = obs))
brp <- get_brapi(con = con)
call_samples <- paste0(brp, "studies/", studyDbId,
"/observationunits?observationLevel=",
observationLevel)
try({
brapiPOST(url = call_samples, body = dat, con = con)
return(TRUE)
})
}