From 548b6556269c31c39583e00b239903710315d19c Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Tue, 4 Jul 2023 07:10:46 +0200 Subject: [PATCH 01/21] chore: NEWS and DESCRIPTION development version v0.6.0.9000 --- DESCRIPTION | 4 ++-- NEWS | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index ea2d8eb..21a3c29 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: OKplan Title: Tools to facilitate the Planning of the annual Surveillance Programmes -Version: 0.6.0 -Date: 2023-05-30 +Version: 0.6.0.9000 +Date: 2023-##-## Authors@R: c(person(given = "Petter", family = "Hopp", diff --git a/NEWS b/NEWS index 4d8eae3..f021318 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,26 @@ +OKplan 0.6.0.9000 - (2023-##-##) +---------------------------------------- + +New features: + +- + + +Bug fixes: + +- + + +Other changes: + +- + + +BREAKING CHANGES: + +- + + OKplan 0.6.0 - (2023-05-30) ---------------------------------------- From 20362721c0696ed8ce8a594049998f901b67b86a Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Tue, 4 Jul 2023 07:12:39 +0200 Subject: [PATCH 02/21] chore: included desc as suggested in DESCRIPTION --- DESCRIPTION | 1 + 1 file changed, 1 insertion(+) diff --git a/DESCRIPTION b/DESCRIPTION index 21a3c29..abae7f1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -35,6 +35,7 @@ Imports: OKcheck Suggests: covr, + desc, devtools, testthat, usethis, From 242c0be51255f9a3aa2b428c13d766945a33b126 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Fri, 15 Sep 2023 09:01:00 +0200 Subject: [PATCH 03/21] chore: updated README.Rmd Updated params. Included code for logo. --- README.Rmd | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.Rmd b/README.Rmd index c538662..6060b78 100644 --- a/README.Rmd +++ b/README.Rmd @@ -6,13 +6,19 @@ output: params: NVIpkg: "OKplan" + pkg_path: !r usethis::proj_path() first_copyright_year: "2021" --- ```{r, include = FALSE} NVIpkg <- params$NVIpkg -# NVIpkg <- stringi::stri_extract_last_words(usethis::proj_path()) NVIpkg_inline <- paste0("`", NVIpkg, "`") +pkg_path <- params$pkg_path + +logo_path <- "" +if (file.exists(paste0("./man/figures/", NVIpkg, "_logo.png"))) { + logo_path <- paste0(' ') +} knitr::opts_chunk$set( collapse = TRUE, @@ -20,7 +26,7 @@ knitr::opts_chunk$set( ) ``` -`r paste0(NVIpkg, ": ", desc::desc_get_field(key = "Title"))` +`r paste0(NVIpkg, ": ", desc::desc_get_field(key = "Title"), logo_path)` ================ From 9e8f35922e64bea731b3e06a3957f48532c3a5a5 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Fri, 15 Sep 2023 09:01:28 +0200 Subject: [PATCH 04/21] chore: included OKplan_logo --- man/figures/OKplan_logo.png | Bin 0 -> 33704 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 man/figures/OKplan_logo.png diff --git a/man/figures/OKplan_logo.png b/man/figures/OKplan_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e56ef0b129a667bd81aa6bb129a660f459d8d2 GIT binary patch literal 33704 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

wRm z$T}p{4NCT#ro(z($@3SM>?Fg!UE1zVb9FF|#3x`R@vXJ7{Y%&upTrnR_<)=96fL+L zPVfKQZ(nRlU19h{%Q(OWH719fG?!BJF*rjGx6n8jnP7E{X51r+I$(*V4AU9ohZ2`F zNBAmNsrQ8zpQwpe2L$r3antH#9#`hIS>q$NfP-^x5oD&$ea@E{-$q`R$5OfJF9ZZp zo(k<7>Du{ZG?qOVA-N@fm8Lo5HsGb6D6%GTkq{p zM=^M8O&Mf8a+de+mTtmD1rV~M+dMXyAds|91I@a@T8k}eX}S0pU0PsYf(M0i0OGY$ zRpF{cnuaL?C+_tDepB)yF{aJGm8%OnF?;q!Tni{FudDM47-|XEGSx8i^~Q|3n8lt} zq>aoQ39ZsE>zXW}C8c2Pj){V1*fZ|{?6hWgva$ufkq{ldrjU2t*i!TswRi!wj*0O( zbea-R=L3z2^)ry_I-RY8ZQ6L$;^3;{{(h8>dl z>iuJZ?UM@yVO584Y+DmSo9O#WuI$J!JgbndfM_D=iUYr2^}NK5)DqKar+*XPG`p%$ z-OjVG(}xyL8o$?2m2H&z60I|cG>N3>L;X;h{#X1Y8tK{7{7`%mJc?QQ6g*4{MTJEi z%@nMuslk?yw0`napGAG#7+U~IyZuGYc+_U6(%siI#zaU*7NQ2mw|>>Ugce_`$*ZOI zY*V8%1rlKG61_^B9cY+0K`Bw~5i=pu62fmtDR{~xjuhwbW_>ltA_3|7A(7JgJ%^#v zz1A1ne4almj`yDzsAn%SV!ywd?vxZTXY+({C>j+=qcA)4$xb&MEVrqgmfaZ#FDY9s zXE!9)6PW~vcO;v#{YWm1YHW*>yS#j?mbh1bNN@$d*4dTpkuC7x{YG-{Jceg`;?H?Y zd>LYyCe_+fmGu9jPSHD7?oz_^@E65BnM=)2kVfp_ zt((0E7ePvF*0|%<@L6NWkCvS8J*Fp#OgK};#L(j`yhgg`&bg)w83L6m_vC^s>lA1m znLTr89bXEkQ2ryO{|iTwuU{u%_E6!2twib)`&&LnpbDw-S}Per((68n`E{n!L7@Dm z^5#$8&ox5^g3cM2a|MoMVceb31S>duLhjYtK@~!*6^F3jfxbig5gY&Qv`0f6*4NNk z&O|)K5=Kh5*G`{E`tCkgVVcSIWCNd6Hb#mo{Tvil9#R&qVddt9ZHT`CQ~a0kWL*D3 z2xX+yKkX)cSBg`yzg#4nrduOP?4mdaTxaL51PeS4#TTU5*;~yIomI78EJ;1UaU(yH z&|*!g%%Fv5@sR*=ME(!QdF4?*6j0TX5)XeOp9qB(&@W)SeG3U;h7IySoLeoqjB+O6 z+b5G2cR|-`0hz+lEnkT{y*~FNMRCAoG6gC_+;m`5bgKURpCa+HWg?SU z2o43LfM0+<*_czx-)Nogo#TL*k$cF&?)Ck^M^l6+z;e%HU6x-6)7UmMbF`zt*Ryxl zy(x5E#Rah_7d{#ZZ&Dmz2E*|w85^5pew!lOByOH@Xo)bgrc*Vi38ok)1QvF|(%Bjf zVS*A>SP|RidJ=aV`_=NgC{HK_$L{h0wuXvvsGx5wN|QHX-lwG9avGQd-4qd`Po<3T zfSICJQoSxNPFnNqT6i8yaOQcqi01Qmz{=w&7q<53EoRtNuW#!*d(2u0))G_7T+Ee% zEr5}aJ5DcfwDE49iq`c{x~$<}Xp!+;R@V{YXiC1s9#gOco0}VPEd3$Y-irw|Gxn{J zk(3EYz3%B$xyugrfgV!iZWn2!0sxUDmxb|rW{nNPha=u+-)e%ze4)l7+a`sH z=sTJgtIS1o{^T%DvI|7F}p&ss20R3}4-}mR+SV^E+c>Jq_ZymY`kYcn0 z1!ZmzMy~K(W$*veDgCq+!p}+WSIGmUcJ)~F55OK;{+et^Z_;213}%g;VaHuPYdu2ChBw zI92Gpa@#fX=FvJ{4pAmV;O;`#rc`g`eb8M|aCI(&gg(o~k`<$u)ONz8C=} zM@1(^P{Wqp!Q^1z2HrFLk+0aQwC$d~2tOAlyN>Ht6qwwoPR~VxUrT^Osz?lmZ z;q*-2ylra+RGUN@^DF#FxQZAnA8i2u)0SEUv>uz2FrIc6XD{zD6XOmz5VU}ZD5Iecw1V`VWx?c120N7*q$%lS4Q$VNThw{6H+}4z7c@BaDM^<#s3H8UIZ})WHriM@=>NI6QO(gA? zw3HVXuh)1%{2cHOqYMFklUYGpCc5|)i{TgzraurTdFLyJ*I;-ie>^sq7glA9*M1be z-3B|0XLj6=2^+_#4`UQHlqAFHp%($@aBm8N3XT&UfaWSM%*L2lk%EV$OO)A*vgZAp zh*4uwbeQGl1L68hSHMl&R*Xbif}X_co8}-5v|703@(KYmDy-guj#zZ~bX_fzEqeR? zP#EJt6caVLNBQ(8tR@|jheD5JFIaJ*;lhfJq@Z0Qd+GxNrl%MCLVx!W@(>^&Z_+IT z#-{Q*+*LQB?I$`RTEzYP{u)UM*GBEFB%$;Nx7k2J}N8>|MAk5t}jwovRhp&naIK z&?_UsDSCP0UdeTO_la2}8=Fa%PR6#07?LUn%+8+Aq2aW$LhvCFVslxI;o9qkMFlcz z#3%;R;H^D#0|mxKM;)XcHLo$}FeEY|+2$QKr7H%VxoyG{DIZYZY^76C(AL0XM{pBI zHgJhh_dyG(5PbzK2#1tDoHAYO6L{UxpTFd-F7#tYWJ5fSdn+}VqI;0;({oP#p$f=q z5H1pE`Od1ZU$<%zNdVfjb2pQ;pA?}`2fM$$zJ-$sI^daRHG}Rr{N}T1?X{r_5g(w$ zD*#VWJ1*8oSE+rw#Rlf6pz~xpHYf6@NF>lu3_LzP=BOnBgl(NL7?y^HaC0NO|IZgW zKKY7iUE0`)J~Z|O%?&0m9NkyT={L^7ildv_Cjr=~?$}Kt!>1P|fuh5Jch2YP3-!w` z>#Tq{*ivp+EVa&QaNZxX*X8_=;qKUiWeByc1wB-~P}8dxA57J-tiknt-;xmAUl28> z@=%#D{>79zr6l*#q(Cf{7SQB78-9Rx)@Sac+nxW1_<&!_7#{dKX<%O}X+Z;C!Na{{5c=o%+_;v(zG$J+^dg9D%i}GhVdHLSM1F@;4 z!!MUi<%KyJq{H~|WtQwHw}lE+8CigmfuRzXKLnmFS>WpKhiFhk%$x{*B~V3qRumc* zX#`|A0^LC$Z&E2Yc{Jv9iq$Fk3#aw#+G`=hMer`@q6NI-8ohG#t;^c$3woSJF_T0sJh7?&lu!01CeqArzr* z;P?&r(ZdTVV8k590S%MszsfWBQNGrSQ@iSq`hoQUc1ZZYFaOFmvv-s>%SS6MpUy>T z_udf$YdwK@Ngx_wPyNWidhr&?@MmiIA4*!?WeaXZvt-xFe$5#zA*uBbkBgtB5-}!$ zHuei2o|gv0Oik^R-=!lN`0vX;+LYW} Date: Fri, 15 Sep 2023 09:02:05 +0200 Subject: [PATCH 05/21] chore: created NVI_vignette_style.css from template --- vignettes/NVI_vignette_style.css | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 vignettes/NVI_vignette_style.css diff --git a/vignettes/NVI_vignette_style.css b/vignettes/NVI_vignette_style.css new file mode 100644 index 0000000..d600561 --- /dev/null +++ b/vignettes/NVI_vignette_style.css @@ -0,0 +1,11 @@ +h1, h2, h3, h4 { + color: #1b314f; + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} +body { + color: #1b314f; + font-family: "source-serif-pro", "merriweather", serif; +} +thead { + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} From 772f7eeee88564218a84ad9dd23d38c0d99ce149 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Fri, 15 Sep 2023 09:03:11 +0200 Subject: [PATCH 06/21] chore: updated README from template --- README.md | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index de80641..74c812d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# OKplan: Tools to facilitate the Planning of the annual Surveillance Programmes +# OKplan: Tools to facilitate the Planning of the annual Surveillance Programmes @@ -55,17 +55,34 @@ The `OKplan` package needs to be attached. surveillance programmes. The main focus is tools for generating standardized lists for NFSA. +#### Further documentation + +##### Help + The full list of all available functions and datasets can be accessed by typing help(package = "OKplan") -Please check the NEWS for information on new features, bug fixes and -other changes. +##### Vignettes + +Consult the vignettes for task-oriented help. + + vignette(package = "OKplan") + +Vignettes in package `OKplan`: + +- Contribute to OKplan (html) + +##### NEWS + +Please check the +[NEWS](https://github.com/NorwegianVeterinaryInstitute/OKplan/blob/main/NEWS) +for information on new features, bug fixes and other changes. ## Copyright and license -Copyright (c) 2021 - 2022 Norwegian Veterinary Institute. +Copyright (c) 2021 - 2023 Norwegian Veterinary Institute. Licensed under the BSD\_3\_clause License. See [License](https://github.com/NorwegianVeterinaryInstitute/OKplan/blob/main/LICENSE) for details. From d1f3e571893f019fe979d2c304d304e262685392 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Fri, 15 Sep 2023 09:05:10 +0200 Subject: [PATCH 07/21] chore: updated NEWS with other changes --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index f021318..8058ed8 100644 --- a/NEWS +++ b/NEWS @@ -13,7 +13,7 @@ Bug fixes: Other changes: -- +- Updated help section in README BREAKING CHANGES: From 6b26305e8a737be3b09d1a74303ace922966618f Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Fri, 15 Sep 2023 09:11:20 +0200 Subject: [PATCH 08/21] chore: updated develop.R from template. --- notes/develop.R | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/notes/develop.R b/notes/develop.R index 32ffcf9..9d33ebd 100644 --- a/notes/develop.R +++ b/notes/develop.R @@ -16,12 +16,19 @@ pkg <- stringi::stri_extract_last_words(pkg_path) # CREATE PACKAGE SKELETON ---- -# create_NVIpkg_skeleton(license_keyword = "CC BY 4.0") +# create_NVIpkg_skeleton(license_keyword = "BSD_3_clause") # BSD_3_clause # CC BY 4.0 # INCREASE PACKAGE VERSION IN DESCRIPTION AND NEWS ---- # NVIpackager::increase_NVIpkg_version(pkg = pkg, # pkg_path = pkg_path, -# type = "develop") +# type = "develop", +# document = FALSE) + +# UPDATE LICENSE +# NVIpackager::update_license(pkg = pkg, +# pkg_path = pkg_path, +# copyright_owner = "Norwegian Veterinary Institute") + # DOCUMENTATION AND STYLING ---- # update_logo should be run if a logo has been created (or updated). Thereafter run "document_NVIpkg" with "readme = TRUE". @@ -36,6 +43,8 @@ NVIpackager::document_NVIpkg(pkg = pkg, readme = FALSE, manual = "update", scope = c("spaces", "line_breaks")) +# filename <- "xxxx.R" +# styler::style_file(path = file.path(pkg_path, "R", filename), scope = I(c("spaces"))) # spelling::spell_check_package(vignettes = TRUE, use_wordlist = TRUE) From 37a82196142f7a8408e9e1888a4649e2e3534e33 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Fri, 15 Sep 2023 09:11:46 +0200 Subject: [PATCH 09/21] chore: updated license year in LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 780916a..a527b52 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2020, Norwegian Veterinary Institute +Copyright (c) 2020 - 2023 Norwegian Veterinary Institute All rights reserved. Redistribution and use in source and binary forms, with or without From 0394fe8ecbb81656946b3b87c60d0734eeddec4e Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Mon, 18 Sep 2023 08:21:49 +0200 Subject: [PATCH 10/21] chore: updated .gitignore from GitHub template --- .gitignore | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 6d6372a..191a0a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,41 @@ -.Rproj.user +# History files .Rhistory +.Rapp.history + +# Session Data files .RData + +# User-specific files .Ruserdata -*.Rproj -*.Rcheck + +# Example code in package build process +*-Ex.R + +# Output files from R CMD build +/*.tar.gz + +# Output files from R CMD check +/*.Rcheck/ + +# RStudio files +.Rproj.user/ + +# produced vignettes +vignettes/*.html +vignettes/*.pdf + +# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 +.httr-oauth + +# knitr and R markdown default cache directories +*_cache/ +/cache/ + +# Temporary files created by R markdown +*.utf8.md +*.knit.md + +# R Environment Variables +.Renviron + inst/doc From 8c22844372df1d471e223249db074f9f87998952 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Mon, 18 Sep 2023 08:22:22 +0200 Subject: [PATCH 11/21] chore: included syncronising of OKplan.Rproj --- OKplan.Rproj | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 OKplan.Rproj diff --git a/OKplan.Rproj b/OKplan.Rproj new file mode 100644 index 0000000..21a4da0 --- /dev/null +++ b/OKplan.Rproj @@ -0,0 +1,17 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source From deb0de0b49a794ae9d763d4678e642ea64c71849 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Sat, 7 Oct 2023 15:27:57 +0200 Subject: [PATCH 12/21] refactor: updated adjust_samples_to_budget Included all_of to fix deprecated tidyverse code. --- R/adjust_samples_to_budget.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/adjust_samples_to_budget.R b/R/adjust_samples_to_budget.R index bc15a32..2a8186a 100644 --- a/R/adjust_samples_to_budget.R +++ b/R/adjust_samples_to_budget.R @@ -118,10 +118,10 @@ adjust_samples_to_budget <- function(data, difference <- difference %>% dplyr::mutate(original_order = 1:dplyr::n()) %>% - dplyr::arrange(dplyr::across(c(group, sample_to_adjust))) %>% + dplyr::arrange(dplyr::across(dplyr::all_of(c(group, sample_to_adjust)))) %>% dplyr::group_by(dplyr::across(dplyr::all_of(group))) %>% dplyr::mutate(total_estimated = sum(dplyr::across(dplyr::all_of(sample_to_adjust)), na.rm = TRUE)) %>% - dplyr::mutate(included = dplyr::case_when(dplyr::across(sample_to_adjust) > 0 ~ 1, + dplyr::mutate(included = dplyr::case_when(dplyr::across(dplyr::all_of(sample_to_adjust)) > 0 ~ 1, TRUE ~ 0)) %>% dplyr::mutate(n_units = sum(.data$included, na.rm = TRUE)) %>% dplyr::mutate(difference = .data$total_estimated - as.numeric(.data$budget)) %>% From a03b341ea281fd06ef8dd757157e363d03b71427 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Sat, 7 Oct 2023 15:28:46 +0200 Subject: [PATCH 13/21] fix: corrected argument checking for get_tested_herds --- R/get_tested_herds.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/get_tested_herds.R b/R/get_tested_herds.R index f36f440..d5f475e 100644 --- a/R/get_tested_herds.R +++ b/R/get_tested_herds.R @@ -62,7 +62,7 @@ get_tested_herds <- function(eos_table, checkmate::assert_integerish(year, lower = 1995, upper = (as.numeric(format(Sys.Date(), "%Y"))), any.missing = FALSE, all.missing = FALSE, - len = 1, + min.len = 1, add = checks) checkmate::assert_character(species, min.len = 1, null.ok = TRUE, add = checks) checkmate::assert_character(production, min.len = 1, null.ok = TRUE, add = checks) From f4f76fef53e487b5b3f7198802ebd32b9957a0e3 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Sat, 7 Oct 2023 15:29:22 +0200 Subject: [PATCH 14/21] chore: updated NEWS with fix --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 8058ed8..64bab43 100644 --- a/NEWS +++ b/NEWS @@ -8,7 +8,7 @@ New features: Bug fixes: -- +- the argument `year` in `get_tested_herds` now accepts more than one year as input. Other changes: From 1694eea4e1869f139403868f29342fbf8a946b12 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Sat, 7 Oct 2023 16:03:25 +0200 Subject: [PATCH 15/21] fix: corrected write_ok_selection_list The sum is only calculated if the column ant_prover exists. --- R/write_ok_selection_list.R | 48 +++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/R/write_ok_selection_list.R b/R/write_ok_selection_list.R index 6a18e84..3cf000e 100644 --- a/R/write_ok_selection_list.R +++ b/R/write_ok_selection_list.R @@ -82,15 +82,15 @@ write_ok_selection_list <- function(data, footnote_heights = NULL, dbsource, add_worksheet = FALSE) { - + # PREPARE ARGUMENTS BEFORE ARGUMENT CHECKING ---- # Remove trailing backslash or slash before testing path filepath <- sub("\\\\{1,2}$|/{1,2}$", "", filepath) - + # ARGUMENT CHECKING ---- # Object to store check-results checks <- checkmate::makeAssertCollection() - + # Perform checks # for (i in 1:length(data)) { checkmate::assert_data_frame(data, max.rows = (1048576 - 1), max.cols = 16384, add = checks) @@ -111,14 +111,14 @@ write_ok_selection_list <- function(data, min.len = 3, max.len = 6, comment = "When input as a list, all elements must have the same length", add = checks) - + checkmate::assert_subset(names(column_standards), choices = c("table_db", "colname_db", "colname", "collabel", "colwidth", "colorder"), add = checks) } if (inherits(column_standards, what = "data.frame")) { checkmate::assert_data_frame(column_standards, min.rows = 1, min.cols = 6, add = checks) } - + checkmate::assert_flag(calculate_sum, add = checks) checkmate::assert_string(footnote, min.chars = 1, null.ok = TRUE, add = checks) checkmate::assert_character(dbsource, min.len = 1, add = checks) @@ -128,33 +128,33 @@ write_ok_selection_list <- function(data, add = checks) } checkmate::assert_flag(add_worksheet, add = checks) - + # Report check-results checkmate::reportAssertions(checks) - + # TRANSFORM column_standards FROM list TO data.frame # column_standards = list("colname" = c("mt_region", "mt_avdeling"), # "collabel" = c("MT region", "MT avdeling"), # "colwidth" = c(35, 35)) - + if (inherits(column_standards, what = "list")) { column_standards <- as.data.frame((column_standards)) - + if (!"table_db" %in% colnames(column_standards)) { column_standards$table_db <- dbsource } - + if (!"colname_db" %in% colnames(column_standards)) { column_standards$colname_db <- column_standards$colname } - + if (!"colorder" %in% colnames(column_standards)) { column_standards$colorder <- c(1:dim(column_standards)[1]) } colnames(column_standards)[which(colnames(column_standards) == "collabel")] <- "label_1_no" colnames(column_standards)[which(colnames(column_standards) == "colwidth")] <- "colwidth_Excel" } - + # GENERATE EXCEL WORKBOOK ---- # create or load workbook if (isTRUE(add_worksheet)) { @@ -162,37 +162,39 @@ write_ok_selection_list <- function(data, } else { okwb <- openxlsx::createWorkbook() } - + # STANDARDIZE COLUMNS ---- # column names okdata <- NVIdb::standardize_columns(data, standards = column_standards, dbsource = dbsource, property = "colnames") - + # order columns and keep only designated columns okdata <- NVIdb::standardize_columns(data = okdata, standards = column_standards, dbsource = dbsource, property = "colorder", exclude = TRUE) - + # INCLUDE EXTRA INFORMATION ---- # Append sum if (isTRUE(calculate_sum)) { - okdata <- append_sum_line(data = okdata, column = c("ant_prover"), position = "left") + if ("ant_prover" in colnames(data)) { + okdata <- append_sum_line(data = okdata, column = c("ant_prover"), position = "left") + } } - + # Append date generated okdata <- append_date_generated_line(okdata) - - + + # Append footnote if (!is.null(footnote)) { okdata <- NVIpretty::append_text_line(okdata, text = footnote, empty_rows = 2) } - + # STYLE EXCEL SHEET ---- NVIpretty::add_formatted_worksheet(data = okdata, workbook = okwb, @@ -202,11 +204,11 @@ write_ok_selection_list <- function(data, colwidths = TRUE, standards = column_standards, dbsource = dbsource) - + if (isTRUE(calculate_sum)) { style_sum_line(workbook = okwb, sheet = sheet, data = okdata) } - + if (!is.null(footnote)) { NVIpretty::style_text_line(workbook = okwb, sheet = sheet, data = okdata, text = footnote, @@ -214,7 +216,7 @@ write_ok_selection_list <- function(data, merge_cells = TRUE, heights = footnote_heights) } - + # SAVE EXCEL WORKBOOK ---- openxlsx::saveWorkbook(wb = okwb, file = file.path(filepath, filename), overwrite = TRUE) } From 99b896fb9944c08073811cd834489ec459775546 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Sat, 7 Oct 2023 16:05:51 +0200 Subject: [PATCH 16/21] chore: updated NEWS with fix --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 64bab43..0565fda 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,8 @@ Bug fixes: - the argument `year` in `get_tested_herds` now accepts more than one year as input. +- The sum is only calculated in `write_ok_selection_list` if the column "ant_prover" exists. + Other changes: From 1adad1d385d953dfd146397b7390b678ab046130 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Sat, 7 Oct 2023 22:24:29 +0200 Subject: [PATCH 17/21] fix: corrected write_ok_selection_list The argument column can now be passed to append_sum_line. --- R/write_ok_selection_list.R | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/R/write_ok_selection_list.R b/R/write_ok_selection_list.R index 3cf000e..dcdcc42 100644 --- a/R/write_ok_selection_list.R +++ b/R/write_ok_selection_list.R @@ -81,11 +81,13 @@ write_ok_selection_list <- function(data, footnote = NULL, footnote_heights = NULL, dbsource, - add_worksheet = FALSE) { + add_worksheet = FALSE, + ...) { # PREPARE ARGUMENTS BEFORE ARGUMENT CHECKING ---- # Remove trailing backslash or slash before testing path filepath <- sub("\\\\{1,2}$|/{1,2}$", "", filepath) + dots <- list(...) # ARGUMENT CHECKING ---- # Object to store check-results @@ -179,8 +181,12 @@ write_ok_selection_list <- function(data, # INCLUDE EXTRA INFORMATION ---- # Append sum if (isTRUE(calculate_sum)) { - if ("ant_prover" in colnames(data)) { - okdata <- append_sum_line(data = okdata, column = c("ant_prover"), position = "left") + if ("column" %in% names(dots)) { + column <- dots$column + } else {column <- "ant_prover"} + column <- intersect(column, colnames(data)) + if (length(column) > 0) { + okdata <- append_sum_line(data = okdata, column = column, position = "left") } } From f4fabe122804bba2d7a59b838317626030754c47 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Sat, 7 Oct 2023 22:25:31 +0200 Subject: [PATCH 18/21] doc: updated help for write_ok_selection_list --- R/write_ok_selection_list.R | 45 +++++++++++++++++----------------- man/write_ok_selection_list.Rd | 5 +++- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/R/write_ok_selection_list.R b/R/write_ok_selection_list.R index dcdcc42..f41902b 100644 --- a/R/write_ok_selection_list.R +++ b/R/write_ok_selection_list.R @@ -70,6 +70,7 @@ #' @param add_worksheet [\code{logical(1)}]\cr #' Should a worksheet be added to an existing workbook? Defaults to #' \code{FALSE}. +#' @param \dots Other arguments to be passed to \code{\link{append_sum_line}}. #' @export #' write_ok_selection_list <- function(data, @@ -83,16 +84,16 @@ write_ok_selection_list <- function(data, dbsource, add_worksheet = FALSE, ...) { - + # PREPARE ARGUMENTS BEFORE ARGUMENT CHECKING ---- # Remove trailing backslash or slash before testing path filepath <- sub("\\\\{1,2}$|/{1,2}$", "", filepath) dots <- list(...) - + # ARGUMENT CHECKING ---- # Object to store check-results checks <- checkmate::makeAssertCollection() - + # Perform checks # for (i in 1:length(data)) { checkmate::assert_data_frame(data, max.rows = (1048576 - 1), max.cols = 16384, add = checks) @@ -113,14 +114,14 @@ write_ok_selection_list <- function(data, min.len = 3, max.len = 6, comment = "When input as a list, all elements must have the same length", add = checks) - + checkmate::assert_subset(names(column_standards), choices = c("table_db", "colname_db", "colname", "collabel", "colwidth", "colorder"), add = checks) } if (inherits(column_standards, what = "data.frame")) { checkmate::assert_data_frame(column_standards, min.rows = 1, min.cols = 6, add = checks) } - + checkmate::assert_flag(calculate_sum, add = checks) checkmate::assert_string(footnote, min.chars = 1, null.ok = TRUE, add = checks) checkmate::assert_character(dbsource, min.len = 1, add = checks) @@ -130,33 +131,33 @@ write_ok_selection_list <- function(data, add = checks) } checkmate::assert_flag(add_worksheet, add = checks) - + # Report check-results checkmate::reportAssertions(checks) - + # TRANSFORM column_standards FROM list TO data.frame # column_standards = list("colname" = c("mt_region", "mt_avdeling"), # "collabel" = c("MT region", "MT avdeling"), # "colwidth" = c(35, 35)) - + if (inherits(column_standards, what = "list")) { column_standards <- as.data.frame((column_standards)) - + if (!"table_db" %in% colnames(column_standards)) { column_standards$table_db <- dbsource } - + if (!"colname_db" %in% colnames(column_standards)) { column_standards$colname_db <- column_standards$colname } - + if (!"colorder" %in% colnames(column_standards)) { column_standards$colorder <- c(1:dim(column_standards)[1]) } colnames(column_standards)[which(colnames(column_standards) == "collabel")] <- "label_1_no" colnames(column_standards)[which(colnames(column_standards) == "colwidth")] <- "colwidth_Excel" } - + # GENERATE EXCEL WORKBOOK ---- # create or load workbook if (isTRUE(add_worksheet)) { @@ -164,20 +165,20 @@ write_ok_selection_list <- function(data, } else { okwb <- openxlsx::createWorkbook() } - + # STANDARDIZE COLUMNS ---- # column names okdata <- NVIdb::standardize_columns(data, standards = column_standards, dbsource = dbsource, property = "colnames") - + # order columns and keep only designated columns okdata <- NVIdb::standardize_columns(data = okdata, standards = column_standards, dbsource = dbsource, property = "colorder", exclude = TRUE) - + # INCLUDE EXTRA INFORMATION ---- # Append sum if (isTRUE(calculate_sum)) { @@ -189,18 +190,18 @@ write_ok_selection_list <- function(data, okdata <- append_sum_line(data = okdata, column = column, position = "left") } } - + # Append date generated okdata <- append_date_generated_line(okdata) - - + + # Append footnote if (!is.null(footnote)) { okdata <- NVIpretty::append_text_line(okdata, text = footnote, empty_rows = 2) } - + # STYLE EXCEL SHEET ---- NVIpretty::add_formatted_worksheet(data = okdata, workbook = okwb, @@ -210,11 +211,11 @@ write_ok_selection_list <- function(data, colwidths = TRUE, standards = column_standards, dbsource = dbsource) - + if (isTRUE(calculate_sum)) { style_sum_line(workbook = okwb, sheet = sheet, data = okdata) } - + if (!is.null(footnote)) { NVIpretty::style_text_line(workbook = okwb, sheet = sheet, data = okdata, text = footnote, @@ -222,7 +223,7 @@ write_ok_selection_list <- function(data, merge_cells = TRUE, heights = footnote_heights) } - + # SAVE EXCEL WORKBOOK ---- openxlsx::saveWorkbook(wb = okwb, file = file.path(filepath, filename), overwrite = TRUE) } diff --git a/man/write_ok_selection_list.Rd b/man/write_ok_selection_list.Rd index 6abab1e..29e4a85 100644 --- a/man/write_ok_selection_list.Rd +++ b/man/write_ok_selection_list.Rd @@ -14,7 +14,8 @@ write_ok_selection_list( footnote = NULL, footnote_heights = NULL, dbsource, - add_worksheet = FALSE + add_worksheet = FALSE, + ... ) } \arguments{ @@ -52,6 +53,8 @@ be used for standardising and formatting the sampling plan output.} \item{add_worksheet}{[\code{logical(1)}]\cr Should a worksheet be added to an existing workbook? Defaults to \code{FALSE}.} + +\item{\dots}{Other arguments to be passed to \code{\link{append_sum_line}}.} } \description{ The sampling plan is output to an Excel sheet. The list with From ca8df713e2e4a54d81c7e39407c5ba63f6efaca6 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Sat, 7 Oct 2023 22:27:41 +0200 Subject: [PATCH 19/21] chore: updated NEWS with fix --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 0565fda..3432ecb 100644 --- a/NEWS +++ b/NEWS @@ -10,7 +10,7 @@ Bug fixes: - the argument `year` in `get_tested_herds` now accepts more than one year as input. -- The sum is only calculated in `write_ok_selection_list` if the column "ant_prover" exists. +- The argument column can now be passed to append_sum_line. Other changes: From 78e4536dadb29695d43feb862ffb43df2bd2473b Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Mon, 9 Oct 2023 13:00:38 +0200 Subject: [PATCH 20/21] doc: updated help for write_ok_selection_list Included help for appending sum line. --- R/write_ok_selection_list.R | 7 +++++++ man/write_ok_selection_list.Rd | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/R/write_ok_selection_list.R b/R/write_ok_selection_list.R index f41902b..3d89622 100644 --- a/R/write_ok_selection_list.R +++ b/R/write_ok_selection_list.R @@ -41,6 +41,13 @@ #' #' All vectors must have the same order and the same length. #' +#' When \code{\link{calculate_sum}} is TRUE, a line with the sum will be appended. +#' The default is to calculate the sum of the column "ant_prover". If the sum +#' should be calculated for one or more other columns, you may give thecolumn +#' names as input to the argument \code{column} that will be passed to +#' \code{\link{append_sum_line}}. The sum will only be appended for columns +#' that exist in the data. +#' #' When more than one worksheet should be added to a single workbook, #' use \code{add_worksheet = FALSE} for the first worksheet and #' \code{add_worksheet = TRUE} for the consecutive worksheet(s). diff --git a/man/write_ok_selection_list.Rd b/man/write_ok_selection_list.Rd index 29e4a85..583934e 100644 --- a/man/write_ok_selection_list.Rd +++ b/man/write_ok_selection_list.Rd @@ -100,6 +100,13 @@ The list input to column_standards must follow a specific format. All vectors must have the same order and the same length. +When \code{\link{calculate_sum}} is TRUE, a line with the sum will be appended. + The default is to calculate the sum of the column "ant_prover". If the sum + should be calculated for one or more other columns, you may give thecolumn + names as input to the argument \code{column} that will be passed to + \code{\link{append_sum_line}}. The sum will only be appended for columns + that exist in the data. + When more than one worksheet should be added to a single workbook, use \code{add_worksheet = FALSE} for the first worksheet and \code{add_worksheet = TRUE} for the consecutive worksheet(s). From 751786468dbbd30fb1f2762856e48843b7b17f46 Mon Sep 17 00:00:00 2001 From: Petter Hopp Date: Mon, 9 Oct 2023 13:02:41 +0200 Subject: [PATCH 21/21] chore: NEWS and DESCRIPTION v0.6.1 --- DESCRIPTION | 4 ++-- NEWS | 12 +----------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index abae7f1..1be864c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: OKplan Title: Tools to facilitate the Planning of the annual Surveillance Programmes -Version: 0.6.0.9000 -Date: 2023-##-## +Version: 0.6.1 +Date: 2023-10-09 Authors@R: c(person(given = "Petter", family = "Hopp", diff --git a/NEWS b/NEWS index 3432ecb..e0dc484 100644 --- a/NEWS +++ b/NEWS @@ -1,11 +1,6 @@ -OKplan 0.6.0.9000 - (2023-##-##) +OKplan 0.6.1 - (2023-10-09) ---------------------------------------- -New features: - -- - - Bug fixes: - the argument `year` in `get_tested_herds` now accepts more than one year as input. @@ -18,11 +13,6 @@ Other changes: - Updated help section in README -BREAKING CHANGES: - -- - - OKplan 0.6.0 - (2023-05-30) ----------------------------------------