{ "version": 3, "sources": ["apps/frontend/src/app/reports/components/income-report.component.ts"], "sourcesContent": ["import { Component, Input, OnInit } from '@angular/core';\nimport { Entity } from '@proman/services/entity.service';\nimport { FilterService } from '@proman/services/filter.service';\nimport moment from 'moment';\nimport * as echarts from 'echarts';\nimport { CurrenciesService } from '@proman/services/currencies.service';\nimport { Store } from '@ngrx/store';\nimport { getSystemOptions } from '@proman/store/system-options';\nimport { FlexLayoutModule } from 'ngx-flexible-layout';\nimport { FrontendDirectivesModule } from '../../shared/frontend-directives.module';\nimport { CommonModule } from '@angular/common';\nimport { InputsModule } from '../../inputs/inputs.module';\n\ninterface Datum { year: string, month: string, amount: number }\ninterface Dataset { income: Datum[], invoice: Datum[], purchase: Datum[], salary: Datum[], tax: Datum[] }\n\n@Component({\n selector: 'pm-income-report',\n standalone: true,\n imports: [\n CommonModule,\n FlexLayoutModule,\n FrontendDirectivesModule,\n InputsModule,\n ],\n template: `\n @if (mini) {\n \n } @else {\n
\n
\n
\n
\n \n \n
\n\n
\n
\n
\n
\n }\n \n \n
\n
\n `\n})\n\nexport class IncomeReportComponent implements OnInit {\n @Input() mini: boolean = false;\n dataConfig: { from: string, to: string };\n data: Dataset;\n accountingReportEntity: any;\n dataTypes: string[] = ['income', 'invoice', 'purchase', 'salary', 'tax'];\n defaultDecimal: number;\n timeData: Set;\n\n constructor(\n private Entity: Entity,\n private Filter: FilterService,\n private Currency: CurrenciesService,\n private store: Store,\n ) {\n this.store.select(getSystemOptions).subscribe((value) => this.defaultDecimal = value.defaultDecimalPlaces);\n this.accountingReportEntity = this.Entity.get({ name: 'accounting_report', post: ['incomeReport'] }) as unknown as any;\n this.dataConfig = { from: moment().subtract(1, 'year').format('YYYY-MM'), to: moment().format('YYYY-MM') };\n }\n\n ngOnInit() {\n\n this.loadData();\n }\n\n loadData = () => {\n interface ResponseData {\n year: string,\n month: string,\n sumLocalAmount: string,\n type: string,\n }\n\n this.accountingReportEntity.incomeReport({ from: this.dataConfig.from, to: this.dataConfig.to }).then((response: ResponseData[]) => {\n this.timeData = new Set();\n const data: Dataset = { income: [], invoice: [], purchase: [], salary: [], tax: [] };\n\n response.forEach((datum) => {\n data[datum.type].push({ year: datum.year, month: this.Filter.translate(datum.month), amount: parseFloat(datum.type !== 'invoice' ? `-${datum.sumLocalAmount}` : datum.sumLocalAmount).toFixed(this.defaultDecimal) });\n this.timeData.add(`${datum.year} - ${this.Filter.translate(datum.month)}`);\n })\n\n this.timeData.forEach((set) => {\n const [year, month] = set.split(' - ');\n data.income.push({ year, month, amount: 0 })\n })\n\n Object.entries(data).forEach(([key, value]) => {\n if (key === 'income') return;\n\n value.forEach((item: Datum) => {\n const periodItem = data.income.find((pi) => pi.year == item.year && pi.month == item.month);\n if (periodItem) periodItem.amount += +item.amount;\n })\n })\n\n data.income.forEach(income => income.amount = Number(parseFloat(`${income.amount}`).toFixed(this.defaultDecimal)));\n console.log('data', data);\n console.log('timeData', this.timeData);\n this.data = data;\n\n this.drawChart();\n })\n };\n\n updatePeriod = (property: string, value: string) => {\n this.dataConfig[property] = value;\n\n this.loadData();\n };\n\n drawChart() {\n type EChartsOption = echarts.EChartsOption;\n const translatedTypes = [this.Filter.translate(this.dataTypes[0]), this.Filter.translate(this.dataTypes[1]), this.Filter.translate(this.dataTypes[2]), this.Filter.translate(this.dataTypes[3]), this.Filter.translate(this.dataTypes[4])];\n\n const chartDom = document.getElementById('chart')!;\n const myChart = echarts.init(chartDom);\n const colors = ['#990000', '#3bdb3b', '#93d8cf', '#f78ff2', '#d39f4c'];\n const option: EChartsOption = {\n color: colors,\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'cross'\n }\n },\n legend: {\n data: translatedTypes\n },\n xAxis: [\n {\n type: 'category',\n data: Array.from(this.timeData),\n }\n ],\n yAxis: {\n type: 'value',\n name: this.Filter.translate('value'),\n position: 'right',\n alignTicks: true,\n axisLabel: {\n formatter: '{value} ' + this.Currency.base?.shorthand\n }\n },\n series: [],\n };\n\n option.series = translatedTypes.map((type, index) => ({\n name: type,\n type: index ? 'bar' : 'line',\n stack: index ? 'total' : 'none',\n data: this.data[this.dataTypes[index]].map((datum: Datum) => ({ value: datum.amount })),\n }))\n\n if (this.mini) {\n option.series = {\n name: this.Filter.translate(this.dataTypes[0]),\n type: 'line',\n stack: 'none',\n data: this.data[this.dataTypes[0]].map((datum: Datum) => ({ value: datum.amount })),\n }\n\n option.yAxis = {\n type: 'value',\n position: 'right',\n tooltip: null,\n axisLabel: { show: false },\n splitLine: { show: false },\n };\n\n option.xAxis[0].axisLabel = { show: false };\n option.tooltip = null;\n option.legend = null;\n option.color = colors[1];\n }\n\n option && myChart.setOption(option);\n }\n}\n"], "mappings": "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", "names": ["import_moment", "\u0275\u0275elementContainer", "\u0275\u0275template", "IncomeReportComponent_Conditional_0_ng_container_0_Template", "\u0275\u0275property", "_r3", "\u0275\u0275elementStart", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r6", "ctx_r5", "\u0275\u0275nextContext", "\u0275\u0275resetView", "updatePeriod", "\u0275\u0275elementEnd", "ctx_r7", "\u0275\u0275element", "\u0275\u0275advance", "ctx_r1", "dataConfig", "from", "\u0275\u0275pureFunction0", "_c0", "to", "_c1", "IncomeReportComponent", "constructor", "Entity", "Filter", "Currency", "store", "mini", "dataTypes", "loadData", "accountingReportEntity", "incomeReport", "then", "response", "timeData", "Set", "data", "income", "invoice", "purchase", "salary", "tax", "forEach", "datum", "type", "push", "year", "month", "translate", "amount", "parseFloat", "sumLocalAmount", "toFixed", "defaultDecimal", "add", "set", "split", "Object", "entries", "key", "value", "item", "periodItem", "find", "pi", "Number", "console", "log", "drawChart", "property", "select", "getSystemOptions", "subscribe", "defaultDecimalPlaces", "get", "name", "post", "moment", "subtract", "format", "ngOnInit", "translatedTypes", "chartDom", "document", "getElementById", "myChart", "init", "colors", "option", "color", "tooltip", "trigger", "axisPointer", "legend", "xAxis", "Array", "yAxis", "position", "alignTicks", "axisLabel", "formatter", "base", "shorthand", "series", "map", "index", "stack", "show", "splitLine", "setOption", "\u0275\u0275directiveInject", "FilterService", "CurrenciesService", "Store", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "IncomeReportComponent_Conditional_0_Template", "IncomeReportComponent_Conditional_1_Template", "IncomeReportComponent_ng_template_2_Template", "\u0275\u0275templateRefExtractor", "\u0275\u0275conditional", "CommonModule", "NgTemplateOutlet", "FlexLayoutModule", "DefaultLayoutDirective", "DefaultLayoutAlignDirective", "FrontendDirectivesModule", "PaddingDirective", "InputsModule", "MonthpickerComponent", "encapsulation"] }