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.год.Год()) fmt.Printf("* Доход за год: %v р.\n", c.год.Доход()) пр, err := c.год.ПроцентСверх300тр() if err != nil { fmt.Printf("1пр свыше 300тр: ошибка: %v\n", err) return err } fmt.Printf("* 1пр свыше 300тр: %v р.\n", пр) fmt.Printf("\n") 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", k.Номер()) fmt.Printf("* Доход: %v р.\n", k.Доход()) сделано := k.ЦельДостигнута(schet.ЦельОПС) сделано_str := пометкаДляЦели(сделано) fmt.Printf("- [%v] ОПС: %v р.\n", сделано_str, k.ОПС.Сумма()) if !сделано { err := c.распечататьИнструкциюДляОПС(k) if err != nil { return err } } пр, err := k.ПроцентСверх300тр() if err != nil { fmt.Printf("- [ ] 1пр свыше 300тр: ошибка: %v\n", err) return err } сделано_str = пометкаДляЦели(k.ЦельДостигнута(schet.Цель1пр)) fmt.Printf("- [%v] 1пр свыше 300тр: %v р.\n", сделано_str, пр) сделано_str = пометкаДляЦели(k.ЦельДостигнута(schet.ЦельУСН)) fmt.Printf("- [%v] УСН: %v р.\n", сделано_str, k.УСН.Сумма()) fmt.Printf("\n") return nil } func (c *CLI) распечататьИнструкциюДляОПС(k *schet.Квартал) error { кбк, err := c.год.КБК(schet.ЦельОПС) if err != nil { return err } сделать, err := c.год.КогдаСделать(schet.ЦельОПС) if err != nil { return err } дата, err := c.год.СрокУплаты(schet.ЦельОПС) if err != nil { return err } fmt.Printf(` Сделать: %v Пополнить на эту сумму ЕНС и: https://lkip2.nalog.ru/lk#/ens/statement/disposal-enp-regulations или ЛК -> Жизненные ситуации -> Показать все -> Распорядиться переплатой -> Заявление о распоряжении путем зачета в счет исполнения предстоящей обязанности или ЛК -> ЕНС -> Детали -> Заявления -> Заявление о зачете в счет исполнения предстоящей обязанности КБК: %v ОКТМО: %v Год: %v Срок уплаты: %v Сумма: %v р. `, сделать, кбк, c.год.ОКТМО(), c.год.Год(), дата, k.ОПС.Сумма(), ) return nil } func пометкаДляЦели(b bool) string { if b { return "x" } return " " }