diff --git a/cmd/schet/main.go b/cmd/schet/main.go new file mode 100644 index 0000000..16feaf2 --- /dev/null +++ b/cmd/schet/main.go @@ -0,0 +1,16 @@ +package main + +import ( + "my/schet/pkg/output/cli" + "my/schet/pkg/schet" +) + +const ( + Год = 2024 +) + +func main() { + g := schet.NewГод(Год) + output := cli.NewCLI() + g.Вывести(output) +} diff --git a/pkg/output/cli/cli.go b/pkg/output/cli/cli.go new file mode 100644 index 0000000..a7d4e66 --- /dev/null +++ b/pkg/output/cli/cli.go @@ -0,0 +1,86 @@ +package cli + +import ( + "fmt" + "my/schet/pkg/schet" +) + +type CLI struct { + год *schet.Год +} + +func NewCLI() *CLI { + c := &CLI{} + return c +} + +func (c *CLI) Печать(год *schet.Год) error { + c.год = год + fmt.Printf("## Год: %v\n", c.год.Год()) + + err := c.кварталы() + if err != nil { + return err + } + + return nil +} + +func (c *CLI) кварталы() error { + цели := c.год.Цели() + for _, k := range цели.Кварталы { + c.квартал(k) + } + + return nil +} + +func (c *CLI) квартал(k *schet.Квартал) error { + fmt.Printf("### к%v\n\n", k.Номер()) + fmt.Printf("- [ ] ОПС: %v р.\n", k.ОПС.Сумма()) + пр, err := k.ПроцентСверх300тр() + if err != nil { + fmt.Printf("- [ ] 1пр свыше 300тр: ошибка: %v\n", err) + return err + } + fmt.Printf("- [ ] 1пр свыше 300тр: %v р.\n", пр) + fmt.Printf("- [ ] УСН: %v р.\n", k.УСН.Сумма()) + + fmt.Printf("==================================\n\n") + return nil +} + +// func (g *CLI) Квартал(in int) (k *Квартал, e error) { +// return g.цели.Квартал(in) +// } + +// func (g *CLI) ДобавитьДоход(доход float64, i int) error { +// k, err := g.Квартал(i) +// if err != nil { +// return err +// } + +// g.доход += доход + +// return k.ДобавитьДоход(доход) +// } +// func (g *CLI) Доход() float64 { +// return g.доход +// } + +// func (g *CLI) ПроцентСверх300тр() (float64, error) { +// return ПроцентСверх300тр(g.доход), nil +// } + +// func (g *CLI) Сверх300трвКвартале(квартал int) (float64, error) { +// сумматор := NewСумматор300тр() +// for i := НомерПервогоКвартала; i <= квартал; i++ { +// k, err := g.Квартал(i) +// if err != nil { +// return 0, err +// } +// сумматор.ДобавитьКвартал(k.доход) +// } + +// return сумматор.Квартал(квартал) +// } diff --git a/pkg/output/cli/cli_test.go b/pkg/output/cli/cli_test.go new file mode 100644 index 0000000..6ede397 --- /dev/null +++ b/pkg/output/cli/cli_test.go @@ -0,0 +1,31 @@ +package cli + +import ( + . "github.com/onsi/gomega" +) + +type testData struct { +} + +var ( + t *testData +) + +func resetTestData() { + t = &testData{} +} + +func beforeSuite() { +} +func afterSuite() { +} + +func beforeScenario() { + resetTestData() + _ = Ω + +} +func afterScenario() { +} + +// ----------------------- diff --git a/pkg/output/cli/features/app.feature b/pkg/output/cli/features/app.feature new file mode 100644 index 0000000..ce2cdbb --- /dev/null +++ b/pkg/output/cli/features/app.feature @@ -0,0 +1,3 @@ +# Во имя Бога Милостивого, Милосердного!!! +# language: ru +Функциональность: CLI diff --git a/pkg/output/cli/init_test.go b/pkg/output/cli/init_test.go new file mode 100644 index 0000000..d813789 --- /dev/null +++ b/pkg/output/cli/init_test.go @@ -0,0 +1,51 @@ +package cli + +import ( + "context" + "os" + "testing" + + . "my/schet/pkg/testlib" + + "github.com/cucumber/godog" + "github.com/cucumber/godog/colors" + + . "github.com/onsi/gomega" +) + +func InitializeScenario(ctx *godog.ScenarioContext) { + + // ----------------------- + ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) { + beforeScenario() + return ctx, nil + }) + ctx.After(func(ctx context.Context, sc *godog.Scenario, err error) (context.Context, error) { + afterScenario() + return ctx, nil + }) + InitializeGomegaForGodog(ctx) + _ = Ω +} + +func InitializeSuite(tsc *godog.TestSuiteContext) { + tsc.BeforeSuite(beforeSuite) + tsc.AfterSuite(afterSuite) +} + +func TestMain(t *testing.T) { + var opts = godog.Options{ + Output: colors.Colored(os.Stdout), + Strict: true, + StopOnFailure: true, + TestingT: t, + } + + godog.BindCommandLineFlags("godog.", &opts) + godog.TestSuite{ + Name: "app", + TestSuiteInitializer: InitializeSuite, + ScenarioInitializer: InitializeScenario, + Options: &opts, + }.Run() +}