aman-satu-flutter/lib/core/redux/actions/journal_actions.dart

91 lines
3.1 KiB
Dart

import 'dart:convert';
import 'package:intl/intl.dart';
import 'package:logger/logger.dart';
import 'package:meta/meta.dart';
import 'package:redux/redux.dart';
import 'package:redux_thunk/redux_thunk.dart';
import 'package:satu/core/entity/category_entity.dart';
import 'package:satu/core/entity/goods_entity.dart';
import 'package:satu/core/entity/transaction_entity.dart';
import 'package:satu/core/entity/transaction_rec_entity.dart';
import 'package:satu/core/models/entity_data/transaction_data.dart';
import 'package:satu/core/models/flow/dao/product_dao.dart';
import 'package:satu/core/models/flow/dao/transaction_dao.dart';
import 'package:satu/core/models/flow/transaction_state.dart';
import 'package:satu/core/redux/state/journal_state.dart';
import 'package:satu/core/redux/state/sell_state.dart';
import 'package:satu/core/services/db_service.dart';
import 'package:satu/core/utils/locator.dart';
import 'package:satu/core/utils/logger.dart';
import 'package:uuid/uuid.dart';
import '../store.dart';
@immutable
class SetJournalStateAction {
const SetJournalStateAction(this.journalState);
final JournalState journalState;
}
final Logger log = getLogger('SetJournalStateAction');
final DbService _dbService = locator<DbService>();
ThunkAction<AppState> navigateTab(int index) {
return (Store<AppState> store) async {
store.dispatch(SetJournalStateAction(JournalState(tabIndex: index)));
loadJournalData(store);
};
}
Future<void> loadJournalData(Store<AppState> store) async {
try {
log.i('loadJournalData');
final int? appCompanyId = store.state.userState!.auth!.companyId;
final int tabIndex = store.state.journalState?.tabIndex ?? 0;
final List<Map<String, dynamic>> set = await _dbService.queryRowsWithWhere(
transactionTableName,
'$transactionColumnAppCompanyId = ?'
' and $transactionColumnStatus = ?'
' and $transactionColumnType in (?,?)',
[
appCompanyId,
transactionStatusFinish,
transactionTypeSell,
transactionTypeReturnSell
],
orderBy: '$transactionColumnCreatedAt asc');
log.i(set.length);
final List<TransactionDao> list = [];
final DateFormat formatterDay = DateFormat('dd.MM.yyyy');
final DateFormat formatterTime = DateFormat('Hms');
for (final Map<String, dynamic> map in set) {
final Transaction transaction = Transaction.fromMap(map);
final TransactionData data =
TransactionData.fromMap(jsonDecode(transaction.data!));
final TransactionDao dao = TransactionDao();
dao.id = transaction.id;
final DateTime updateAt = DateTime.parse(transaction.updatedAt!);
dao.day = formatterDay.format(updateAt);
dao.date = formatterTime.format(updateAt);
dao.contragentName = data.contragentName;
dao.number = data.sellResponse?.journalId.toString() ?? '';
dao.total = data.total;
if(transaction.type == transactionTypeReturnSell) {
dao.received = false;
}
list.add(dao);
}
store.dispatch(SetJournalStateAction(JournalState(
items: list,
)));
} catch (e, stack) {
log.e('loadJournalData', e, stack);
}
}