import { datefrom } from "./date.ts"; export interface Plan { name: string; times: number; price: number; start: number; amount: number; period: number; nextonce: boolean; role: string; next: Partial[]; } export const dplan: Plan = { name: "新策划", times: 1, price: 0, start: 0, amount: 1, period: 0, nextonce: false, role: "", next: [], }; export interface IPlan { date: number; plan: Plan; order: number; cost: number; current: number; } export function bplan(...plan: Partial[]): Plan { const p = { ...dplan }; for (const p1 of plan) { Object.assign(p, p1); } return p; } export function addplan(cal: Record, p: Plan): number[] { const e: number[] = []; let d = p.start; for (let i = 0; i < p.times; i++) { if (cal[d] === undefined) cal[d] = []; cal[d].push({ date: d, plan: p, order: i, cost: p.price * p.amount, current: 0, }); if (!p.nextonce || (p.nextonce && i === 0)) for (const n of p.next) { e.push(...addplan(cal, bplan(n, { start: d + (n.start || 0), amount: (p.amount || 1) * (n.amount || 1), }))); } e.push(d); d += p.period; } return e; } export function expandplan(d: number, p: Plan): Plan[] { const l: Plan[] = []; for (let i = 0; i < p.times; ++i) { l.push({ ...p, times: 1, start: d + p.period * i }); } return l; } export const plandbpre: Record> = { r1_order: { name: "采购 R1", start: -30, period: 30, next: [{ name: "收取 R1", price: 12, start: 30, period: 0, role: "r1", }], }, r2_order: { name: "采购 R2", start: -30, period: 30, next: [{ name: "收取 R2", price: 12, start: 30, period: 0, role: "r2", }], }, r3_order: { name: "采购 R3", start: -60, period: 60, next: [{ name: "收取 R3", price: 12, start: 60, period: 0, role: "r3", }], }, r4_order: { name: "采购 R4", start: -60, period: 60, next: [{ name: "收取 R4", price: 12, start: 60, period: 0, role: "r4", }], }, }; export const storage_keys: Record = { // factory: "工厂", // linea: "自动线", // optimizea: "自动线技改", p1: "P1", p2: "P2", p3: "P3", p4: "P4", p5: "P5", r1: "R1", r2: "R2", r3: "R3", r4: "R4", r5: "R5", }; export const plandb: Record> = { ads: { name: "广告费", price: 80, }, loan: { name: "贷款", price: 0, start: 0, role: "loan", }, loanback: { name: "还贷", price: 0, start: 0, role: "-loan", }, strategy_ads: { name: "战略广告", price: 20, start: datefrom(1, 12, 30), period: 360, times: 5, }, iso9000: { name: "ISO9000资质开发", price: 10, times: 2, period: 360, nextonce: true, next: [{ name: "ISO9000资质开发完成", price: 0, start: datefrom(3, 1, 1), }], }, iso14000: { name: "ISO14000资质开发", price: 10, times: 3, period: 360, nextonce: true, next: [{ name: "ISO14000资质开发完成", price: 0, start: datefrom(4, 1, 1), }], }, market_domestic: { name: "国内市场资质开发", price: 10, times: 2, period: 360, nextonce: true, next: [{ name: "国内市场资质开发完成", price: 0, start: datefrom(3, 1, 1), }], }, market_asia: { name: "亚洲市场资质开发", price: 10, times: 3, period: 360, nextonce: true, next: [{ name: "亚洲市场资质开发完成", price: 0, start: datefrom(4, 1, 1), }], }, market_intl: { name: "国际市场资质开发", price: 10, times: 4, period: 360, nextonce: true, next: [{ name: "国际市场资质开发完成", price: 0, start: datefrom(5, 1, 1), }], }, rent_factory: { name: "租用厂房", price: 40, times: 4, period: 360, role: "factory", }, p1_cert: { name: "P1 资质开发", price: 10, period: 30, nextonce: true, next: [{ name: "P1 资质拥有", start: 30, price: 0, period: 0, role: "p1cert", }], }, p2_cert: { name: "P2 资质开发", price: 10, period: 30, times: 2, nextonce: true, next: [{ name: "P2 资质拥有", start: 60, price: 0, period: 0, role: "p2cert", }], }, p4_cert: { name: "P4 资质开发", price: 10, period: 60, times: 4, nextonce: true, next: [{ name: "P4 资质拥有", start: 4*60, price: 0, period: 0, role: "p4cert", }], }, build_line_manual: { name: "建设手工线", price: 50, period: 0, role: "linem", }, build_line_auto: { name: "建设自动线", times: 3, price: 50, period: 30, role: "linea", }, optimize_auto: { name: "自动线技改", times: 1, price: 20, period: 20, role: "optimizea", }, p1_produce: { name: "P1 生产", times: 30, price: 9, period: 0, role: "-r1", next: [plandbpre.r1_order, { name: "收取 P1", times: 1, start: 56, price: 0, period: 0, role: "p1", }], }, p2_produce: { name: "P2 生产", times: 30, price: 9, period: 0, role: "-r2,-r3", next: [plandbpre.r2_order, plandbpre.r3_order, { name: "收取 P2", times: 1, start: 56, price: 0, period: 0, role: "p2", }], }, p4_produce: { name: "P4 生产", times: 30, price: 9, period: 0, role: "-r2,-r3,-r4,-r4", next: [ plandbpre.r2_order, plandbpre.r3_order, bplan(plandbpre.r4_order, { amount: 2 }), { name: "收取 P4", times: 1, start: 56, price: 0, period: 0, role: "p4", }], }, p2_sell: { name: "卖出 P2", price: 0, role: "-p2", next: [{ name: "收到 P2 账款", price: -52, start: 30, }], }, p4_sell: { name: "卖出 P4", price: 0, amount: 1, role: "-p4", next: [{ name: "收到 P4 账款", price: -91, start: 30, }], }, };