163 lines
4.7 KiB
V
163 lines
4.7 KiB
V
module bizmodel
|
|
|
|
import os
|
|
// import freeflowuniverse.herolib.web.docusaurus
|
|
import freeflowuniverse.herolib.core.texttools
|
|
import freeflowuniverse.herolib.core.pathlib
|
|
|
|
pub struct Report {
|
|
pub:
|
|
name string
|
|
title string
|
|
description string
|
|
path string
|
|
sections []ReportSection
|
|
}
|
|
|
|
pub enum ReportSection {
|
|
revenue_model
|
|
cost_structure
|
|
human_resources
|
|
}
|
|
|
|
pub fn (b BizModel) new_report(report Report) !Report {
|
|
name := if report.name != '' { report.name } else { texttools.snake_case(report.title) }
|
|
path := pathlib.get_dir(
|
|
path: os.join_path(os.home_dir(), '/hero/var/bizmodel/reports/${name}')
|
|
create: true
|
|
empty: true
|
|
)!
|
|
|
|
b.write_introduction(path.path)!
|
|
b.write_operational_plan(path.path)!
|
|
b.write_revenue_model(path.path)!
|
|
b.write_cost_structure(path.path)!
|
|
|
|
return Report{
|
|
...report
|
|
name: name
|
|
path: path.path
|
|
}
|
|
// b.export_summary()
|
|
// b.export_business_description()
|
|
// b.export_market_analysis()
|
|
// b.export_business_model()
|
|
// b.export_revenue_model(export)!
|
|
// b.export_cost_structure(export)
|
|
// b.export_operational_plan(export)!
|
|
// b.export_fundraising(export)
|
|
}
|
|
|
|
pub struct Export {
|
|
pub:
|
|
path string
|
|
overwrite bool
|
|
format ExportFormat
|
|
}
|
|
|
|
pub enum ExportFormat {
|
|
docusaurus
|
|
mdbook
|
|
}
|
|
|
|
pub fn (r Report) export(export Export) ! {
|
|
// match export.format {
|
|
// .docusaurus {
|
|
// mut dir := pathlib.get_dir(path: r.path)!
|
|
// dir.copy(dest: '${export.path}/docs', delete: true)!
|
|
// mut factory := docusaurus.new()!
|
|
// mut site := factory.get(
|
|
// name: r.name
|
|
// path: export.path
|
|
// publish_path: export.path
|
|
// init: true
|
|
// config: docusaurus.Configuration{
|
|
// navbar: docusaurus.Navbar{
|
|
// title: 'Business Model'
|
|
// items: [
|
|
// docusaurus.NavbarItem{
|
|
// href: 'https://threefold.info/kristof/'
|
|
// label: 'ThreeFold Technology'
|
|
// position: 'right'
|
|
// },
|
|
// docusaurus.NavbarItem{
|
|
// href: 'https://threefold.io'
|
|
// label: 'Operational Plan'
|
|
// position: 'left'
|
|
// },
|
|
// ]
|
|
// }
|
|
// main: docusaurus.Main{
|
|
// url_home: 'docs/introduction'
|
|
// }
|
|
// } // TODO: is this needed
|
|
// )!
|
|
// site.generate()!
|
|
// }
|
|
// .mdbook {
|
|
// panic('MDBook export not fully implemented')
|
|
// }
|
|
// }
|
|
}
|
|
|
|
pub fn (model BizModel) write_introduction(path string) ! {
|
|
mut index_page := pathlib.get_file(path: '${path}/introduction.md')!
|
|
// mut tmpl_index := $tmpl('templates/index.md')
|
|
index_page.template_write($tmpl('templates/introduction.md'), true)!
|
|
}
|
|
|
|
pub fn (model BizModel) write_operational_plan(path string) ! {
|
|
mut dir := pathlib.get_dir(path: '${path}/operational_plan')!
|
|
mut ops_page := pathlib.get_file(path: '${dir.path}/operational_plan.md')!
|
|
ops_page.write('# Operational Plan')!
|
|
|
|
mut hr_dir := pathlib.get_dir(path: '${dir.path}/human_resources')!
|
|
mut hr_page := pathlib.get_file(path: '${hr_dir.path}/human_resources.md')!
|
|
hr_page.template_write($tmpl('./templates/human_resources.md'), true)!
|
|
|
|
for key, employee in model.employees {
|
|
mut employee_page := pathlib.get_file(
|
|
path: '${hr_dir.path}/${texttools.snake_case(employee.name)}.md'
|
|
)!
|
|
employee_cost_chart := model.sheet.line_chart(
|
|
rowname: 'hr_cost_${employee.name}'
|
|
unit: .million
|
|
)!.mdx()
|
|
employee_page.template_write($tmpl('./templates/employee.md'), true)!
|
|
}
|
|
|
|
mut depts_dir := pathlib.get_dir(path: '${dir.path}/departments')!
|
|
for key, department in model.departments {
|
|
mut dept_page := pathlib.get_file(
|
|
path: '${depts_dir.path}/${texttools.snake_case(department.name)}.md'
|
|
)!
|
|
// dept_cost_chart := model.sheet.line_chart(rowname:'hr_cost_${employee.name}', unit: .million)!.mdx()
|
|
// println(employee_cost_chart)
|
|
dept_page.template_write($tmpl('./templates/department.md'), true)!
|
|
}
|
|
}
|
|
|
|
pub fn (model BizModel) write_revenue_model(path string) ! {
|
|
mut dir := pathlib.get_dir(path: '${path}/revenue_model')!
|
|
mut rm_page := pathlib.get_file(path: '${dir.path}/revenue_model.md')!
|
|
rm_page.write('# Revenue Model')!
|
|
|
|
mut products_dir := pathlib.get_dir(path: '${dir.path}/products')!
|
|
mut products_page := pathlib.get_file(path: '${products_dir.path}/products.md')!
|
|
products_page.template_write('# Products', true)!
|
|
|
|
name1 := 'example'
|
|
for key, product in model.products {
|
|
mut product_page := pathlib.get_file(
|
|
path: '${products_dir.path}/${texttools.snake_case(product.name)}.md'
|
|
)!
|
|
product_page.template_write($tmpl('./templates/product.md'), true)!
|
|
}
|
|
}
|
|
|
|
pub fn (model BizModel) write_cost_structure(path string) ! {
|
|
mut dir := pathlib.get_dir(path: '${path}/cost_structure')!
|
|
mut cs_page := pathlib.get_file(path: '${dir.path}/cost_structure.md')!
|
|
cs_page.write('# Cost Structure')!
|
|
}
|