---
title: "Inventory Valuation"
author: "Senda Athletics"
date: "`r Sys.Date()`"
output: 
  html_notebook:
    theme: flatly
    highlight: tango
---


```{r, echo=FALSE, warning=FALSE, message=FALSE}
rm(list = ls())

library(DT)
processing_date <- '202601'

# run de data process
source("stock_val_v2.R")

report_date <- floor_date(max(df$date),'month')


#
IT_detail$date <- report_date
OO_detail$date <- report_date
CH_detail$date <- report_date


# USA Stock
USA <- df_final %>%
  filter(year(date)==max(year(date),na.rm = T)) %>%
  group_by(Class="USA",date = floor_date(date,'month'),year=year(date),month=month(date),Category) %>%
  summarise(
    stock = sum(stock_final),
    monthly_valuation_1 = sum(stock_val_land, na.rm = TRUE),
    avg_val = weighted.mean(landed_cost,stock_final, na.rm = TRUE))

# USA_details <- df_final %>%
#   filter(year(date)==max(year(date),na.rm = T)) %>%
#   group_by(Class="USA",date = floor_date(date,'month'),year=year(date),month=month(date),Category,sku,Name,Color,Size) %>%
#   summarise(
#     stock = sum(stock_final),
#     monthly_valuation_1 = sum(stock_val_land, na.rm = TRUE),
#     avg_val = weighted.mean(landed_cost,stock_final, na.rm = TRUE))

# In Transit Stock - valuated at FOB
in_transit <- IT_detail %>%
  group_by(Class="In Transit",date = floor_date(date,'month'),year=year(date),month=month(date),Category) %>%
  summarise(
    stock = sum(qty_ship),
    monthly_valuation_1 = sum(val_fob, na.rm = TRUE),
    avg_val = weighted.mean(fob,qty_ship, na.rm = TRUE))

# Open Order Stock - valuated at FOB
OO_detail$fob <- case_when(str_detect(OO_detail$SKU,'SFT9100') ~ 28.26+1.2,
                           str_detect(OO_detail$SKU,'SFT9200') ~ 28.67+1.2,
                           TRUE ~ OO_detail$fob
                           )

OO_detail$val_fob <- case_when(str_detect(OO_detail$SKU,'SFT9100') ~ OO_detail$fob*OO_detail$quantity_ordered,
                           str_detect(OO_detail$SKU,'SFT9200') ~ OO_detail$fob*OO_detail$quantity_ordered,
                           TRUE ~ OO_detail$val_fob
                           )

OO_detail$fob[OO_detail$SKU=='SFT1025-5OR'] <- 24
OO_detail$val_fob[OO_detail$SKU=='SFT1025-5OR'] <- OO_detail$quantity_ordered[OO_detail$SKU=='SFT1025-5OR']*OO_detail$fob[OO_detail$SKU=='SFT1025-5OR']
 
open_order <- OO_detail %>%
  group_by(Class="Open Orders",date = floor_date(date,'month'),year=year(date),month=month(date),Category) %>%
  summarise(
    stock = sum(quantity_ordered),
    monthly_valuation_1 = sum(val_fob, na.rm = TRUE),
    avg_val = weighted.mean(fob,quantity_ordered, na.rm = TRUE)
    )

# China Stock
CNY <- CH_detail %>%
  group_by(Class="China",date = floor_date(date,'month'),year=year(date),month=month(date),Category) %>%
  summarise(
    stock = sum(Stock),
    monthly_valuation_1 = sum(val_fob, na.rm = TRUE),
    avg_val = weighted.mean(fob,Stock, na.rm = TRUE)
    )


df_total <- bind_rows(USA %>% filter(date==report_date),in_transit,CNY,open_order)

in_transit_current <- in_transit %>% filter(date == report_date)
USA_current <- USA %>% filter(date == report_date)

```

## Results {.tabset}

### Total

```{r, echo=FALSE, warning=FALSE, message=FALSE}

df_total_sum <- bind_rows(
  df_total %>%
    group_by(date,Class) %>%
    summarise(total_stock = sum(stock),
              total_value = sum(monthly_valuation_1)),
  df_total %>%
    group_by(date) %>%
    summarise(total_stock = sum(stock),
              total_value = sum(monthly_valuation_1)) 
)

df_total_sum$Class <- ifelse(is.na(df_total_sum$Class),"Total",df_total_sum$Class)

datatable(
 df_total_sum,
  rownames = F,
  extensions = 'Buttons',
  colnames = c("Date","Category","Stock","Valuation"),
  options = list(
    dom = 'Bt',
    buttons = c('excel'),
    autoWidth = TRUE)
) %>%
  #formatStyle(c("date","dategory","total_stock","total_value"),fontWeight = 'bold') %>%
  formatRound('total_stock',digits = 0) %>%
  formatCurrency('total_value',digits = 2)

```


### USA

```{r, echo=FALSE, warning=FALSE, message=FALSE}

datatable(
 USA_current %>% select(-date),
  rownames = F,
  colnames = c("Date","Category","Year","Item","Month","Stock","Valuation (LC)",'Avg Landed Cost'),
  options = list(
    dom = 't',
    autoWidth = TRUE)
) %>%
  formatRound('stock',digits = 0) %>%
  formatCurrency(c('monthly_valuation_1','avg_val'),digits = 2)

```


### In Transit

```{r, echo=FALSE, warning=FALSE, message=FALSE}

datatable(
 in_transit %>% select(-date),
  rownames = F,
  colnames = c("Date","Category","Year","Item","Month","Stock","Valuation (FOB)",'Avg FOB'),
  options = list(
    dom = 't',
    autoWidth = TRUE)
) %>%
  formatRound('stock',digits = 0) %>%
  formatCurrency(c('monthly_valuation_1','avg_val'),digits = 2)

```


### Open Orders

```{r, echo=FALSE, warning=FALSE, message=FALSE}

datatable(
 open_order %>% select(-date),
  rownames = F,
  colnames = c("Date","Category","Year","Item","Month","Stock","Valuation (FOB)",'Avg fob'),
  options = list(
    dom = 't',
    autoWidth = TRUE)
) %>%
  formatRound('stock',digits = 0) %>%
  formatCurrency(c('monthly_valuation_1','avg_val'),digits = 2)
```


### China

```{r, echo=FALSE, warning=FALSE, message=FALSE}

datatable(
 CNY %>% select(-date),
  rownames = F,
  colnames = c("Date","Category","Year","Item","Month","Stock","Valuation (FOB)",'Avg FOB'),
  options = list(
    dom = 't',
    autoWidth = TRUE)
) %>%
  formatRound('stock',digits = 0) %>%
  formatCurrency(c('monthly_valuation_1','avg_val'),digits = 2)
```




```{r, echo=FALSE, warning=FALSE, message=FALSE}


# 
# # In Transit
# df_transit_final %>%
#   group_by(month=month(date,label=T),Category) %>%
#   summarise(
#     stock = sum(qty_ship),
#     monthly_valuation_fob  = sum(stock_val_fob, na.rm = TRUE),
#     monthly_valuation_land = sum(stock_val_land, na.rm = TRUE))#,
#     #monthly_valuation_full = sum(stock_val_full, na.rm = TRUE))
# 
# 
# # Open Orders
# df_oo %>%
#   group_by(month=month(date,label=T),Category) %>%
#   summarise(
#     stock = sum(Balance),
#     monthly_valuation_fob  = sum(stock_val_fob, na.rm = TRUE))
# 
# # Warehouse China
# df_cny %>%
#   group_by(month=month(date,label=T),Category) %>%
#   summarise(
#     stock = sum(Stock),
#     monthly_valuation_fob  = sum(stock_val_fob, na.rm = TRUE))

```