import 'dart:convert'; import 'package:aman_kassa_flutter/core/base/base_service.dart'; import 'package:aman_kassa_flutter/core/entity/Category.dart'; import 'package:aman_kassa_flutter/core/entity/Goods.dart'; import 'package:aman_kassa_flutter/core/entity/Service.dart'; import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/models/check_data.dart'; import 'package:aman_kassa_flutter/core/models/check_item.dart'; import 'package:aman_kassa_flutter/core/models/product_dao.dart'; import 'package:aman_kassa_flutter/core/models/response.dart'; import 'package:aman_kassa_flutter/core/models/user.dart'; import 'package:aman_kassa_flutter/core/services/DbService.dart'; import 'package:aman_kassa_flutter/redux/constants/operation_const.dart'; import 'package:aman_kassa_flutter/redux/store.dart'; import 'ApiService.dart'; class DataService extends BaseService { final ApiService _api = locator(); final DbService _db = locator(); Future> getCategoriesByParentId({int parentId}) async { List> list = await _db.queryRowsWithWhere( Category_tableName, '$Category_columnParentIn = ?', [parentId ?? 0]); return list.map((e) => Category.fromMap(e)).toList(); } Future> getServices() async { List> list = await _db.queryAllRows(Service_tableName); return list.map((e) => Service.fromMap(e)).toList(); } Future> getGoodsByCategoryId({int categoryId}) async { List> list = await _db.queryRowsWithWhere( Goog_tableName, '$Goog_columnCategoryId = ?', [categoryId ?? 0]); return list.map((e) => Good.fromMap(e)).toList(); } CheckData _transformProductsToCheckData( {String paymentType, String tradeType, List items}) { List itemsList = []; int iterator = 1; num summ = 0.0; items.forEach((el) { int articul = iterator; if (el.service != null) { articul = el.service.articul; } else if (el.good != null) { articul = el.good.articul; } itemsList.add(CheckItem( name: el.name ?? 'Позиция №$iterator', cnt: el.count, price: el.price, articul: articul)); summ += el.total; iterator++; }); CheckData checkData = CheckData(type: tradeType, items: itemsList); if ((paymentType ?? 'cash') == 'card') { checkData.card = summ; } print(checkData); return checkData; } Future> sellOrReturn( {String paymentType, String tradeType, String token, List items, String operationType}) async { try { CheckData checkData = _transformProductsToCheckData( paymentType: paymentType, tradeType: tradeType, items: items); String data = jsonEncode(checkData.toJson()); log.i('token: $token'); log.i('data: $data'); Response response = await (operationType == OperationTypePay ? _api.sell(token, data) : _api.sellReturn(token, data)); log.i('response status: ${response.status}'); log.i('response operation: ${response.operation}'); if (response.status == 200 && response.operation == true) { log.i( 'save to db appCompanyId: ${Redux.store.state.userState.user.appCompanyId}, kassaId: ${Redux.store.state.userState.user.kassaId}'); /* save data to db * data, * dateTime, * check, * appCompanyId, * kassaId, * total, * name, * type */ } return response; } catch (e) { print(e); } return null; } Future getDataFromServer(User user) async { try { String token = user.token; Response goods = await _api.getGoodsFromServer(token); Response categories = await _api.getCategoryFromServer(token); Response services = await _api.getServiceFromServer(token); await _db.deleteAll(Goog_tableName); await _db.deleteAll(Category_tableName); await _db.deleteAll(Service_tableName); log.i('All tables cleaned'); for (var key in goods.body.keys) { print(goods.body[key]); Good row = Good.fromJson(goods.body[key]); await _db.insert(Goog_tableName, row.toMap()); } log.i('Inserted ${goods.body.length} to table $Goog_tableName'); for (var el in categories.body) { print(el); Category row = Category.fromJson(el); await _db.insert(Category_tableName, row.toMap()); } log.i('Inserted ${categories.body.length} to table $Category_tableName'); for (var key in services.body.keys) { print(services.body[key]); Service row = Service.fromJson(services.body[key]); await _db.insert(Service_tableName, row.toMap()); } log.i('Inserted ${services.body.length} to table $Service_tableName'); return true; } catch (e) { print(e); return false; } } }