payment, refund, closeday - finished/ Tested with moscow server
parent
9d54a20f65
commit
07fa2d683a
|
|
@ -1,6 +1,8 @@
|
|||
|
||||
import 'package:aman_kassa_flutter/core/models/transaction_item.dart';
|
||||
|
||||
import 'halyk/halyk_close_day_dao.dart';
|
||||
|
||||
class CloseDayData {
|
||||
final String title;
|
||||
final num totalAmount;
|
||||
|
|
@ -10,7 +12,7 @@ class CloseDayData {
|
|||
final num refundAmount;
|
||||
final int refundCount;
|
||||
|
||||
final List<TransactionItem> items;
|
||||
final List<TransactionBean> items;
|
||||
CloseDayData({
|
||||
this.title,
|
||||
this.items,
|
||||
|
|
@ -28,7 +30,7 @@ class CloseDayData {
|
|||
paymentCount: json['paymentCount'],
|
||||
refundAmount: json['refundAmount'],
|
||||
refundCount: json['refundCount'],
|
||||
items: (json['items'] as List).map((e) => TransactionItem.fromJson(e)).toList(),
|
||||
items: (json['items'] as List).map((e) => TransactionBean.fromMap(e)).toList(),
|
||||
);
|
||||
}
|
||||
Map<String, dynamic> toJson() =>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,182 @@
|
|||
/// result : {"code":"0","description":"Successfully completed"}
|
||||
/// transactions : {"transaction":[{"type":"PAYMENT","instrument":"CARD","amount":"6000","terminalId":"123321","operationDay":"4","transactionNumber":"69","instrumentSpecificData":{"authorizationCode":"000000","rrn":"1234567890","cardholderName":"IVAN IVANOV","maskedPan":"123456******7890"}},{"type":"REFUND","instrument":"CARD","amount":"4500","terminalId":"123321","operationDay":"4","transactionNumber":"70","instrumentSpecificData":{"authorizationCode":"000000","rrn":"1234567890","cardholderName":"IVAN IVANOV","maskedPan":"123456******7890"},"parentTransaction":{"terminalId":"123321","operationDay":"4","transactionNumber":"69"}}]}
|
||||
/// closeDayResults : {"reconciliationResult":[{"hostResultCode":"000","hostResultDescription":"Success","terminalExternalId":"example_terminal_id"}]}
|
||||
|
||||
class HalykCloseDayDao {
|
||||
ResultBean result;
|
||||
TransactionsBean transactions;
|
||||
CloseDayResultsBean closeDayResults;
|
||||
|
||||
HalykCloseDayDao({ this.result, this.closeDayResults, this.transactions});
|
||||
|
||||
static HalykCloseDayDao fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
HalykCloseDayDao halykCloseDayDaoBean = HalykCloseDayDao();
|
||||
halykCloseDayDaoBean.result = ResultBean.fromMap(map['result']);
|
||||
halykCloseDayDaoBean.transactions = TransactionsBean.fromMap(map['transactions']);
|
||||
halykCloseDayDaoBean.closeDayResults = CloseDayResultsBean.fromMap(map['closeDayResults']);
|
||||
return halykCloseDayDaoBean;
|
||||
}
|
||||
|
||||
Map toJson() => {
|
||||
"result": result,
|
||||
"transactions": transactions,
|
||||
"closeDayResults": closeDayResults,
|
||||
};
|
||||
}
|
||||
|
||||
/// reconciliationResult : [{"hostResultCode":"000","hostResultDescription":"Success","terminalExternalId":"example_terminal_id"}]
|
||||
|
||||
class CloseDayResultsBean {
|
||||
List<ReconciliationResultBean> reconciliationResult;
|
||||
|
||||
static CloseDayResultsBean fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
CloseDayResultsBean closeDayResultsBean = CloseDayResultsBean();
|
||||
closeDayResultsBean.reconciliationResult = List()..addAll(
|
||||
(map['reconciliationResult'] as List ?? []).map((o) => ReconciliationResultBean.fromMap(o))
|
||||
);
|
||||
return closeDayResultsBean;
|
||||
}
|
||||
|
||||
Map toJson() => {
|
||||
"reconciliationResult": reconciliationResult,
|
||||
};
|
||||
}
|
||||
|
||||
/// hostResultCode : "000"
|
||||
/// hostResultDescription : "Success"
|
||||
/// terminalExternalId : "example_terminal_id"
|
||||
|
||||
class ReconciliationResultBean {
|
||||
String hostResultCode;
|
||||
String hostResultDescription;
|
||||
String terminalExternalId;
|
||||
|
||||
static ReconciliationResultBean fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
ReconciliationResultBean reconciliationResultBean = ReconciliationResultBean();
|
||||
reconciliationResultBean.hostResultCode = map['hostResultCode'];
|
||||
reconciliationResultBean.hostResultDescription = map['hostResultDescription'];
|
||||
reconciliationResultBean.terminalExternalId = map['terminalExternalId'];
|
||||
return reconciliationResultBean;
|
||||
}
|
||||
|
||||
Map toJson() => {
|
||||
"hostResultCode": hostResultCode,
|
||||
"hostResultDescription": hostResultDescription,
|
||||
"terminalExternalId": terminalExternalId,
|
||||
};
|
||||
}
|
||||
|
||||
/// transaction : [{"type":"PAYMENT","instrument":"CARD","amount":"6000","terminalId":"123321","operationDay":"4","transactionNumber":"69","instrumentSpecificData":{"authorizationCode":"000000","rrn":"1234567890","cardholderName":"IVAN IVANOV","maskedPan":"123456******7890"}},{"type":"REFUND","instrument":"CARD","amount":"4500","terminalId":"123321","operationDay":"4","transactionNumber":"70","instrumentSpecificData":{"authorizationCode":"000000","rrn":"1234567890","cardholderName":"IVAN IVANOV","maskedPan":"123456******7890"},"parentTransaction":{"terminalId":"123321","operationDay":"4","transactionNumber":"69"}}]
|
||||
|
||||
class TransactionsBean {
|
||||
List<TransactionBean> transaction;
|
||||
|
||||
static TransactionsBean fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
TransactionsBean transactionsBean = TransactionsBean();
|
||||
transactionsBean.transaction = List()..addAll(
|
||||
(map['transaction'] as List ?? []).map((o) => TransactionBean.fromMap(o))
|
||||
);
|
||||
return transactionsBean;
|
||||
}
|
||||
|
||||
Map toJson() => {
|
||||
"transaction": transaction,
|
||||
};
|
||||
}
|
||||
|
||||
/// type : "PAYMENT"
|
||||
/// instrument : "CARD"
|
||||
/// amount : "6000"
|
||||
/// terminalId : "123321"
|
||||
/// operationDay : "4"
|
||||
/// transactionNumber : "69"
|
||||
/// instrumentSpecificData : {"authorizationCode":"000000","rrn":"1234567890","cardholderName":"IVAN IVANOV","maskedPan":"123456******7890"}
|
||||
|
||||
class TransactionBean {
|
||||
String type;
|
||||
String instrument;
|
||||
num amount;
|
||||
int terminalId;
|
||||
int operationDay;
|
||||
int transactionNumber;
|
||||
InstrumentSpecificDataBean instrumentSpecificData;
|
||||
|
||||
static TransactionBean fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
TransactionBean transactionBean = TransactionBean();
|
||||
transactionBean.type = map['type'];
|
||||
transactionBean.instrument = map['instrument'];
|
||||
transactionBean.amount = map['amount'];
|
||||
transactionBean.terminalId = map['terminalId'];
|
||||
transactionBean.operationDay = map['operationDay'];
|
||||
transactionBean.transactionNumber = map['transactionNumber'];
|
||||
transactionBean.instrumentSpecificData = InstrumentSpecificDataBean.fromMap(map['instrumentSpecificData']);
|
||||
return transactionBean;
|
||||
}
|
||||
|
||||
Map toJson() => {
|
||||
"type": type,
|
||||
"instrument": instrument,
|
||||
"amount": amount,
|
||||
"terminalId": terminalId,
|
||||
"operationDay": operationDay,
|
||||
"transactionNumber": transactionNumber,
|
||||
"instrumentSpecificData": instrumentSpecificData,
|
||||
};
|
||||
}
|
||||
|
||||
/// authorizationCode : "000000"
|
||||
/// rrn : "1234567890"
|
||||
/// cardholderName : "IVAN IVANOV"
|
||||
/// maskedPan : "123456******7890"
|
||||
|
||||
class InstrumentSpecificDataBean {
|
||||
String authorizationCode;
|
||||
String rrn;
|
||||
String cardholderName;
|
||||
String maskedPan;
|
||||
|
||||
static InstrumentSpecificDataBean fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
InstrumentSpecificDataBean instrumentSpecificDataBean = InstrumentSpecificDataBean();
|
||||
instrumentSpecificDataBean.authorizationCode = map['authorizationCode'];
|
||||
instrumentSpecificDataBean.rrn = map['rrn'];
|
||||
instrumentSpecificDataBean.cardholderName = map['cardholderName'];
|
||||
instrumentSpecificDataBean.maskedPan = map['maskedPan'];
|
||||
return instrumentSpecificDataBean;
|
||||
}
|
||||
|
||||
Map toJson() => {
|
||||
"authorizationCode": authorizationCode,
|
||||
"rrn": rrn,
|
||||
"cardholderName": cardholderName,
|
||||
"maskedPan": maskedPan,
|
||||
};
|
||||
}
|
||||
|
||||
/// code : "0"
|
||||
/// description : "Successfully completed"
|
||||
|
||||
class ResultBean {
|
||||
int code;
|
||||
String description;
|
||||
|
||||
ResultBean({this.code, this.description});
|
||||
|
||||
static ResultBean fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
ResultBean resultBean = ResultBean();
|
||||
resultBean.code = map['code'];
|
||||
resultBean.description = map['description'];
|
||||
return resultBean;
|
||||
}
|
||||
|
||||
Map toJson() => {
|
||||
"code": code,
|
||||
"description": description,
|
||||
};
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ import 'dart:convert';
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:aman_kassa_flutter/core/base/base_service.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/redux/state/user_state.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
import 'package:aman_kassa_flutter/views/login/login_view.dart';
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
import 'dart:convert';
|
||||
import 'package:aman_kassa_flutter/core/base/base_service.dart';
|
||||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'file:///D:/Work/serik/Flutter/aman-kassa-flutter/lib/core/models/halyk_response_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/close_day_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_close_day_dao.dart' as Cd;
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_response_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/transaction_item.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/ApiService.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
|
@ -42,14 +43,15 @@ class BankService extends BaseService {
|
|||
|
||||
|
||||
|
||||
Future<HalykResponse> closeDay({ String token}) async {
|
||||
Future<Cd.HalykCloseDayDao> closeDay({ String token}) async {
|
||||
try {
|
||||
String response = await _channel.invokeMethod("closeDay", <String, dynamic>{'token': token });
|
||||
HalykResponse dao = HalykResponse.fromMap(json.decode(response));
|
||||
log.i(response);
|
||||
Cd.HalykCloseDayDao dao = Cd.HalykCloseDayDao.fromMap(json.decode(response));
|
||||
return dao;
|
||||
} catch (e, stack) {
|
||||
log.e("BankService", e, stack);
|
||||
return new HalykResponse(result: ResultBean(description: 'Ошибка при закрытии дня', code: -1));
|
||||
return new Cd.HalykCloseDayDao(result: Cd.ResultBean(description: 'Ошибка при закрытии дня', code: -1));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -81,11 +83,11 @@ class BankService extends BaseService {
|
|||
}
|
||||
|
||||
|
||||
CloseDayData closeDayDataConvert(dynamic rows) {
|
||||
CloseDayData closeDayDataConvert(Cd.TransactionsBean transactions) {
|
||||
final DateFormat formatter = DateFormat('dd.MM.yyyy');
|
||||
final DateTime now = DateTime.now();
|
||||
final String formatted = formatter.format(now);
|
||||
List<TransactionItem> items = (rows as List).map((e) => TransactionItem.fromJson(e)).toList();
|
||||
List<Cd.TransactionBean> items = transactions.transaction;
|
||||
num totalAmount = 0;
|
||||
int totalCount = 0;
|
||||
num paymentAmount = 0;
|
||||
|
|
@ -93,12 +95,12 @@ class BankService extends BaseService {
|
|||
num refundAmount = 0;
|
||||
int refundCount = 0;
|
||||
|
||||
for(TransactionItem item in items) {
|
||||
if(item.transactionType == 'PAYMENT') {
|
||||
for(Cd.TransactionBean item in items) {
|
||||
if(item.type == 'PAYMENT') {
|
||||
paymentCount++;
|
||||
paymentAmount += ( item.amount / 100 );
|
||||
totalAmount += ( item.amount / 100 );
|
||||
} else if(item.transactionType == 'REFUND') {
|
||||
} else if(item.type == 'REFUND') {
|
||||
refundCount++;
|
||||
refundAmount += ( item.amount / 100 );
|
||||
totalAmount -= ( item.amount / 100 );
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'file:///D:/Work/serik/Flutter/aman-kassa-flutter/lib/core/models/halyk/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/redux/state/bank_state.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'file:///D:/Work/serik/Flutter/aman-kassa-flutter/lib/core/models/halyk/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:aman_kassa_flutter/core/models/close_day_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_close_day_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/transaction_item.dart';
|
||||
import 'package:aman_kassa_flutter/shared/shared_styles.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
|
@ -54,13 +55,15 @@ class CloseDayShowContainer extends StatelessWidget {
|
|||
return Divider();
|
||||
},
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
TransactionItem item = data.items.elementAt(index);
|
||||
TransactionBean item = data.items.elementAt(index);
|
||||
return ListTile(
|
||||
title: Text(item.cardNumber),
|
||||
title: Text(item.instrumentSpecificData.maskedPan),
|
||||
subtitle: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(dateFormat.format(item.date)),
|
||||
if(item.instrumentSpecificData.cardholderName!=null)
|
||||
Text(item.instrumentSpecificData.cardholderName),
|
||||
Text('Операционный день № ${item.operationDay?.toString()}'),
|
||||
],
|
||||
),
|
||||
trailing: Text('${item.amount / 100} T'),
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
|||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
|
||||
import 'package:aman_kassa_flutter/core/models/close_day_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk_response_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_close_day_dao.dart';
|
||||
import 'file:///D:/Work/serik/Flutter/aman-kassa-flutter/lib/core/models/halyk/halyk_response_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/money.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/response.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/dialog_models.dart';
|
||||
|
|
@ -235,8 +236,8 @@ class _AdditionalTabState extends State<AdditionalTab> {
|
|||
}
|
||||
|
||||
|
||||
HalykResponse closeDayDao = (await closeDayHalykPos()) as HalykResponse;
|
||||
|
||||
HalykCloseDayDao closeDayDao = await closeDayHalykPos();
|
||||
log.i(closeDayDao.toJson());
|
||||
if (closeDayDao.result.code != 0) {
|
||||
if (closeDayDao.result.description != null) {
|
||||
_dialog.showDialog(description: closeDayDao.result.description);
|
||||
|
|
@ -247,24 +248,24 @@ class _AdditionalTabState extends State<AdditionalTab> {
|
|||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// CloseDayData closeDayData = _bankService.closeDayDataConvert(closeDayDao.rows);
|
||||
//
|
||||
// User user = Redux.store.state.userState.user;
|
||||
// _dataService.insertVoucher(
|
||||
// user: user,
|
||||
// name: closeDayData.title,
|
||||
// data: jsonEncode(closeDayData.toJson()),
|
||||
// total: closeDayData.totalAmount.toDouble(),
|
||||
// type: VoucherTypeCloseDayPosReport);
|
||||
//
|
||||
// // _dialog.showDialog(description: 'Закрытие дня: операция прошла успешно!');
|
||||
// setState(() {
|
||||
// isClosePosBusy = false;
|
||||
// });
|
||||
//
|
||||
// _navigator.push(CloseDayShowRoute,
|
||||
// arguments: closeDayData);
|
||||
|
||||
CloseDayData closeDayData = _bankService.closeDayDataConvert(closeDayDao.transactions);
|
||||
|
||||
User user = Redux.store.state.userState.user;
|
||||
_dataService.insertVoucher(
|
||||
user: user,
|
||||
name: closeDayData.title,
|
||||
data: jsonEncode(closeDayData.toJson()),
|
||||
total: closeDayData.totalAmount.toDouble(),
|
||||
type: VoucherTypeCloseDayPosReport);
|
||||
|
||||
// _dialog.showDialog(description: 'Закрытие дня: операция прошла успешно!');
|
||||
setState(() {
|
||||
isClosePosBusy = false;
|
||||
});
|
||||
|
||||
_navigator.push(CloseDayShowRoute,
|
||||
arguments: closeDayData);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'package:aman_kassa_flutter/core/logger.dart';
|
||||
import 'file:///D:/Work/serik/Flutter/aman-kassa-flutter/lib/core/models/halyk_response_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_close_day_dao.dart' as Cd;
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_response_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/DataService.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/dialog_service.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/navigator_service.dart';
|
||||
|
|
@ -8,7 +9,7 @@ import 'package:aman_kassa_flutter/redux/store.dart';
|
|||
import 'package:logger/logger.dart';
|
||||
import '../../core/models/aman_dao.dart';
|
||||
import '../../core/models/card_data.dart';
|
||||
import '../../core/models/halyk_post_session.dart';
|
||||
import '../../core/models/halyk/halyk_post_session.dart';
|
||||
import '../../core/services/BankService.dart';
|
||||
import '../../redux/state/bank_state.dart';
|
||||
|
||||
|
|
@ -72,7 +73,7 @@ Future<AmanDao<CardData>> refundHalykPos(CardData refundData, double total) asyn
|
|||
return AmanDao<CardData>(msg: response.result.description, success: false);
|
||||
}
|
||||
|
||||
Future<HalykResponse> closeDayHalykPos() async {
|
||||
Future<Cd.HalykCloseDayDao> closeDayHalykPos() async {
|
||||
//Авторизация
|
||||
String token = Redux.store.state.userState.user.token;
|
||||
BankState bankState = Redux.store.state.bankState;
|
||||
|
|
@ -80,10 +81,10 @@ Future<HalykResponse> closeDayHalykPos() async {
|
|||
HalykPosSession session =
|
||||
await _bankService.renewToken(token: token, login: bankState.login, password: bankState.password);
|
||||
if (session.token == null) {
|
||||
return new HalykResponse(result: ResultBean(description: 'Отказано в доступе к API банка', code: -1));
|
||||
return new Cd.HalykCloseDayDao(result: Cd.ResultBean(description: 'Отказано в доступе к API банка', code: -1));
|
||||
}
|
||||
//Инициализация
|
||||
HalykResponse response = await _bankService.closeDay(token: session.token);
|
||||
Cd.HalykCloseDayDao response = await _bankService.closeDay(token: session.token);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import 'package:aman_kassa_flutter/core/models/calc_model.dart';
|
|||
import 'package:aman_kassa_flutter/core/models/card_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_image_modal.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk/halyk_post_session.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/route_names.dart';
|
||||
|
|
|
|||
Loading…
Reference in New Issue