

## set keys for merging
matchKey(DT.mainline_group_subtotals_from_rev_summary, DT.mgmtr_summary_manual, kCols.smry)

## CONFIRM: no NAs in gross prior to rbind -- this is important for taking sum(gross) and not mixing NAs with Values
stopifnot(DT.mgmtr_summary_manual[, !is.na(gross)])

# stopifnot(0 == nrow(merge(DT.mgmtr_summary_manual, DT.mainline_group_subtotals_from_rev_summary)))
# merge(DT.mgmtr_summary_manual, DT.mainline_group_subtotals_from_rev_summary, keyby=c(setdiff(kCols.smry, kCols.store)))

## RBIND
temp_DT.rbound <- rbind(DT.mgmtr_summary_manual, DT.mainline_group_subtotals_from_rev_summary, fill=TRUE)
setkeyIfNot(temp_DT.rbound, kCols.smry_nostore, verbose=FALSE)

## CONFIRM: Values add up
.Expected_2 <- (.Expected_Rev_Jan_to_April_2014 - DT.ancillary_from_rev_summary[date >= "2014-01-01" & date <= "2014-04-01", sum(reported_gross)])
stopifnot(equals(temp_DT.rbound[date >= "2014-01-01" & date <= "2014-04-01"][, sumn(reported_gross)], .Expected_2, tol=1.5))

## FIND WHATS MISSING
{
  temp_DT.sums <- temp_DT.rbound[, lapply(.SD, sumn), keyby=kCols.smry_nostore, .SDcols=c("gross", "reported_gross")]
  equals(temp_DT.sums[date >= "2014-01-01" & date <= "2014-04-01", sum(reported_gross)], .Expected_2, tol=1.5)

  ## INVESTIGATE AT SOME FURTHER POINT
  if (any(temp_DT.sums[, 0!=reported_gross & (0==gross)])) {
    temp_DT.zero_gross <- temp_DT.sums[0!=reported_gross & (0==gross)]
    warning ("There are ", nrow(temp_DT.zero_gross), " rows with $0 gross yet non-$0 expected revenue. They appear in the months of ", pasteQand(unique(temp_DT.zero_gross$date)), if (all(temp_DT.zero_gross$music_vs_video == "Music")) paste(" for musicbuckets:", pasteQand(unique(temp_DT.zero_gross$store_musicbucket))))
    rm(temp_DT.zero_gross)
  }

  temp_DT.sums[, rev_in_summary_not_in_GL := reported_gross - gross]

  DT.rev_in_summary_not_in_GL <- temp_DT.sums[(0!=rev_in_summary_not_in_GL)]
  DT.rev_in_summary_not_in_GL[,  gross := NULL]
  DT.rev_in_summary_not_in_GL[,  `:=`(storeid= -1, store_name="zzz_Other_Revenue")]
  setnames(DT.rev_in_summary_not_in_GL, "rev_in_summary_not_in_GL", "gross")

  rm(temp_DT.sums, temp_DT.rbound)
}

# --------------
## OPTION (1) 
matchKey(DT.mgmtr_summary_manual, DT.rev_in_summary_not_in_GL, kCols.smry, organize=TRUE, verbose=FALSE)
DT.mgmtr_summary_manual <- rbind(DT.mgmtr_summary_manual, DT.rev_in_summary_not_in_GL, fill=TRUE) [is.na(gross), gross := rev_in_summary_not_in_GL]

setkeyIfNot(DT.mgmtr_summary_manual, kCols.smry)
stopifnot(equals(.Expected_2, DT.mgmtr_summary_manual[date >= "2014-01-01" & date <= "2014-04-01"][, sum(gross)], tol=1.5))

