117 lines
4.1 KiB
Dart
117 lines
4.1 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:satu/core/base/base_service.dart';
|
|
import 'package:satu/core/entity/transaction_entity.dart';
|
|
import 'package:satu/core/models/entity_data/transaction_data.dart';
|
|
import 'package:satu/core/models/flow/items_bean.dart';
|
|
import 'package:satu/core/models/flow/operator_bean.dart';
|
|
import 'package:satu/core/models/flow/dao/product_dao.dart';
|
|
import 'package:satu/core/models/flow/sell_request.dart';
|
|
import 'package:satu/core/models/flow/sell_response.dart';
|
|
import 'package:satu/core/models/flow/transaction_state.dart';
|
|
import 'package:satu/core/redux/actions/sell_actions.dart';
|
|
import 'package:satu/core/redux/state/sell_state.dart';
|
|
import 'package:satu/core/redux/store.dart';
|
|
import 'package:satu/core/utils/locator.dart';
|
|
|
|
import 'api_service.dart';
|
|
import 'db_service.dart';
|
|
import 'dialog_service.dart';
|
|
|
|
class DataService extends BaseService {
|
|
final ApiService _api = locator<ApiService>();
|
|
final DbService _db = locator<DbService>();
|
|
|
|
final DialogService _dialogService = locator<DialogService>();
|
|
|
|
Future<TransactionData?> sellBtnHandler(
|
|
{double card = 0, double nal = 0, double total = 0}) async {
|
|
final SellRequest request = SellRequest();
|
|
final SellState sellState = Redux.store!.state.sellState!;
|
|
final TransactionState transactionState = sellState.transactionState!;
|
|
final List<ProductDao> items = sellState.items!;
|
|
for (final ProductDao item in items) {
|
|
request.items.add(_productToItemBean(item));
|
|
}
|
|
request.card = card;
|
|
request.nal = nal;
|
|
request.invoiceId = transactionState.uuid;
|
|
request.section = transactionState.sectionName;
|
|
request.contragent = transactionState.contragentName;
|
|
final OperatorBean operator = OperatorBean()
|
|
..name = 'operator'
|
|
..code = 1;
|
|
request.operator = operator;
|
|
final SellResponse response = await _api.sell(request);
|
|
if (response.operation == false) {
|
|
_dialogService.showDialog(description: response.message);
|
|
return null;
|
|
}
|
|
final TransactionData transactionData = await _updateTransaction(
|
|
transactionState: transactionState,
|
|
total: total,
|
|
card: card,
|
|
nal: nal,
|
|
sellResponse: response);
|
|
|
|
await Redux.store!.dispatch(loadSellData);
|
|
return transactionData;
|
|
}
|
|
|
|
Future<TransactionData> _updateTransaction(
|
|
{required TransactionState transactionState,
|
|
required double card,
|
|
required double nal,
|
|
required double total,
|
|
SellResponse? sellResponse}) async {
|
|
final Map<String, dynamic>? map = await _db.queryById(
|
|
transactionTableName, transactionState.uuid,
|
|
idColumnName: transactionColumnUuid);
|
|
|
|
final DateTime now = DateTime.now();
|
|
final Transaction transaction = Transaction.fromMap(map!);
|
|
final TransactionData data =
|
|
TransactionData.fromMap(jsonDecode(transaction.data!));
|
|
transaction.status = transactionStatusFinish;
|
|
transaction.updatedAt = now.toIso8601String();
|
|
data.sellResponse = sellResponse;
|
|
data.contragentName = transactionState.contragentName ?? '';
|
|
data.card = card;
|
|
data.nal = nal;
|
|
data.total = total;
|
|
transaction.data = jsonEncode(data.toMap());
|
|
log.i(jsonEncode(data.toMap()));
|
|
await _db.update(transactionTableName, transaction.toMap());
|
|
return data;
|
|
}
|
|
|
|
ItemBean _productToItemBean(ProductDao product) {
|
|
final ItemBean item = ItemBean()
|
|
..id = product.id
|
|
..price = product.price
|
|
..cnt = product.count
|
|
..name = product.productName
|
|
..excise = product.excise
|
|
..articul = product.article?.toString();
|
|
return item;
|
|
}
|
|
|
|
Future<TransactionData?> getTransactionDataById(int? id) async {
|
|
if(id == null) return null;
|
|
try {
|
|
Map<String, dynamic>? map = await _db.queryById(transactionTableName, id);
|
|
if (map != null) {
|
|
final Transaction transaction = Transaction.fromMap(map);
|
|
final String? data = transaction.data;
|
|
if (data != null) {
|
|
return TransactionData.fromMap(jsonDecode(data));
|
|
}
|
|
}
|
|
} catch (e, stack) {
|
|
log.e('getTransactionDataById', e, stack);
|
|
}
|
|
return null;
|
|
}
|
|
}
|