HomeAccounting

Форк
0
397 строк · 12.1 Кб
1

2
import template from './template.html';
3
import {Storage, Broker} from "../../classes/QueueBroker/index";
4

5
export default {
6
    name: "funds-control",
7
    template: template,
8
    props: {
9
        showFundsComponent: {
10
            type: Boolean,
11
            default: true,
12
        },
13
    },
14
    data: () => ({
15
        search: '',
16
        loadingDataTable: false,
17
        filters: true,
18
        pagination: {'sortBy': 'date', 'descending': true, 'rowsPerPage': -1},
19
        headers: [
20
            {
21
                text: 'ID',
22
                align: 'left',
23
                sortable: false,
24
                value: 'id'
25
            },
26
            { text: 'Счет', value: 'bills_name', align: 'right' },
27
            { text: 'Доход или расход', value: 'rev', align: 'right' },
28
            { text: 'Категория', value: 'category_name', align: 'right' },
29
            { text: 'Сумма', value: 'sum', align: 'right' },
30
            { text: 'Причина', value: 'cause', align: 'right' },
31
            { text: 'Дата', value: 'date', align: 'right'},
32
            { text: 'Управление', value: '', align: 'right'},
33
        ],
34
        dataTables: [],
35

36
        fundsFormShow: false,
37
        fundsFormTitle: 'Форма редактирования',
38
        DatePicker: false,
39

40
        DatePickerFilterStart: false,
41
        DatePickerFilterEnd: false,
42

43
        fundsFormType: 'create',
44

45
        fundsAllData: {
46
            current_page: 0,
47
            total: 0,
48
            last_page: 0,
49

50
        },
51
        totalValue: 0,
52
        fundsFormData: {
53
            funds_id: 0,
54
            bills_id: 0,
55
            rev: 0,
56
            category_id: 0,
57
            sum: 0,
58
            cause: '',
59
            date: '',
60
            sumRules: [
61
                v => !!v || 'Сумма обязательна к заполнению',
62
                v => /^\d+[\,]?\d*$/.test(v) || 'Сумма должна быть числом вида (100 или 100,25)'
63
            ],
64
            billsRules: [
65
                v => !!v || 'Счет обязателен к заполнению',
66
                v => /^\d+$/.test(v) || 'неверный идентификатор'
67
            ],
68
            revRules: [
69
                v => !!v || 'Доход или Расход должен быть выбран',
70
                v => /^\d+$/.test(v) || 'неверный идентификатор'
71
            ],
72
            categoryRules: [
73
                v => !!v || 'Категория должена быть выбрана',
74
                v => /^\d+$/.test(v) || 'неверный идентификатор'
75
            ],
76
            dateRules: [
77
                v => !!v || 'Поле даты должно быть заполнено',
78
            ],
79
            causeRules: [
80
                v => !!v || 'Поле причины должно быть заполнено',
81
            ],
82
        },
83
        billDisabled: false,
84

85

86
        fundsFilterForm: {
87
            rev: 2,
88
            bills_id: 0,
89
            category_id: 0,
90
            date_start: '',
91
            date_end: '',
92
            sum: null,
93
            paginate: 20,
94
            page: 1,
95
        },
96

97
        billsList: [
98
            {
99
                id: 0,
100
                name: 'test',
101
            }
102
        ],
103

104
        revList: [
105
            {
106
                value: 1,
107
                name: 'Доход',
108
            },
109
            {
110
                value: 2,
111
                name: 'Расход',
112
            },
113
        ],
114

115
        categoryList: [
116
            {
117
                id: 1,
118
                name: 'Тестовая',
119
            },
120
        ],
121

122
    }),
123
    methods: {
124
        getFunds() {
125
            this.$store.commit('setPreloader', true);
126

127
            let data = this.fundsFilterForm;
128

129
            if(data.page == '') {
130
                data.page = 1;
131
            }
132

133
            axios.get('/pa/funds-list', {params: data})
134
                .then(response=> {
135
                    this.fundsAllData = response.data.paginate;
136
                    this.dataTables = response.data.paginate.data;
137
                    this.totalValue = response.data.totalSum;
138

139
                    for(let key in this.dataTables) {
140
                        this.dataTables[key].date = this.dateFormat(this.dataTables[key].date)
141
                    }
142
                    this.$store.commit('setPreloader', false);
143
                })
144
                .catch(error => {
145
                    this.$store.commit('AlertError', error.message);
146
                });
147

148
        },
149
        getBills() {
150
            axios.get('/pa/bills-list')
151
                .then(response=> {
152

153
                    this.billsList = new Array();
154

155
                    for (let key in response.data) {
156
                        this.billsList.push({
157
                            id: response.data[key]['id'],
158
                            name: response.data[key]['name'],
159
                        })
160
                    }
161
                })
162
                .catch(error => {
163
                    this.$store.commit('AlertError', error.message);
164
                });
165

166
        },
167
        getCategories() {
168
            this.$store.commit('setPreloader', true);
169
            axios.get('/pa/categories-list')
170
                .then(response=> {
171
                    this.categoryList = response.data;
172
                    this.$store.commit('setPreloader', false);
173
                })
174
                .catch(error => {
175
                    this.$store.commit('AlertError', error.message);
176
                });
177
        },
178
        convertRev(rev) {
179
            if(rev === 1) {
180
                return 'Приход';
181
            }
182
            else if(rev === 2) {
183
                return 'Расход';
184
            }
185
            console.error('convertRev input: ' + rev);
186
            return 'Ошибка';
187
        },
188
        colorCategory(rev) {
189
            if(rev === 1) {
190
                return 'success';
191
            }
192
            else if(rev === 2) {
193
                return 'error';
194
            }
195
            console.error('colorCategory input: ' + rev);
196
            return 'warning';
197
        },
198
        fundsSave() {
199

200
            let url = '/pa/funds';
201
            let method = '';
202

203
            if(this.fundsFormType === 'create') {
204
                method = 'post';
205
            }
206
            else if(this.fundsFormType === 'update') {
207
                method = 'put';
208
            }
209
            else if(this.fundsFormType === 'delete') {
210
                method = 'delete';
211
            }
212

213
            this.$store.commit('setPreloader', true);
214

215
            axios({
216
                method: method,
217
                url: url,
218
                data: this.fundsFormData,
219
            })
220
                .then(response=> {
221
                    if(response.data.status == 200) {
222
                        this.fundsFormShow = false;
223
                        this.getFunds();
224
                        this.$store.commit('setPreloader', false);
225
                    }
226
                    else {
227
                        this.$store.commit('AlertError', 'Ошибка получения данных с сервера');
228
                    }
229

230
                })
231
                .catch(error => {
232
                    this.$store.commit('setAlert',
233
                        {
234
                            type: 'warning',
235
                            status: true,
236
                            message: 'Ошибка соединения с сервером. Однако, ваши данные не будут уреряны и будут записаны, после восстановления соединения'
237
                        }
238
                        );
239
                    this.fundsFormShow = false;
240
                    this.$store.commit('setPreloader', false);
241
                    this.sendBroker(method, url, this.fundsFormData);
242

243
                    console.error(error);
244
                });
245
        },
246
        newFund() {
247

248
            this.getCategories();
249
            this.billDisabled = false;
250

251
            //clear form
252
            this.fundsFormData.bills_id = this.fundsFormData.rev = this.fundsFormData.category_id = this.fundsFormData.sum = 0;
253
            this.fundsFormData.cause = '';
254

255
            this.fundsFormData.date = this.getCurrentDate();
256

257
            this.fundsFormTitle = 'Новая транзакция';
258
            this.fundsFormShow = true;
259
            this.fundsFormType = 'create';
260

261
        },
262
        editFund(object) {
263

264
            this.getCategories();
265
            this.billDisabled = true;
266

267
            this.$store.commit('setPreloader', true);
268
            //form render data
269
            this.fundsFormData.category_id = object.category_id;
270
            this.fundsFormData.funds_id = object.id;
271
            this.fundsFormData.bills_id = object.bills_id;
272
            this.fundsFormData.cause = object.cause;
273
            this.fundsFormData.date = object.date;
274
            this.fundsFormData.rev = object.rev;
275
            this.fundsFormData.sum = object.sum.toString().replace(/\./gi, ',');
276

277
            this.fundsFormType = 'update';
278
            this.fundsFormShow = true;
279
            this.$store.commit('setPreloader', false);
280

281
        },
282
        deleteFund(object) {
283

284
            let confirm = window.confirm('Вы действительно хотите удалить элемент?');
285

286
            if(confirm === true) {
287
                this.fundsFormType = 'delete';
288
                this.fundsFormData.funds_id = object.id;
289
                this.fundsSave();
290
                this.getFunds();
291
            }
292

293
        },
294
        sumFormat(sum) {
295
            let number =  sum.toString().replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');
296
            return number.replace(/\./, ',');
297
        },
298
        fundFilter() {
299

300
        },
301
        getCurrentDate() {
302

303
            let date = new Date();
304

305
            return this.dateFormat(date.toString());
306

307
        },
308
        dateFormat(date) {
309

310
            let dateInput = Date.parse(date);
311

312
            let dateObject = new Date(dateInput);
313

314
            let dateString = '';
315

316
            let dd = dateObject.getDate();
317
            if (dd < 10) dd = '0' + dd;
318

319
            let mm = dateObject.getMonth() + 1;
320
            if (mm < 10) mm = '0' + mm;
321

322
            dateString = dateObject.getFullYear()+'-'+mm+'-'+dd;
323

324
            return dateString;
325
        },
326
        filtersControl() {
327
            if(this.filters === true) {
328
                this.filters = false;
329
            }
330
            else {
331
                this.filters = true;
332
            }
333
        },
334
        isMobile() {
335
            let mobile_getter = this.$store.getters.mobile;
336

337
            let mobile = false;
338

339
            if(mobile_getter !== null) {
340
                mobile = true;
341
            }
342
            return mobile;
343
        },
344
        mobileFilterDefaultDisable() {
345
            this.filters = !this.isMobile();
346
        },
347
        sendBroker(method, url, data) {
348
            let storage = new Storage(true);
349
            let broker = new Broker(storage, 'fundsControl');
350
            broker.saveToStorage(method, url, data);
351
        },
352
        brokerSendRun()
353
        {
354
            let storage = new Storage(true);
355
            let broker = new Broker(storage, 'fundsControl');
356

357
            if(broker.queueCount() > 0)
358
            {
359
                broker.run();
360
                this.$store.commit('setAlert', {type: 'info', status: true, message: 'Есть сообщения не отправленные на сервер из-за ошибок соединения, проверьте, что все данные успешно сохранены сейчас'});
361
            }
362

363
        }
364
    },
365
    computed: {
366
        paginateValue() {
367
            let total = 0;
368

369
            for(let key in this.dataTables) {
370
                total += this.dataTables[key]['sum'];
371
            }
372

373
            return this.sumFormat(total);
374
        },
375
        slugData() {
376

377
        },
378

379
    },
380
    watch: {
381
        showFundsComponent: function (val) {
382
            this.getBills();
383
        },
384
        fundsFilterForm: {
385
            handler: function (val, oldVal) {
386
                this.getFunds();
387
            },
388
            deep: true,
389
        },
390
    },
391
    mounted() {
392
        this.brokerSendRun();
393
        this.getBills();
394
        this.getCategories();
395
        this.getFunds();
396
        this.mobileFilterDefaultDisable();
397
    },
398
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.