192 lines
7.5 KiB
Dart
192 lines
7.5 KiB
Dart
import 'package:aman_kassa_flutter/core/locator.dart';
|
||
import 'package:aman_kassa_flutter/core/models/calc_model.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';
|
||
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';
|
||
import 'package:aman_kassa_flutter/redux/actions/calc_actions.dart';
|
||
import 'package:aman_kassa_flutter/redux/actions/kassa_actions.dart';
|
||
import 'package:aman_kassa_flutter/redux/constants/operation_const.dart';
|
||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||
import 'package:aman_kassa_flutter/redux/state/calc_state.dart';
|
||
import 'package:aman_kassa_flutter/redux/state/kassa_state.dart';
|
||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||
import 'package:aman_kassa_flutter/shared/app_colors.dart';
|
||
import 'package:aman_kassa_flutter/shared/ui_helpers.dart';
|
||
import 'package:aman_kassa_flutter/views/check/image_show_container.dart';
|
||
import 'package:aman_kassa_flutter/widgets/components/calculator/calculator.dart';
|
||
import 'package:aman_kassa_flutter/widgets/fields/busy_button.dart';
|
||
import 'package:aman_kassa_flutter/widgets/loader/Dialogs.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutter_redux/flutter_redux.dart';
|
||
|
||
class PaymentView extends StatefulWidget {
|
||
final PaymentModel model;
|
||
|
||
const PaymentView({Key key, this.model}) : super(key: key);
|
||
|
||
@override
|
||
_PaymentViewState createState() => _PaymentViewState();
|
||
}
|
||
|
||
class _PaymentViewState extends State<PaymentView> {
|
||
final GlobalKey<State> _keyLoader = new GlobalKey<State>();
|
||
final DataService _dataService = locator<DataService>();
|
||
final DialogService _dialogService = locator<DialogService>();
|
||
final NavigatorService _navigatorService = locator<NavigatorService>();
|
||
bool isBusy;
|
||
|
||
@override
|
||
void initState() {
|
||
// TODO: implement initState
|
||
super.initState();
|
||
isBusy = false;
|
||
}
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return WillPopScope(
|
||
onWillPop: () {
|
||
if (!isBusy)
|
||
Navigator.pop(context);
|
||
return new Future(() => false);
|
||
},
|
||
child: Scaffold(
|
||
appBar: AppBar(
|
||
backgroundColor: whiteColor,
|
||
elevation: 0,
|
||
leading: IconButton(icon: Icon(Icons.arrow_back_ios), color: Colors.black87, onPressed: () => Navigator.pop(context),),
|
||
title: Text(dataTitle(), style: TextStyle(color: Colors.black87),),
|
||
),
|
||
body: Container(
|
||
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 12.0 ),
|
||
child: Column(
|
||
crossAxisAlignment: CrossAxisAlignment.start,
|
||
children: <Widget>[
|
||
Text(dataText() , style: TextStyle(fontWeight: FontWeight.bold, color: Colors.black26, fontSize: 15 ),),
|
||
buildStoreConnector(),
|
||
verticalSpaceLarge,
|
||
_buildBodyContent(),
|
||
],
|
||
),
|
||
),
|
||
),
|
||
);
|
||
}
|
||
|
||
String dataTitle() => widget.model.operationType == OperationTypePay ? 'Оплата' : 'Возврат';
|
||
|
||
String dataText() => widget.model.operationType == OperationTypePay ? 'К оплате' : 'К возврату';
|
||
|
||
StoreConnector buildStoreConnector() {
|
||
if(widget.model.mode == SettingModeCalc) {
|
||
return StoreConnector<AppState, CalcState>(
|
||
converter: (store) => store.state.calcState,
|
||
builder: (_, vm) {
|
||
return Text('${totalCalc(vm.calcItems)} тнг', style: TextStyle(
|
||
fontWeight: FontWeight.bold,
|
||
color: Colors.black87,
|
||
fontSize: 35));
|
||
}
|
||
);
|
||
}
|
||
return StoreConnector<AppState, KassaState>(
|
||
converter: (store) => store.state.kassaState,
|
||
builder: (_, vm) {
|
||
return Text('${totalKassa(vm.kassaItems)} тнг', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.black87, fontSize: 35 ));
|
||
}
|
||
);
|
||
}
|
||
|
||
Expanded _buildBodyContent() {
|
||
return Expanded(
|
||
child: Column(
|
||
children: <Widget>[
|
||
Container(
|
||
height: 150,
|
||
child: Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||
children: <Widget>[
|
||
Expanded(child: BusyButton(title: 'Оплатить картой', onPressed:() { pressPayment('card');}, mainColor: greenColor,)),
|
||
horizontalSpaceSmall,
|
||
Expanded(child: BusyButton(title: 'Наличными', onPressed:() { pressPayment('cash');}, mainColor: primaryColor,)),
|
||
],
|
||
),
|
||
),
|
||
verticalSpaceLarge,
|
||
Expanded(child: Container(),),
|
||
Container(child: BusyButton(title: 'Отмена', onPressed:() { Navigator.pop(context);} , mainColor: redColor,)),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
|
||
pressPayment(String type) async {
|
||
setState(() { isBusy = true; });
|
||
Dialogs.showLoadingDialog(context, _keyLoader);
|
||
try {
|
||
AppState _state = Redux.store.state;
|
||
String _token = _state.userState.user.token;
|
||
String _tradeType = _state.settingState.tradeType;
|
||
String _mode = _state.settingState.mode;
|
||
if(_mode == SettingModeCalc){
|
||
_tradeType = SettingTradeTypeGood;
|
||
}
|
||
List<ProductDao> kassaItems = _state.kassaState.kassaItems;
|
||
List<CalcModel> calcItems = _state.calcState.calcItems;
|
||
Response<dynamic> response = await _dataService.sellOrReturn(token: _token, kassaItems: kassaItems, paymentType: type, operationType: widget.model.operationType, tradeType: _tradeType, calcItems: calcItems, mode: _mode );
|
||
Navigator.of(context, rootNavigator: true).pop();
|
||
setState(() { isBusy = false; });
|
||
if(response.operation){
|
||
String message = response.body['message'];
|
||
String check = response.body['check'];
|
||
|
||
// if(_mode == SettingModeCalc){
|
||
// Redux.store.dispatch(cleanCalcItems);
|
||
// } else if(_mode == SettingModeKassa) {
|
||
// Redux.store.dispatch(cleanKassaItems);
|
||
// }
|
||
_navigatorService.pop();
|
||
_navigatorService.push(ImageShowRoute, arguments: ImageShowModel(check, message));
|
||
} else if(!response.operation && response.status !=500) {
|
||
_dialogService.showDialog(description: response.body['message']);
|
||
}
|
||
} catch(e) {
|
||
//Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||
Navigator.of(context, rootNavigator: true).pop();
|
||
setState(() { isBusy = false; });
|
||
}
|
||
|
||
|
||
}
|
||
|
||
String totalKassa(List<ProductDao> kassaItems) {
|
||
num total = 0.0;
|
||
kassaItems.forEach((element) {
|
||
total+= element.total == null ? 0.0 : element.total.toDouble();
|
||
});
|
||
return total.toString();
|
||
}
|
||
|
||
String totalCalc(List<CalcModel> items) {
|
||
num total = 0.0;
|
||
items.forEach((element) {
|
||
if(element.operation == Calculations.MULTIPLY) {
|
||
double num1 = element.num1 == null ? 0.0 : double.parse(element.num1);
|
||
double num2 = element.num2 == null ? 0.0 : double.parse(element.num2);
|
||
total += num1 * num2;
|
||
} else {
|
||
total+= element.num1 == null ? 0.0 : double.parse(element.num1);
|
||
}
|
||
});
|
||
return total.toString();
|
||
}
|
||
}
|
||
|
||
class PaymentModel {
|
||
String operationType;
|
||
String mode;
|
||
PaymentModel({this.mode, this.operationType});
|
||
} |